kali系统

时间:2024-10-23 07:20:14

【●】kali系统
一、kali
简介
kali是基于Debian的linux发行版
Kali是基于Debian的Linux发行版,Kali Linux包含上百个安全相关工具
如:渗透测试、安全检测、密码安全、反向工程等,
官网:。

2.扫描方式及工具
●扫描的作用(以获取一些公开/非公开信息为目的)
—检测潜在的风险
—查找可攻击目标
—手机设备/主机/系统/软件信息
—发现可利用的安全漏洞
●典型的扫描方式
— Scan,主动探测
— Sniff,被动监听/嗅探
— Capture,数据包捕获(抓包)

●常见的安全分析工具
—扫描器:NMAP
—协议分析:tcpdump、WireShark

二、NMAP扫描
简介
●一款强大的网络探测利器工具
●最著名的网络渗透工具之一
●支持多种探测技术
—ping  扫描
—多端口扫描
—TCP/IP指纹校验


案例一 、扫描与抓包分析
● 实验环境:
kali虚拟机用户名为kali,密码为kali。
#kali reset                    #初始化虚拟机
#virt-manager                  #打开kvm虚拟机管理器
修改网卡配置,《网络源》选择《private1:隔离网络》。

● 给kali虚拟机配置IP地址:
$ ip  a  s                      #查看网卡设备名称(设备名)
$ nmcli  connection  show     #查看网络连接名称(网卡名)
#注意:仔细区分网卡名和设备名称,两个名称有可能不一致(正常情况),配置IP时注意!!!
$ sudo nmcli connection modify "Wired connection 1" \
manual \
192.168.4.40/24 \
autoconnect yes
#配置IP地址,autoconnect设置网卡开机自动激活
#\代表换行符
$ sudo nmcli connection up "Wired connection 1" 

步骤一:使用NMAP扫描来获取指定主机/网段的相关信息
1)基本用法
基本用法:
# nmap  [扫描类型]  [选项]  <扫描目标 ...>
#常用的扫描类型
# -sS,TCP SYN扫描(半开)
# -sT,TCP 连接扫描(全开)
# -sU,UDP扫描
# -sP,ICMP扫描
# -A,目标系统全面分析

2)检查192.168.4.5主机是否可以ping通(这里假设有192.168.4.5主机)
[kali@kali ~]$ sudo nmap  -sP  192.168.4.5  # 如果出现乱码请把sudo去掉
● 使用-n选项可以不执行DNS解析
[kali@kali ~]$ sudo nmap -n -sP  192.168.4.5
Starting Nmap 6.40 ( ) at 2028-06-06 22:00 CST
Nmap scan report for 192.168.4.5
Host is up (0.00046s latency).
MAC Address: 52:54:00:71:07:76 (QEMU Virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds

3)检查192.168.4.0/24网段内哪些主机可以ping通
[kali@kali ~]$ sudo nmap  -n  -sP  192.168.4.0/24

4)检查目标主机所开启的TCP服务
[kali@kali ~]$ sudo nmap -sT 192.168.4.10

5)检查192.168.4.0/24网段内哪些主机开启了FTP、SSH服务
[kali@kali ~]$ sudo nmap -p 21-22 192.168.4.0/24

6)检查目标主机所开启的UDP服务
[kali@kali ~]$ sudo nmap   -sU  192.168.4.5                #指定-sU扫描UDP
53/udp   open          domain
111/udp  open          rpcbind

7)全面分析目标主机192.168.4.100和192.168.4.5的操作系统信息
[kali@kali ~]$ sudo nmap -A 192.168.4.100,5
Starting Nmap 5.51 ( ) at 2017-05-17 18:03 CST
Nmap scan report for 192.168.4.100                      #主机mail的扫描报告

步骤二:使用nmap执行脚本扫描
1)准备一台Vsftpd服务器(192.168.4.5主机操作)
[root@proxy ~]# yum -y install vsftpd
[root@proxy ~]# systemctl restart vsftpd
[root@proxy ~]# useradd  tom
[root@proxy ~]# echo 123 | passwd --stdin tom

2)FTP相关扫描脚本(在kali主机操作)
相关脚本存放目录:/usr/share/nmap/scripts/。
[kali@kali ~]$ sudo nmap  --script=  192.168.4.5  -p 21
#匿名访问扫描
[kali@kali ~]$ sudo nmap  --script=  192.168.4.5  -p  21
#扫描ftp软件相关信息(如版本号,是否有带宽限制,超时时间等)
[kali@kali ~]$ sudo nmap  --script=ftp-vsftpd-backdoor.nse 192.168.4.5  -p 21
#后门扫描
[kali@kali ~]$ sudo nmap  --script=  192.168.4.5  -p 21
#暴力破解密码

