kali系统概述、nmap扫描应用、john破解密码、抓包概述、以太网帧结构、抓包应用、wireshark应用、nginx安全加固、Linux系统加固

目录

kali

nmap扫描

使用john破解密码

抓包

封装与解封装

网络层数据包结构

TCP头部结构​编辑

UDP头部结构

实施抓包

安全加固

nginx安全

防止缓冲区溢出

Linux加固


kali

  • 实际上它就是一个预安装了很多安全工具的Debian Linux

    [root@myhost ~]# kali reset

    kali reset OK.

    该虚拟机系统用户名为:kali,密码为:kali

  • 基础配置

    $ ip a s # 查看网络IP地址,本例中查看到的是192.168.88.40

    $ sudo systemctl start ssh # 启ssh服务,弹出的窗口输入密码kali

    $ sudo systemctl enable ssh # 设置ssh服务开机自启

    [root@myhost ~]# ssh kali@192.168.88.40

    kali@192.168.88.40's password: kali

    ┌──(kali㉿kali)-[~]

    └─$

nmap扫描

  • 一般来说扫描是攻击的前奏。

  • 扫描可以识别目标对象是什么系统,开放了哪些服务。

  • 获知具体的服务软件及其版本号,可以使得攻击的成功率大大提升。

  • 扫描可以检测潜在的风险,也可以寻找攻击目标、收集信息、找到漏洞

  • windows下,扫描可以使用xscan / superscan

  • Linux,扫描可以采用nmap

  • 吾爱破解:吾爱破解 - LCG - LSG|安卓破解|病毒分析|www.52pojie.cn

  • 中国黑客团队论坛:https://www.cnhackteam.org/

  • 俄罗斯论坛:https://rutracker.org/

    ┌──(kali㉿kali)-[~]

    └─$ nmap

    -sT: TCP扫描。

    -U: 扫描目标的UDP端口。

    -sP:ping扫描

    -A:对目标系统全面分析

    扫描整个网段,哪机器可以ping通

    ┌──(kali㉿kali)-[~]

    └─$ nmap -sP 192.168.88.0/24

    扫描192.168.88.100开放了哪些TCP端口

    ┌──(kali㉿kali)-[~]

    └─$ sudo nmap -sT 192.168.88.100

    扫描192.168.88.100开放了哪些UDP端口。非常耗时!

    ┌──(kali㉿kali)-[~]

    └─$ sudo nmap -sU 192.168.88.100

    全面扫描192.168.88.100系统信息

    ┌──(kali㉿kali)-[~]

    └─$ sudo nmap -A 192.168.88.100

  • 使用脚本扫描

    通过脚本扫描目标主机的ftp服务

    在目标主机上安装vsftpd服务

    [root@web1 ~]# yum install -y vsftpd

    [root@web1 ~]# vim /etc/vsftpd/vsftpd.conf

    12 anonymous_enable=YES

    [root@web1 ~]# systemctl enable vsftpd --now

    在kali主机上查看有哪些脚本

    ┌──(kali㉿kali)-[~]

    └─$ ls /usr/share/nmap/scripts/

    扫描ftp服务是否支持匿名访问。ftp控制连接端口号是21

    ┌──(kali㉿kali)-[~]

    └─$ sudo nmap --script=ftp-anon.nse 192.168.88.100 -p 21

    21/tcp open ftp

    | ftp-anon: Anonymous FTP login allowed # 允许匿名访问

    扫描ftp相关信息,如版本号、带宽限制等

    ┌──(kali㉿kali)-[~]

    └─$ sudo nmap --script=ftp-syst.nse 192.168.88.100 -p 21

    扫描ftp后门漏洞

    ┌──(kali㉿kali)-[~]

    └─$ sudo nmap --script=ftp-vsftpd-backdoor 192.168.88.100 -p 21

  • 扫描口令

    通过ssh协议,使用nmap自带的密码本扫描远程主机的用户名和密码

    在目标主机上创建名为admin的用户,密码为123456

    [root@web1 ~]# useradd admin

    [root@web1 ~]# echo 123456 | passwd --stdin admin

    在kali上扫描弱密码

    ┌──(kali㉿kali)-[~]

    └─$ sudo nmap --script=ssh-brute.nse 192.168.88.100 -p 22

    通过ssh协议,使用nmap以及自己的密码本扫描远程主机的密码

    1. 创建用户名文件

    ┌──(kali㉿kali)-[~]

    └─$ sudo echo root > /tmp/users.txt

    ┌──(kali㉿kali)-[~]

    └─$ cat /tmp/users.txt

    root

    2. 生成1990-01-01到2020-12-31之间的所月日期

    ┌──(kali㉿kali)-[~]

    └─$ vim mydate.py

    from datetime import datetime, timedelta

    d1 = datetime(1989, 12, 31)

    d2 = datetime(2021, 1, 1)

    dt = timedelta(days=1)

    with open('/tmp/mima.txt', 'w') as f:

      while d1 < d2:
    
          d1 += dt
    
          f.write("%s\n" % d1.strftime('%Y%m%d'))
    

    ┌──(kali㉿kali)-[~]

    └─$ python3 mydate.py

    3. 修改web1的密码

    [root@web1 ~]# echo 19910101 | passwd --stdin root

    4. 使用自己的密码本破解密码

    ┌──(kali㉿kali)-[~]

    └─$ sudo nmap --script=ssh-brute.nse --script-args userdb=/tmp/users.txt,passdb=/tmp/mima.txt 192.168.88.100 -p 22

    5. 目标主机将会记录所有的登陆事件

    [root@web1 ~]# vim /var/log/secure

    查看最近的登陆失败事件

    [root@web1 ~]# lastb

    查看最近的登陆成功事件

    [root@web1 ~]# last

  • 扫描windows口令

    [root@myhost ~]# cat /tmp/winuser.txt # windows用户名

    administrator

    admin

    通过samba服务扫描密码

    [root@myhost ~]# nmap --script=smb-brute.nse --script-args userdb=/tmp/winuser.txt,passdb=/tmp/mima 172.40.0.151

