靶场链接:
https://www.vulnhub.com/entry/dc-7,356/
DC系列,有些知识点在DC:1中提到,可以翻阅
首先进行存活扫描

185为攻击目标,61为网关,141为物理机,115为攻击机
端口及服务详情扫描,发现有80和22端口

先查看一下80端口的网页,指纹非常明显,在DC1也是类似的界面,指纹是Drupal cms

作者给了一段话
翻译:
DC-7引入了一些“新”概念,但我将留给你们去弄清楚它们是什么
虽然这个挑战并不完全是技术性的,但如果你需要诉诸暴力或字典攻击,你可能不会成功。
你要做的是跳出框框思考。
“在”盒子外。:-)
在不知道DC1的信息的前提下,可以用以下方法确定版本和指纹。
查看源代码meta标签中显示是Drupal 8

直接使用工具也可以(在谷歌商店查询该工具即可)

按照通常思路来说,此时就应该利用查到的指纹先查看是否有现成的poc和exp。查询后是有的,在8版本以上的就是geddon2和REST Module RCE。

首先尝试之前在DC1中就使用过的geddon2 poc 。因为msf中直接有该poc(详情见DC1),我们就再次利用一下试试。并不能成功,可能是做了修补或者版本高于利用版本

接下来继续尝试一下适用于更高版本的poc
尝试 drupal8 rest rce 编号为:cve-2019-6340 drupal8 rest rce
详情可见以下链接
手动测试poc


这里服务器响应为text 没有json模块 行不通
直接使用现成的poc似乎有些困难,难道我们只能去找更多的poc了么?是否还能从其他角度来撕开口子?
这也是作者提到的“跳出盒子思考”
仔细观察页面可以发现,和之前DC1不同的地方在于下面有了一个用户名。在国外带@一般都是指用户名,在twitter,ins等都是如此,可能需要一点经验,判断出这里是一个用户名。

将这个用户名放在谷歌上查一下,果然查到了twitter,github等平台信息。
在twitter上写着“this is a twitter account for DC-7 challenge”,看来找对地方了

查看一下twitter并没有什么东西,继续看看github

打开后,是网站源代码,包括数据库连接等等脚本。简单代码审计一下,查看登录口,上传点等等,有没有明显的漏洞

这里简单说一下这里的登陆点问题,只能说加了单引号,免去了这个点的漏洞。并不是使用mysqli_real_escape_string()就是绝对安全的。
如果是以下情况仍然可以攻击。

最后在配置文件中找到一些敏感数据。

尝试登录吧,ssh和后台都试一试。
ssh直接就进了

查看当前有些什么,一个backups,打开就是备份文件,一个mbox,是信件,打开后可以发现是root发来的

查看信件内容

后面还有很多相似的,从Subject那一行可以看出:
简单来看,这里写了一个计划任务并执行,执行脚本在 /opt/scripts/backups.sh(注意是root权限执行的)
阅读一下那个脚本

看起来就是删除之前的备份,重新打包备份后再对备份文件使用gpg工具加密。
这里对sql导出时,使用了一个drush命令,经查询得知,这是drupal的专用命令行工具

查看一下文档

继续查看,这里可以看到对用户的操作有以下这些

显然,user-password这个命令非常令人兴奋,它可以重设指定名字的密码,但是直接执行提示需要一个more functional drupal environment

运行的环境不对,结合前面邮件内容,我们也在相同的目录下进行运行,成功了,帮助选项如下

但是用户名应该是什么呢,这里就进行一个弱口令碰撞,发现是admin

更改一个密码后,就可以登录了,登录成功。
接下来,就是后台RCE了,后台RCE一般就是文件上传点,模板文件。查看了一下,没咋看到模板,网页编辑器也比较严格

这里是网友们的思路,在drupal插件库中,有允许代码执行的插件,链接如下:
https://www.drupal.org/project/php # 插件下载地址
https://ftp.drupal.org/files/projects/php-8.x-1.0.tar.gz #模块包

下载后要安装,记得点一下这里

安装并开启即可

接下来,就可以在Text format选项中选择php选项,先随便写一个代码执行测试

测试成功

上马

连接木马

成功,获得www权限

反弹出来后想办法继续提权,查看之前以root权限执行的脚本,可以看到,www是具有可写权限的

写上反弹shell,注意在这里并不是执行该脚本,虽然当前www用户具有执行权限,但是以www用户身份执行仅反弹www权限用户身份。前面已经提到这个文件已经写了计划任务,也就是计划任务执行时才是root权限,所以等待一段时间就可以了

反弹成功,获得flag