3)SSH相关扫描(在kali主机操作)
[kali@kali ~]$ sudo nmap  --script= 192.168.4.5 -p 22
#暴力破解ssh密码
[kali@kali ~]$ sudo vi /tmp/                  #新建文件,存储账户信息
root
tom
[kali@kali ~]$ sudo vi /tmp/                   #新建文件,存储密码信息
123456
654321
[kali@kali ~]$ sudo nmap  --script= \
--script-args userdb=/tmp/,passdb=/tmp/  192.168.4.5 -p 22
#使用自己创建的账户和密码本暴力破解ssh密码

在192.168.4.5主机可以查看日志
[root@proxy ~]# tail  /var/log/secure                   #查看日志

4)HTTP相关扫描(kali主机操作)
这里假设192.168.4.5有http服务。
[kali@kali ~]$ sudo nmap  --script=  192.168.4.5  -p 80
#请求方法扫描(如get,post,header等)
[kali@kali ~]$ sudo nmap  --script= 192.168.4.5  -p  80
#SQL注入扫描

5)SMB相关扫描(kali主机操作)
这里假设有一台windows主机192.168.137.4。
[kali@kali ~]$ sudo nmap --script= 192.168.137.4
[kali@kali ~]$ sudo nmap --script=  \
--script-args=userdb=/密码本,passdb=/密码本  192.168.137.4 

6)暴力破解密码(kali主机操作)
$ sudo   john  --single  /etc/shadow              #破解傻瓜式密码
$ sudo   john   /etc/shadow                       #字典暴力破解(随时ctrl+c终止)
$ sudo   john  --wordlist=密码本   /etc/shadow   #使用自定义密码本破解
$ sudo   john  --show  /etc/shadow                #显示破解的密码

步骤三:使用tcpdump分析FTP访问中的明文交换信息
1)启用tcpdump命令行抓包(kali虚拟机操作)
执行tcpdump命令行,添加适当的过滤条件,只抓取访问主机192.168.4.5的21端口的数据通信 ,并转换为ASCII码格式的易读文本。
需要192.168.4.5主机有vsftpd服务,如果没有需要提前安装并启动服务。
● 案例中所有抓包命令都没有指定网卡,每位同学需要根据实际情况指定抓包网卡的名称。

[kali@kali ~]$ sudo tcpdump -i 网卡名称 -A host 192.168.4.5 and tcp port 21
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
.. ..                                            #进入等待捕获数据包的状态
● 监控选项如下:
# -i,指定监控的网络接口(默认监听第一个网卡)
# -A,转换为 ACSII 码,以方便阅读
# -w,将数据包信息保存到指定文件
# -r,从指定文件读取数据包信息
#tcpdump的过滤条件:
# 类型:host(主机)、net(网段)、port(端口)、portrange(端口范围)
# 方向:src(源地址)、dst(目标地址)
# 协议:tcp、udp、ip、wlan、arp、……
# 多个条件组合:and、or、not

3)执行FTP访问,并观察tcpdump抓包结果
从kali主机访问主机192.168.4.5的vsftpd服务。
[kali@kali ~]$ ftp 192.168.4.5
Connected to 192.168.4.5 (192.168.4.5).
220 (vsFTPd 3.0.2)
Name (192.168.4.5:root): tom       #输入用户名
331 Please specify the password.
Password:                              #输入密码
530 Login incorrect.
Login failed.
ftp>quit                               #退出

● 观察抓包的结果(在kali主机观察tcpdump抓包的结果):
[kali@kali ~]$
... …
18:47:27.960530 IP 192.168.2. > 192.168.4.: Flags [P.], seq 1:14, ack 21, win 65515, length 13
E..5..@.@......x...d.*..G.\c.1BvP.......USER tom
18:47:29.657364 IP 192.168.2. > 192.168.4.: Flags [P.], seq 14:27, ack 55, win 65481, length 13
E..5..@.@......x...d.*..G.\p........PASS 123

4)再次使用tcpdump抓包,使用-w选项可以将抓取的数据包另存为文件,方便后期慢慢分析。
[kali@kali ~]$ sudo tcpdump  -i 网卡名称  -A  -w    \
host 192.168.4.5  and  tcp  port  21                            #抓包并保存