使用john破解密码

  • 在线破解哈希值的网站:md5在线解密破解,md5解密加密

  • 哈希是算法,英文hash的音译,包括md5、sha等

    • 哈希算法是一种单向加密的算法,也就是将原始数据生成一串"乱码"
    • 只能通过原始数据,生成这串"乱码",但是不能通过"乱码"回推出原始数据
    • 相同的原始数据,生成的乱码是相同的。
  • kali系统提供了一个名为john的工具,可用于密码破解

    [root@web1 ~]# echo 123456 | passwd --stdin root

    [root@web1 ~]# useradd tom

    [root@web1 ~]# echo abc123 | passwd --stdin tom

    [root@web1 ~]# useradd jerry

    [root@web1 ~]# echo 123123 | passwd --stdin jerry

    [root@web1 ~]# scp /etc/shadow kali@192.168.88.40:/home/kali/

    字典暴力破解,密码本是/usr/share/john/password.lst

    ┌──(kali㉿kali)-[~]

    └─$ sudo john shadow

    直接显示破解的密码,不显示其他额外信息

    ┌──(kali㉿kali)-[~]

    └─$ sudo john --show shadow

    root:123456:18912:0:99999:7:::

    tom:abc123:18912:0:99999:7:::

    jerry:123123:18912:0:99999:7:::

    字典暴力破解,指定密码本文件

    ┌──(kali㉿kali)-[~]

    └─$ sudo john --wordlist=/tmp/mima.txt shadow

抓包

封装与解封装

  • MAC地址:分为目标和源MAC地址,6字节
  • Type:类型,说明数据帧中包含的数据类型
  • Data:高层数据
  • FCS:帧校验序列

