多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

从Drupal漏洞到Root权限:DC1靶场渗透测试全流程实战解析

从Drupal漏洞到Root权限:DC1靶场渗透测试全流程实战解析 1. 项目概述一次从Web到Root的完整渗透旅程最近在带新人入门渗透测试发现很多朋友对“实战”的理解还停留在使用工具扫出几个漏洞的层面总觉得拿到一个Webshell或者执行了命令就是终点。其实真正的渗透实战是一个完整的链条从信息收集到最终获取目标系统的最高权限每一步都环环相扣充满了变数和挑战。今天我就以经典的DC1靶场为例带大家完整复盘一次从Drupal 7 CMS漏洞利用到内网信息搜集再到利用SUID权限提升拿下root权限的全过程。这个靶场非常经典它模拟了一个老旧但现实中仍可能存在的Drupal站点环境完美诠释了“漏洞利用只是开始”这句话。DC1靶场本质上是一个故意设置了多个安全缺陷的虚拟机它的核心目标就是让你从外部攻击者的视角一步步地攻克它最终在/root目录下找到那个标志着胜利的the-flag.txt文件。整个过程涉及Web漏洞利用、操作系统命令执行、服务枚举、密码破解和Linux权限提升等多个核心技能点非常适合新手用来建立对渗透测试流程的系统性认知。无论你是刚接触安全的新手还是想巩固基础的老手跟着这篇复盘走一遍你收获的将不仅仅是一个靶场的通关方法更是一套应对真实场景的思考逻辑和操作习惯。2. 靶场环境搭建与初始信息收集2.1 靶机与攻击机环境准备在开始任何实战之前一个稳定、隔离的实验室环境是首要前提。我强烈建议使用VirtualBox或VMware这类虚拟机软件来搭建你的“战场”。攻击机我选择的是Kali Linux因为它预装了渗透测试所需的大部分工具。靶机DC1的OVA镜像文件很容易从VulnHub等平台下载到。导入虚拟机后最关键的一步是将两台虚拟机的网络模式都设置为“NAT网络”或同一个“仅主机网络”。这样能确保它们处于同一个逻辑网段内可以相互通信同时又与你的物理主机网络隔离避免不必要的风险。启动两台虚拟机后我们首先需要知道靶机的IP地址。由于靶机不会主动告诉我们这里就需要用到网络扫描。在Kali上打开终端我最先使用的命令是sudo netdiscover -r 192.168.x.0/24请将x替换为你虚拟网络的实际网段通常是1或56等。这个工具能进行ARP扫描快速发现同一局域网内存活的主机。很快我就发现了一个新的IP地址假设是192.168.56.105。为了进一步确认我使用nmap进行快速扫描nmap -sS -O 192.168.56.105。-sS代表TCP SYN扫描这是一种半开放扫描速度较快且相对隐蔽-O参数尝试识别操作系统。扫描结果给了我清晰的画像目标开放了22SSH、80HTTP、111RPCbind等端口。其中80端口的HTTP服务是我们首要的突破口因为Web应用往往是攻击面最广的一环。2.2 针对Web服务的深度信息收集确认了Web服务的存在下一步就是深入了解它。我打开浏览器直接访问http://192.168.56.105。页面加载出来一眼就看到了“Welcome to Drupal”的标识以及其特有的界面风格。这立刻将目标范围缩小到了Drupal CMS。经验之谈对于CMS版本信息是漏洞利用的黄金钥匙。我立刻尝试访问了几个Drupal常见的版本信息文件/CHANGELOG.txt这是最直接的方式Drupal通常会在这里记录版本更新日志。访问后页面明确显示这是Drupal 7。这是一个极其重要的信息。/README.txt、/INSTALL.txt这些文件有时也能佐证版本或提供其他配置信息。查看页面源代码留意HTML注释、引用的JS/CSS文件路径有时会包含版本号。除了版本我还使用dirb或gobuster这类目录爆破工具对网站进行了一次初步的目录扫描gobuster dir -u http://192.168.56.105 -w /usr/share/wordlists/dirb/common.txt。这能帮助我们发现后台登录入口如/user、配置文件如/sites/default/settings.php、上传目录等潜在敏感路径。果不其然我发现了/user这个路径访问后正是Drupal的用户登录页面。至此信息收集阶段告一段落我们掌握了目标一个运行着Drupal 7的网站并且找到了后台入口。3. Drupal 7漏洞研究与利用实战3.1 漏洞定位与利用工具选择知道是Drupal 7后我大脑里的“漏洞库”立刻开始检索。Drupal 7历史上有一个非常著名且危害巨大的漏洞Drupalgeddon特指CVE-2014-3704Drupal 7.0~7.31版本。但根据CHANGELOG的信息需要更精确地判断版本。另一个在渗透测试中更常用、更通用的漏洞是Drupal 7.x Module Services RESTful Web Services 远程代码执行漏洞它通常与CVE-2018-7600相关联也被称为Drupalgeddon 2。这个漏洞允许攻击者在未认证的情况下通过精心构造的请求在服务器上执行任意代码。为了高效利用我选择了searchsploit和Metasploit这两个工具。首先在终端输入searchsploit drupal 7可以快速搜索Exploit-DB中公开的利用脚本。我看到了好几个关于Services模块RCE的脚本。不过对于实战演练特别是新手我推荐使用Metasploit因为它集成度高交互性好方便理解漏洞利用的完整过程。3.2 使用Metasploit进行漏洞利用启动Metasploit控制台msfconsole。等待初始化完成后我们搜索相关模块search drupal 7在列出的模块中我们关注一个名为exploit/unix/webapp/drupal_drupalgeddon2的模块它正是针对CVE-2018-7600的。使用它use exploit/unix/webapp/drupal_drupalgeddon2。接下来是配置模块参数这是关键步骤set RHOSTS 192.168.56.105 # 设置目标IP set RPORT 80 # 目标端口默认80 set TARGETURI / # Drupal的安装路径如果装在子目录则需修改这里在根目录设置完成后可以输入show options再次确认。一切就绪输入run或exploit执行攻击。实操心得执行后Metasploit会发送精心构造的恶意请求。如果靶机存在该漏洞我们会看到回显[*] Sending stage...等信息最终得到一个meterpreter会话。meterpreter是Metasploit的高级、功能强大的载荷Payload它提供了一个交互式的命令行让我们可以在目标系统上执行命令。看到那个熟悉的meterpreter 提示符出现意味着我们成功在Web服务器进程的权限下通常是www-data用户执行了代码拿到了一个初始立足点Initial Foothold。4. 立足点强化与系统内部信息枚举4.1 从Meterpreter到稳定Shell虽然meterpreter功能强大但它的会话可能因为网络波动或进程异常而中断。为了获得一个更稳定、更常用的Linux Shell我们需要进行“提权”或“迁移”。这里说的提权不是权限提升而是从meterpreter切换到标准的bash或sh环境。在meterpreter会话中输入shell命令。如果成功你会看到目标系统的命令行提示符可能是$代表当前是普通用户权限如www-data。为了获得一个交互性更好的TTY Shell支持命令历史、Tab补全等我们通常需要升级一下。在获得的简单shell中可以尝试执行python -c import pty; pty.spawn(/bin/bash)或者/bin/bash -i如果Python可用第一种方法通常能提供一个功能完整的伪终端。4.2 系统内部信息搜集拿到Shell后我们就像进入了城堡的内部但眼前一片漆黑。现在需要点亮火把摸清环境。这是一套标准化的信息搜集流程当前用户和权限idwhoami。确认我们是www-data用户属于www-data组。系统信息uname -a内核版本cat /etc/issue或cat /etc/*release*发行版信息。网络信息ifconfig或ip addr查看IP网卡信息netstat -antp或ss -tulnp查看网络连接和监听端口这能帮助我们发现目标主机上运行的其他内部服务。进程信息ps aux或ps -ef 查看所有运行进程寻找以root身份运行的可疑或可利用的服务。计划任务crontab -l查看当前用户的计划任务 同时检查/etc/crontab和/etc/cron.*/目录寻找是否有可以写入的定时任务脚本。敏感文件与目录find / -type f -name *.txt -o -name *.conf -o -name *.php 2/dev/null | head -30快速查找一些文本配置文件。ls -la /home/查看有哪些用户家目录。ls -la /var/www/查看Web目录也许能找到网站源码、配置文件。特别注意find / -type f -name “flag*.txt” -o -name “*.flag” 2/dev/null 这是靶场的常见套路。在DC1中执行find / -type f -name “flag*.txt” 2/dev/null 我们很快发现了第一个标志文件/var/www/flag1.txt。查看其内容cat /var/www/flag1.txt。它通常不会直接给出密码而是给出一个提示比如“每一个好的CMS都需要一个配置文件——你找到了吗”这指引我们去找Drupal的配置文件。4.3 数据库凭证获取与横向移动遵循flag1的提示我们定位Drupal的配置文件。Drupal 7的标准配置文件位于/var/www/sites/default/settings.php。使用cat命令查看这个文件cat /var/www/sites/default/settings.php。在文件中我们会找到类似以下的数据库连接配置段$databases array ( default array ( default array ( database drupaldb, username dbuser, password R0ck3t, host localhost, port , driver mysql, prefix , ), ), );这里我们成功提取到了数据库用户名dbuser和密码R0ck3t。这就是从Web漏洞利用纵向转向数据库渗透横向的关键跳板。我们可以使用这个密码尝试切换到其他系统用户。首先查看/etc/passwd文件中有哪些用户cat /etc/passwd | grep -v “nologin” | grep -v “false” 筛选出可以登录的用户。常见的可能有rootmysql 以及一个普通用户如flag4或john等。我们尝试使用得到的密码进行切换su - flag4输入密码R0ck3t。如果成功我们就完成了第一次横向移动从一个低权限的www-data用户切换到了一个可能拥有更多权限的普通用户flag4。在这个用户的家目录/home/flag4下我们很可能找到flag2.txt和flag3.txt它们会给出下一步的提示例如提示我们检查邮件或寻找SUID文件。5. 权限提升SUID机制深度利用5.1 SUID/SGID权限原理与发现在Linux中权限提升Privilege Escalation是渗透测试的核心目标之一。SUIDSet User ID是其中一种经典的机制。当一个可执行文件被设置了SUID位任何用户在执行这个文件时都会以文件所有者的权限来运行而不是执行者的权限。如果这个文件的所有者是root并且程序本身存在逻辑缺陷就可能被用来提升权限。在拿到flag4用户的Shell后我们开始系统性地寻找SUID文件。命令如下find / -type f -perm -4000 2/dev/null或者更详细一些find / -type f -perm -us 2/dev/null这个命令会在整个文件系统/中搜索权限位中包含4000即SUID的常规文件-type f并将所有错误信息2/dev/null重定向到空设备使输出更清晰。排查技巧我们会看到一堆系统默认的SUID文件如/bin/ping/bin/su/usr/bin/passwd等。这些是正常的。我们需要关注那些不常见的、或者第三方应用程序设置的SUID文件。在DC1的扫描结果中一个非常扎眼的文件出现了/usr/bin/find。是的就是我们刚才用来搜索文件的find命令本身通常find命令不应该被设置为SUID这是一个非常危险的配置。5.2 利用SUIDfind命令获取Root Shellfind命令功能强大其中一个参数-exec允许我们在找到文件后执行任意命令。当find以SUID root权限运行时通过-exec执行的命令也将以root权限运行。利用方式简单直接在flag4用户的终端中执行/usr/bin/find . -exec /bin/sh -p \; -quit或者更常见的写法find / -exec /bin/sh -p \; 2/dev/null命令解释find /从根目录开始查找。-exec /bin/sh -p \;对找到的每一个文件这里我们利用它遍历文件的特性执行/bin/sh -p。-p参数在有些系统上用于保留特权模式对于SUID场景很重要。2/dev/null忽略所有错误信息让界面干净。执行后你会发现命令行提示符从$变成了#。立即执行id或whoami命令验证会显示uid0(root)。恭喜你已经成功提权至root深度解析“为什么”为什么这样就能提权因为/usr/bin/find的所有者是root并且设置了SUID位。当我们flag4用户执行它时进程的实际有效用户IDEUID就变成了root。随后find进程通过-exec参数启动了一个新的/bin/sh进程。在Unix系统中子进程默认继承父进程的EUID因此这个新的shell进程也以root权限运行从而为我们提供了root shell。5.3 寻找最终Flag与痕迹清理获得root权限后整个系统对你而言再无秘密。你可以直接前往root用户的家目录寻找最终的flagcd /root ls -la cat the-flag.txt或者使用find命令全局搜索find / -name “the-flag.txt” 2/dev/null。注意事项与实操心得SUID利用的多样性除了find历史上常见的可利用SUID程序还有nmap旧版本的交互模式、vim、bash特定版本、more/less等。命令find / -perm -us -type f 2/dev/null | xargs ls -la可以详细列出所有SUID文件及其属性方便研究。GTFOBins这是一个极其宝贵的资源网站gtfobins.github.io。当你发现一个非常见二进制文件具有SUID位时可以在这个网站上搜索它的名字它很可能提供了利用该程序进行权限提升的具体命令。例如搜索“find”就能看到我们刚才使用的命令。靶场与实战的区别在像DC1这样的靶场中SUID漏洞往往被故意、明显地设置。但在真实环境中系统管理员很少会犯find命令设SUID这种低级错误。更常见的是通过内核漏洞如Dirty Cow、滥用sudo权限、利用配置错误的cron任务、或攻击以root身份运行的有漏洞的服务来进行提权。因此信息搜集阶段对进程、服务、sudo规则sudo -l、内核版本的检查至关重要。清理痕迹仅限授权测试在获得授权进行渗透测试后出于职业道德可能需要清理日志痕迹。重点检查/var/log/下的auth.logsecureapache2/access.logerror.log等。可以使用shred或dd命令覆盖日志文件或直接删除相关条目。切记在未经授权的测试中任何攻击行为都是非法的。6. 渗透流程总结与防御思考复盘整个DC1的渗透流程我们走完了一个标准的内网渗透测试生命周期信息收集 - 漏洞利用获取初始访问- 后渗透立足点强化、内部枚举- 横向移动 - 权限提升 - 达成目标获取flag。从防御视角看这次实战暴露了多个层面的安全问题应用层Drupal未及时更新补丁使用了存在已知高危漏洞的旧版本。防御措施是建立严格的软件资产清单和补丁管理流程及时关注CVE信息并更新。系统层Linux服务最小化不必要的服务如老的RPCbind应关闭。权限最小化绝对禁止为像find这样的系统工具设置SUID位。定期使用类似find / -perm -4000的命令进行自查移除非必需的SUID/SGID设置。密码安全数据库密码R0ck3t强度不足且可能在多个地方复用。应使用强密码策略并考虑使用凭据管理工具。日志与监控缺乏有效的入侵检测系统IDS或安全信息与事件管理SIEM来监控异常的Web请求如漏洞利用攻击和特权命令如find -exec /bin/sh的执行。对于新手而言DC1靶场像一幅清晰的路线图它告诉你每一步该做什么、为什么这么做。但真正的实战远比这复杂和模糊没有现成的flag提示你下一步。因此在熟练通关此类基础靶场后下一步应该是挑战更接近真实环境的靶场如HTB TryHackMe上的某些机器锻炼在信息不全的情况下进行“无定向”测试的能力并将这种“攻击者思维”转化为构建更安全系统的“防御者思维”。渗透测试的终极目的永远是发现问题加固系统让网络空间更安全。
返回列表