tcpdump命令的-r选项,可以去读之前抓取的历史数据文件
[kali@kali ~]$ sudo tcpdump  -A  -r   | egrep  '(USER|PASS)'    #分析数据包
-----------------------------------------------------------------
案例二、加固常见服务的安全
步骤一:优化Nginx服务的安全配置
1) 修改版本信息,并隐藏具体的版本号
默认Nginx会显示版本信息以及具体的版本号,这些信息给攻击者带来了便利性,便于他们找到具体版本的漏洞。
如果需要屏蔽版本号信息,执行如下操作,可以隐藏版本号。
[root@proxy ~]# vim /usr/local/nginx/conf/
… …
http{
     server_tokens off;                            #在http下面手动添加这么一行
     … …
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
[root@proxy ~]# curl -I http://192.168.4.5          #查看服务器响应的头部信息

2) 限制并发量
DDOS攻击者会发送大量的并发连接,占用服务器资源(包括连接数、带宽等),这样会导致正常用户处于等待或无法访问服务器的状态。
Nginx提供了一个ngx_http_limit_req_module模块,可以有效降低DDOS攻击的风险,操作方法如下:
[root@proxy ~]# vim /usr/local/nginx/conf/
… …
http{
… …
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    server {
        listen 80;
        server_name localhost;
        limit_req zone=one burst=5;
            }
}
● 备注说明:
#limit_req_zone语法格式如下:
#limit_req_zone key zone=name:size rate=rate;
#上面案例中是将客户端IP信息存储名称为one的共享内存,内存空间为10M
#1M可以存储8千个IP信息,10M可以存储8万个主机连接的状态,容量可以根据需要任意调整
#每秒中仅接受1个请求,多余的放入漏斗
#漏斗超过5个则报错
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

客户端使用ab测试软件测试效果:
[root@client ~]# ab -c 100 -n 100  http://192.168.4.5/

3) 拒绝非法的请求
网站使用的是HTTP协议,该协议中定义了很多方法,可以让用户连接服务器,获得需要的资源。但实际应用中一般仅需要get和post。
具体HTTP请求方法的含义:
   请求方法                                  功能描述
     GET                         请求指定的页面信息,并返回实体主体   
    HEAD                      类似于get请求,只不过返回的响应中没有具体内容,用于获取报头
    POST                     向指定资源提交数据进行处理请求(例如提交表单或者上传文件)
   DELETE                      请求服务器删除指定的页面
     PUT                          向服务器特定位置上传资料

● 未修改服务器配置前,客户端使用不同请求方法测试:
[root@client ~]# curl -i -X GET  http://192.168.4.5            #正常
[root@client ~]# curl -i -X HEAD http://192.168.4.5            #正常
#curl命令选项说明:
#-i选项:访问服务器页面时,显示HTTP的头部信息
#-X选项:指定请求服务器的方法

 ● 通过如下设置可以让Nginx拒绝非法的请求方法:
[root@proxy ~]# vim /usr/local/nginx/conf/
http{
       server {
                 listen 80;
#这里,!符号表示对正则取反,~符号是正则匹配符号
#如果用户使用非GET或POST方法访问网站,则retrun返回错误信息
              if ($request_method !~ ^(GET|POST)$ ) {
                     return 444;
               }    
        }
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

●修改服务器配置后,客户端使用不同请求方法测试:
[root@client ~]# curl -i -X GET  http://192.168.4.5            #正常
[root@client ~]# curl -i -X HEAD http://192.168.4.5            #报错

4) 防止buffer溢出
当客户端连接服务器时,服务器会启用各种缓存,用来存放连接的状态信息。
如果攻击者发送大量的连接请求,而服务器不对缓存做限制的话,内存数据就有可能溢出(空间不足)。
修改Nginx配置文件,调整各种buffer参数,可以有效降低溢出风险。
[root@proxy ~]# vim /usr/local/nginx/conf/
http{
client_body_buffer_size  1k;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
 … …
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
-----------------------------------------------------------
案例三、Linux基本防护措施
步骤一:修改用户zhangsan的账户属性,设置为2019-12-31日失效(禁止登录)
1)正常情况下,未过期的账号可以正常登录,使用chage可以修改账户有效期。
chage命令的语法格式:
chage -l    账户名称                #查看账户信息
chage -E 时间 账户名称                #修改账户有效期

2)失效的用户将无法登录
使用chage命令将用户zhangsan的账户设为当前已失效(比如已经过去的某个时间):
[root@proxy ~]# useradd zhangsan        #创建账户
[root@proxy ~]# passwd zhangsan        #设置密码
[root@proxy ~]# chage -E 2017-12-31 zhangsan    #设置账户过期时间
● 尝试以用户zhangsan重新登录,输入正确的用户名、密码后直接闪退,返回登录页,说明此帐号已失效。