网络层数据包结构

  • 版本:协议版本,如IPv4
  • 生存时间:8位,初始一个值n,每经过一个路由器减1,直到为0丢弃,目的为防止分组在网络上无限传播下去
  • 协议号:数据部分应交付的协议号,如TCP是6,UDP是17

TCP头部结构

  • 源端口:数据段的源端口,一般为大于1024的随机值
  • 目标端口:数据段的目标端口
  • 序号:在一个TCP连接中传输的数据段都按顺序编号

UDP头部结构

  • 源端口:数据段的源端口,一般为大于1024的随机值
  • 目标端口:数据段的目标端口

实施抓包

  • 传输的各种数据,在网络中都是一个个的数据包

    ┌──(kali㉿kali)-[~]

    └─$ sudo tcpdump

    -i:指定抓取哪块网卡进入的数据包

    -A:转换为ASCII码,使得可读

    -w:抓包写入文件

    -r:从文件中读取抓包信息

    抓包时可以过滤要抓哪些包

    使用host过滤主机,使用net过滤网段,使用port过滤端口... ...

    1. 抓包:抓取eth0上进出的、与192.168.88.100有关的、涉及TCP21端口的数据包。以下命令执行后,打开新终端。

    ┌──(kali㉿kali)-[~]

    └─$ sudo tcpdump -i eth0 -A host 192.168.88.100 and tcp port 21

    2. 在新终端登陆ftp

    ┌──(kali㉿kali)-[~]

    └─$ ftp 192.168.88.100

    Connected to 192.168.88.100.

    220 (vsFTPd 3.0.2)

    Name (192.168.88.11:kali): tom # 用户名

    331 Please specify the password.

    Password:abc123 # 此处是tom的密码

    230 Login successful.

    Remote system type is UNIX.

    Using binary mode to transfer files.

    ftp> exit # 退出

    221 Goodbye.

    3.在tcpdump终端可以看到明文的用户名和密码

    保存抓包文件

    1. 将抓到的包存入文件ftp.cap

    ┌──(kali㉿kali)-[~]

    └─$ sudo tcpdump -i eth0 -A -w ftp.cap host 192.168.88.100 and tcp port 21

    2. 在另一个终端访问ftp

    在新终端登陆ftp

    ┌──(kali㉿kali)-[~]

    └─$ ftp 192.168.88.100

    Connected to 192.168.88.100.

    220 (vsFTPd 3.0.2)

    Name (192.168.88.11:kali): tom # 用户名

    331 Please specify the password.

    Password:abc123 # 此处是tom的密码

    230 Login successful.

    Remote system type is UNIX.

    Using binary mode to transfer files.

    ftp> exit # 退出

    221 Goodbye.

    3. 在抓包终端ctrl+c停止

    4. 读取抓到的包,并过滤

    ┌──(kali㉿kali)-[~]

    └─$ tcpdump -A -r ftp.cap | egrep 'USER|PASS'

  • 图形工具:wireshark

    [root@myhost ~]# yum install wireshark ftp

选择抓哪块网卡进出的数据,然后点左上角的开始

抓到包后,点击左上角同样位置停止,查看数据

安全加固

