靶场链接:
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