3)重设用户zhangsan的属性,将失效时间设为2019-12-31
[root@proxy ~]# chage -E 2019-12-31 zhangsan              #修改失效日期
[root@proxy ~]# chage -l zhangsan                        #查看账户年龄信息
Last password change                     : May 15, 2017
Password expires                       : never
Password inactive                       : never
Account expires                          : Dec 31, 2019
Minimum number of days between password change          : 0
Maximum number of days between password change           : 99999
Number of days of warning before password expires         : 7

4)重设用户zhangsan的属性,将失效时间设为永不过期
[root@proxy ~]# chage -E -1 zhangsan               #设置账户永不过期

5)定义默认有效期(扩展知识)
/etc/这个配置文件,决定了账户密码的默认有效期。
[root@proxy ~]# cat /etc/
PASS_MAX_DAYS    99999                        #密码最长有效期
PASS_MIN_DAYS    0                            #密码最短有效期
PASS_MIN_LEN    5                            #密码最短长度
PASS_WARN_AGE    7                            #密码过期前几天提示警告信息
UID_MIN                  1000                #UID最小值
UID_MAX                  60000                #UID最大值

步骤二:临时锁定用户zhangsan的账户,使其无法登录,验证效果后解除锁定
1)锁定用户账号
使用passwd或usermod命令将用户zhangsan的账户锁定。
[root@proxy ~]# passwd -l zhangsan           #锁定用户账号(lock)
锁定用户 zhangsan 的密码。
passwd: 操作成功
[root@proxy ~]# passwd -S zhangsan          #查看状态(status)
zhangsan LK 2018-02-22 0 99999 7 -1 (密码已被锁定。)

2)验证用户zhangsan已无法登录,说明锁定生效
输入正确的用户名、密码,始终提示“Login incorrect”,无法登录。

3)解除对用户zhangsan的锁定
[root@proxy ~]# passwd -u zhangsan           #解锁用户账号(unlock)
解锁用户 zhangsan 的密码 。
passwd: 操作成功
[root@proxy ~]# passwd -S zhangsan          #查看状态
zhangsan PS 2018-08-14 0 99999 7 -1 (密码已设置,使用 SHA512 加密。)

步骤三:修改tty登录的提示信息,隐藏系统版本
1)账户在登录Linux系统时,默认会显示登陆信息(包括操作系统内核信息)
/etc/issue这个配置文件里保存的就是这些登陆信息,修改该文件防止内核信息泄露。
[root@proxy ~]# cat /etc/issue                      #确认原始文件
Red Hat Enterprise Linux Server release 7.5
Kernel \r on an \m
[root@proxy ~]# cp /etc/issue /etc/      #备份文件
[root@proxy ~]# vim /etc/issue                      #修改文件内容
Windows Server 2012 Enterprise R2
NT 6.2 Hybrid
2)测试版本伪装效果
退出已登录的tty终端,或者重启Linux系统,刷新后的终端提示信息会变成自定义的文本内容

步骤四:锁定文件/etc/、/etc/hosts
1)语法格式:
# chattr +i  文件名            #锁定文件(无法修改、删除、追加等)
# chattr -i  文件名            #解锁文件
# chattr +a  文件名            #锁定后文件仅可追加
# chattr -a  文件名            #解锁文件
# lsattr 文件名                #查看文件特殊属性

2) 使用+i锁定文件,使用lsattr查看属性
[root@proxy ~]# chattr +i /etc/ 
[root@proxy ~]# lsattr /etc/ 
----i---------- /etc/

3)使用+a锁定文件(仅可追加),使用lsattr查看属性
[root@proxy ~]# chattr +a /etc/hosts
[root@proxy ~]# lsattr /etc/hosts
-----a---------- /etc/hosts

4)测试文件锁定效果
[root@proxy ~]# rm -rf /etc/
rm: 无法删除"/etc/": 不允许的操作
[root@proxy ~]# echo xyz > /etc/
-bash: : 权限不够
[root@proxy ~]# rm -rf  /etc/hosts                         #失败
[root@proxy ~]# echo "192.168.4.1  xyz" > /etc/hosts     #失败
[root@proxy ~]# echo "192.168.4.1  xyz" >> /etc/hosts    #成功

5)恢复这两个文件原有的属性(避免对后续实验造成影响)
[root@proxy ~]# chattr -i /etc/ 
[root@proxy ~]# chattr -i /etc/hosts
[root@proxy ~]# lsattr /etc/ /etc/hosts
--------------- /etc/
--------------- /etc/hosts