nginx安全

  • 安装启服务

    [root@web1 ~]# yum install -y nginx

    [root@web1 ~]# systemctl enable nginx --now

  • 命令行访问不存在的路径:

    [root@web1 ~]# curl -I http://192.168.88.100/

    HTTP/1.1 200 OK

    Server: nginx/1.14.1 # 版本号

    Date: Mon, 02 Jan 2023 02:54:45 GMT

    Content-Type: text/html

    Content-Length: 3429

    Last-Modified: Thu, 10 Jun 2021 09:09:03 GMT

    Connection: keep-alive

    ETag: "60c1d6af-d65"

    Accept-Ranges: bytes

  • 隐藏版本信息

    [root@web1 ~]# vim /etc/nginx/nginx.conf

    ... ...

    17 http {

    18 server_tokens off;

    ... ...

    [root@web1 ~]# systemctl restart nginx.service

  • 再次访问不存在的路径,版本号消失

    [root@web1 ~]# curl -I http://192.168.88.100/

    HTTP/1.1 200 OK

    Server: nginx # 没有版本号了

    Date: Mon, 02 Jan 2023 02:56:26 GMT

    Content-Type: text/html

    Content-Length: 3429

    Last-Modified: Thu, 10 Jun 2021 09:09:03 GMT

    Connection: keep-alive

    ETag: "60c1d6af-d65"

    Accept-Ranges: bytes

  • 防止DOS、DDOS攻击

  • DDOS:分布式拒绝服务

    压力测试,每批次发送100个请求给web服务器,一共发200个

    [root@myhost ~]# yum install -y httpd-tools

    [root@myhost ~]# ab -c 100 -n 200 http://192.168.88.100/

    ... ...

    Benchmarking 192.168.88.100 (be patient)

    Completed 100 requests

    Completed 200 requests

    Finished 200 requests # 发送200个请求完成

    ... ...

    Complete requests: 200 # 完成了200个请求

    Failed requests: 0 # 0个失败

    ... ...

  • 配置nginx连接共享内存为10M,每秒钟只接收一个请求,最多有5个请求排队,多余的拒绝

    [root@web1 ~]# vim /etc/nginx/nginx.conf

    17 http {

    18 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; # 添加

    ... ...

    40 server {

    41 listen 80 default_server;

    42 listen [::]:80 default_server;

    43 server_name _;

    44 root /usr/share/nginx/html;

    45 limit_req zone=one burst=5; # 添加

    [root@web1 ~]# systemctl restart nginx.service

    再次测试

    [root@myhost ~]# ab -c 100 -n 200 http://192.168.88.100/

    ... ...

    Benchmarking 192.168.88.100 (be patient)

    Completed 100 requests

    Completed 200 requests

    Finished 200 requests

    ... ...

    Complete requests: 200

    Failed requests: 194 # 失败了194个

    ... ...

防止缓冲区溢出

  • 缓冲区溢出定义:程序企图在预分配的缓冲区之外写数据。

  • 漏洞危害:用于更改程序执行流,控制函数返回值,执行任意代码。

    配置nginx缓冲区大小,防止缓冲区溢出

    [root@web1 ~]# vim /etc/nginx/nginx.conf

    ... ...

    17 http {

    18 client_body_buffer_size 1k;

    19 client_header_buffer_size 1k;

    20 client_max_body_size 1k;

    21 large_client_header_buffers 2 1k;

    ... ...

    [root@web1 ~]# systemctl restart nginx.service

Linux加固

  • 设置tom账号,有效期为2022-1-1

    查看tom的账号信息

    [root@web1 ~]# chage -l tom

    最近一次密码修改时间 :10月 12, 2021

    密码过期时间 :从不

    密码失效时间 :从不

    帐户过期时间 :从不

    两次改变密码之间相距的最小天数 :0

    两次改变密码之间相距的最大天数 :99999

    在密码过期之前警告的天数 :7

    [root@web1 ~]# chage -E 2022-1-1 tom

    [root@web1 ~]# chage -l tom

    最近一次密码修改时间 :10月 12, 2021

    密码过期时间 :从不

    密码失效时间 :从不

    帐户过期时间 :1月 01, 2022

    两次改变密码之间相距的最小天数 :0

    两次改变密码之间相距的最大天数 :99999

    在密码过期之前警告的天数 :7

    设置账号永不过期,注意-E后面是数字-1,不是字母l

    [root@web1 ~]# chage -E -1 tom

    [root@web1 ~]# chage -l tom

    最近一次密码修改时间 :10月 12, 2021

    密码过期时间 :从不

    密码失效时间 :从不

    帐户过期时间 :从不

    两次改变密码之间相距的最小天数 :0

    两次改变密码之间相距的最大天数 :99999

    在密码过期之前警告的天数 :7

    设置新建用户的密码策略

    [root@web1 ~]# vim /etc/login.defs

    39 PASS_MAX_DAYS 99999 # 密码永不过期,设置最长有效期

    40 PASS_MIN_DAYS 0 # 密码最短使用时间,0表示随时可改密码

    41 PASS_MIN_LEN 5 # 密码最短长度

    42 PASS_WARN_AGE 7 # 密码过期前7天发警告

    47 UID_MIN 1000 # 新建用户最小的UID

    48 UID_MAX 60000 # 新建用户最大的UID

  • 用户安全设置

    锁定tom账号

    [root@web1 ~]# passwd -l tom

    锁定用户 tom 的密码 。

    passwd: 操作成功

    [root@web1 ~]# passwd -S tom # 查看状态

    tom LK 2021-10-12 0 99999 7 -1 (密码已被锁定。)

    解锁tom账号

    [root@web1 ~]# passwd -u tom

    解锁用户 tom 的密码。

    passwd: 操作成功

    [root@web1 ~]# passwd -S tom

    tom PS 2021-10-12 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

  • 保护文件

    查看文件的特殊属性

    [root@web1 ~]# lsattr /etc/passwd

    ---------------- /etc/passwd # 没有特殊属性

    修改属性

    chattr +i 文件 # 不允许对文件做任何操作,只能看

    chattr -i 文件 # 去除i属性

    chattr +a 文件 # 文件只允许追加

    chattr -a 文件 # 去除a属性

    [root@web1 ~]# chattr +i /etc/passwd

    [root@web1 ~]# lsattr /etc/passwd

    ----i----------- /etc/passwd

    [root@web1 ~]# useradd zhangsan

    useradd:无法打开 /etc/passwd

    [root@web1 ~]# rm -f /etc/passwd

    rm: 无法删除"/etc/passwd": 不允许的操作

    [root@web1 ~]# chattr -i /etc/passwd

    [root@web1 ~]# rm -f /etc/passwd # 可以删除

    [root@web1 ~]# ls /etc/passwd

    ls: 无法访问/etc/passwd: 没有那个文件或目录

    恢复passwd文件

    [root@web1 ~]# cp /etc/passwd- /etc/passwd

    追加

    [root@web1 ~]# chattr +a /etc/hosts

    [root@web1 ~]# echo 'hello world' >> /etc/hosts

    [root@web1 ~]# rm -f /etc/hosts

    rm: 无法删除"/etc/hosts": 不允许的操作

相关推荐
杰哥在此9 分钟前
Python知识点:如何使用Multiprocessing进行并行任务管理
linux·开发语言·python·面试·编程
枫叶丹42 小时前
【在Linux世界中追寻伟大的One Piece】进程信号
linux·运维·服务器
网络研究院2 小时前
如何安全地大规模部署 GenAI 应用程序
网络·人工智能·安全·ai·部署·观点
刻词梨木2 小时前
ubuntu中挂载点内存不足,分配不合理后使用软链接的注意事项
linux·运维·ubuntu
灯火不休ᝰ3 小时前
[win7] win7系统的下载及在虚拟机中详细安装过程(附有下载文件)
linux·运维·服务器
DonciSacer6 小时前
TryHackMe 第6天 | Web Fundamentals (一)
安全
powerfulzyh7 小时前
Ubuntu24.04远程开机
linux·ubuntu·远程工作
ulimpid7 小时前
Command | Ubuntu 个别实用命令记录(新建用户、查看网速等)
linux·ubuntu·command
HHoao7 小时前
Ubuntu启动后第一次需要很久才能启动GTK应用问题
linux·运维·ubuntu
小灰兔的小白兔7 小时前
【Ubuntu】Ubuntu常用命令
linux·运维·ubuntu