ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DC-1靶场实战:从Drupal漏洞到Linux提权的完整渗透测试解析

DC-1靶场实战:从Drupal漏洞到Linux提权的完整渗透测试解析 1. 项目概述与核心价值DC-1靶场是渗透测试学习圈子里一个非常经典的入门级靶机它模拟了一个存在多个漏洞的Web服务器环境目标是从外部网络获取其最高权限root shell。这个靶场之所以经久不衰是因为它完整地串联了渗透测试中几个最核心的环节信息收集、漏洞利用、权限提升和横向移动。对于刚接触网络安全实战的新手来说DC-1提供了一个绝佳的沙盒环境让你能在一个安全、合法的环境中亲手体验一次“白帽黑客”的完整攻击链。我最初接触DC-1时它帮我理清了很多模糊的概念。比如信息收集不是漫无目的地扫描而是有策略地寻找攻击面漏洞利用也不仅仅是运行一个脚本更需要理解其原理和上下文提权更是考验对操作系统和配置的深入理解。通过复现DC-1的渗透过程你不仅能学会使用Nmap、Searchsploit、Hydra这些工具更能建立起“攻击者思维”理解防御方应该如何去加固系统。这篇文章我将带你走一遍我实战DC-1的全流程并分享其中每一步的思考、工具选型的理由以及我踩过的那些坑。无论你是准备OSCP认证还是想夯实基础这篇详尽的解析都能给你带来直接的帮助。2. 环境搭建与靶机配置在开始任何渗透测试之前一个隔离、可控的实验环境是首要前提。直接在生产环境或他人的设备上进行测试是非法且不道德的。对于DC-1我们通常采用虚拟机方案。2.1 虚拟化平台选择与网络模式我推荐使用VMware Workstation Pro或VirtualBox作为虚拟化平台。两者在功能上都能满足需求VMware在性能和网络模拟上更胜一筹而VirtualBox是免费开源的选择。我个人的主力机是VMware因为它对嵌套虚拟化比如在虚拟机里再跑虚拟机的支持更好方便后续更复杂的环境搭建。网络模式的选择至关重要它决定了你的攻击机Kali Linux能否“看到”并访问靶机DC-1。这里我们选择“NAT模式”或“桥接模式”。NAT模式这是最常用、最安全的实验室配置。虚拟机会通过宿主机的网络地址转换NAT功能上网并处于一个虚拟的子网中。在这个子网里虚拟机能互相通信但外部网络无法直接访问它们。你的Kali和DC-1都设置为NAT模式后它们会处于同一个虚拟局域网内可以互相扫描和攻击同时又与你的真实家庭/公司网络隔离。桥接模式虚拟机会获得一个与你真实物理网络同网段的IP地址就像一台真实的物理设备接入了你的路由器。这种方式下网络连通性最好但可能会因为IP冲突或网络策略如公司防火墙导致问题且安全性稍差靶机暴露在更大范围。注意确保你的攻击机Kali和靶机DC-1处于同一网络模式。如果一台是NAT一台是桥接它们很可能不在同一个IP段导致无法通信。初次搭建强烈建议统一使用NAT模式。2.2 攻击机与靶机部署攻击机 - Kali Linux从官方网站下载最新的Kali Linux虚拟机镜像.ova或.vmdk格式。直接导入到你的虚拟化软件中即可。默认用户名kali密码kali。启动后第一件事建议在终端执行sudo apt update sudo apt upgrade -y来更新系统确保所有工具都是最新版本。靶机 - DC-1从 VulnHub 网站下载 DC-1 的虚拟机文件通常是.ova或.7z压缩包。同样将其导入虚拟化软件。DC-1的启动过程可能会在屏幕上显示一些信息留意是否有IP地址分配的相关提示。关键步骤确定靶机IP地址由于DC-1启动后我们不知道其IP而渗透测试始于信息收集所以我们需要先找到它。在Kali Linux中打开终端使用以下命令扫描你的虚拟网络段sudo netdiscover -r 192.168.0.0/16或者如果你知道自己的虚拟网段例如VMware NAT模式常用192.168.xx.0/24可以缩小范围sudo netdiscover -r 192.168.56.0/24netdiscover是一个ARP扫描工具能快速发现同一局域网内存活的设备。找到那个不属于你已知设备如你的Kali、宿主机的IP地址那很可能就是DC-1。记下这个IP我们后续的所有操作都将围绕它展开。3. 主动信息收集与攻击面发现信息收集是渗透测试的基石花费整个项目70%的时间进行细致的信息收集都不为过。对于DC-1我们的目标是全面绘制其网络轮廓和服务蓝图。3.1 端口扫描与服务识别找到靶机IP假设为192.168.56.101后第一项工作就是端口扫描。我习惯使用Nmap它是网络探索和安全审计的瑞士军刀。不要一上来就用最激进的扫描先从基础的开始。nmap -sV -sC -O 192.168.56.101-sV: 版本探测。尝试确定端口上运行的服务及其版本号。知道服务版本是寻找对应漏洞的关键。-sC: 使用默认的Nmap脚本进行扫描。这些脚本能进行更深入的探测比如检查HTTP服务的标题、Robots文件等。-O: 操作系统探测。尝试识别靶机的操作系统类型和版本。执行这个命令后你会得到一份详细的报告。对于DC-1典型的输出会显示开放了**22SSH、80HTTP、111RPCbind**等端口。其中80端口运行的HTTP服务是我们的首要关注点因为Web应用往往是漏洞的高发区。3.2 Web应用深度侦察既然80端口开放我们立即用浏览器访问http://192.168.56.101。页面加载后首先按下F12打开开发者工具。技术栈识别查看页面源代码在head部分或页面底部经常能找到诸如“Powered by XXX”的注释。DC-1通常会明确显示它是基于Drupal内容管理系统构建的。查看HTTP响应头在开发者工具的“网络”Network选项卡中刷新页面查看对根路径的请求。在响应头Response Headers里可能会找到X-Generator: Drupal x.x这样的字段直接指明了Drupal的版本。版本号是后续漏洞利用的命门。目录与文件枚举 网站根目录下往往存在一些隐藏的或默认的文件如robots.txt,README.txt,CHANGELOG.txt这些文件可能泄露路径、版本甚至配置信息。对于Drupal特别要关注/CHANGELOG.txt它常常直接写明Drupal的核心版本。 我们使用工具进行更全面的枚举。Gobuster或Dirb是不错的选择。这里用Gobuster举例gobuster dir -u http://192.168.56.101 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html这个命令会以common.txt字典为基准尝试爆破网站目录和以php, txt, html为扩展名的文件。你可能会发现/admin,/user,/modules,/themes等典型Drupal路径。漏洞搜索引擎利用 当我们确定了服务Drupal和可能的版本后下一步就是寻找已知的公开漏洞。Searchsploit是离线版的Exploit-DB集成在Kali中非常方便。searchsploit drupal 7.x这条命令会列出所有Drupal 7.x版本的漏洞利用代码。仔细浏览列表寻找与你的版本匹配且评级较高的漏洞。对于DC-1一个非常著名的漏洞是Drupalgeddon (CVE-2014-3704)这是一个Drupal 7.x版本中的SQL注入漏洞允许远程执行代码。Searchsploit中会有对应的利用脚本通常以.py或.rb结尾。4. 漏洞利用与初始立足点获取通过信息收集我们高度怀疑目标存在Drupalgeddon漏洞。现在就是将其转化为实际访问权限的时候。4.1 利用Drupalgeddon获取ShellSearchsploit找到的脚本可能需要稍作修改。我们以Python脚本为例。首先将其复制到当前目录searchsploit -m 34992.py # 假设34992.py是Drupal 7.x的RCE脚本编号用文本编辑器如nano或vim打开这个脚本。通常需要修改的地方是目标URL。找到类似target “http://example.com”的行将其改为你的靶机地址http://192.168.56.101。保存并运行脚本python 34992.py如果漏洞存在且利用成功脚本会给你一个反向Shell的连接命令或者直接提供一个交互式的Shell。所谓“反向Shell”就是让靶机主动连接到你攻击机指定的监听端口。这是绕过防火墙出站限制的常用手段。假设脚本提示你使用Netcat监听你需要在Kali上先开启监听nc -lvnp 4444然后脚本会执行命令让靶机向你的KaliIP:192.168.56.102的4444端口发起连接。一旦连接建立你就获得了在靶机上的一个初始命令行权限。这个权限通常就是运行Web服务的用户权限在Linux下常见的是www-data。实操心得并非所有公开的Exploit脚本都能一键成功。可能会因为目标环境、脚本编码、参数等问题失败。多尝试几个不同的利用脚本或者手动根据漏洞原理编写利用代码是进阶的必经之路。另外务必在虚拟机环境中测试切勿对未经授权的目标使用。4.2 Shell稳定性优化通过漏洞获取的初始Shell往往是“哑巴”的没有交互式提示符或不稳定的一敲CtrlC就断开。我们需要将其升级为一个功能完整的、稳定的Shell。升级为TTY Shell在获取的初始Shell中输入以下Python单行命令python -c import pty; pty.spawn(/bin/bash)如果靶机没有Python可以尝试/bin/sh -i或者script -qc /bin/bash /dev/null背景化与稳定性处理按CtrlZ将当前会话背景化然后在你的Kali终端输入stty raw -echo; fg输入后按一次回车。这个操作会将你的本地终端设置传递过去从而支持Tab补全、方向键历史记录等功能。最后别忘了设置环境变量使得Shell看起来更正常export TERMxterm export SHELLbash现在你应该拥有了一个相对稳定、可交互的www-data用户Shell。执行whoami和id命令确认当前用户和权限。5. 权限提升从www-data到root获得初始Shell只是第一步通常www-data用户的权限很低。我们的最终目标是root。在Linux中提权方法繁多需要系统性地进行枚举和尝试。5.1 系统信息枚举在靶机上我们需要尽可能多地收集信息。我习惯使用一个自动化枚举脚本LinEnum.sh但手动枚举更能锻炼能力。关键检查点如下内核与系统信息uname -a查看内核版本。寻找是否有公开的内核漏洞可以利用。运行进程ps aux或ps -ef查看所有进程关注以root身份运行的非系统核心进程。网络连接netstat -tulnp查看网络连接和监听端口或许有内部服务可以利用。计划任务crontab -l查看当前用户的以及查看系统级计划任务ls -la /etc/cron*和cat /etc/crontab。配置不当的计划任务可能是绝佳的提权点。SUID/SGID文件这是DC-1提权的关键路径。SUIDSet User ID权限的文件在执行时会以文件所有者的身份运行。如果/bin/bash被设置了SUID且属主是root那么运行bash就能直接获得root shell。查找SUID文件find / -perm -us -type f 2/dev/null仔细检查返回的列表寻找不常见的、或已知可用于提权的二进制文件如find,vim,nmap,bash,cp等。5.2 SUID提权实战在DC-1中经典的提权向量是一个设置了SUID位的可执行文件比如/usr/bin/find。find命令功能强大其-exec参数可以执行命令。确认SUID权限执行ls -la /usr/bin/find如果显示-rwsr-xr-x其中s就代表SUID且属主是root。利用find执行命令我们可以利用find来启动一个具有root权限的Shell。/usr/bin/find . -exec /bin/sh -p \; -quit.在当前目录查找。-exec /bin/sh -p \;对找到的每个文件这里.目录本身就算一个执行/bin/sh。-p参数在bash中用于保留特权模式当有效用户ID与真实用户ID不同时即SUID场景。-quit找到第一个结果后就退出避免循环。验证权限命令执行后你会进入一个新的Shell。立即执行whoami如果返回root那么恭喜你提权成功再执行id确认一下。注意事项SUID提权是“本地提权”意味着你必须在系统上有一个低权限的Shell才能尝试。不同的SUID二进制文件利用方式不同需要一些经验和技巧。除了findnmap交互模式、vim通过:!bash、cp覆盖敏感文件等都可能成为突破口。关键在于对系统命令的深刻理解。5.3 其他提权路径探索SUID不是唯一的路径。在DC-1中你可能还会发现其他有趣的东西数据库凭证Drupal的配置文件settings.php通常位于/var/www/html/sites/default/settings.php中包含数据库连接信息数据库名、用户、密码。你可以用cat命令查看。cat /var/www/html/sites/default/settings.php找到类似$databases array (‘default’ array (‘default’ array (‘database’ ‘drupal’, ‘username’ ‘dbuser’, ‘password’ ‘R0ck3t’, ...的内容。记下这些凭证。数据库渗透使用得到的密码可以登录MySQL数据库mysql -u dbuser -p然后输入密码。在数据库中你可以查看Drupal的用户表通常是users其中存储了管理员的用户名和加密后的密码哈希。你可以尝试用hashcat或john离线破解这个哈希如果密码强度弱就有可能获得管理员密码从而通过Web后台进行更深度的操作。这属于“横向移动”的范畴。敏感文件与历史记录检查/home目录下的用户文件夹查看.bash_history历史命令文件或许能找到密码或其他敏感信息。检查/root目录是否可读或者是否有备份文件如.bak,.old。6. 总结与防御思考走完DC-1的全流程我们实践了一次标准的渗透测试信息收集定位目标、利用Web应用漏洞获取初始访问、在系统内部进行枚举、最后通过权限配置缺陷SUID完成提权。这个过程清晰地展示了“攻击链”的概念。从防御者的视角看DC-1暴露出的问题给我们以下启示及时更新与补丁管理Drupalgeddon漏洞在2014年披露相关补丁早已发布。任何公开的Web应用尤其是像Drupal、WordPress这类使用广泛的CMS必须建立严格的补丁更新机制确保第一时间修复已知高危漏洞。最小权限原则www-data用户不应该拥有对系统关键目录的写权限。更关键的是要定期审计系统上的SUID/SGID文件使用find / -perm -4000 -type f命令列出所有SUID文件移除任何非绝对必要的SUID位。为什么find命令需要以root身份运行绝大多数日常使用场景并不需要。通过chmod u-s /usr/bin/find即可移除其SUID位。数据库安全避免使用弱密码或默认密码。数据库用户应仅被授予完成其功能所必需的最小权限不要使用root账户连接Web应用。定期更换数据库密码。纵深防御不要只依赖一层防护。即使Web应用被攻破通过严格的系统权限控制、网络分段、入侵检测系统IDS等手段也能极大增加攻击者横向移动和提权的难度甚至能及时发现入侵行为。最后我想强调的是渗透测试是一门需要不断练习和思考的手艺。像DC-1这样的靶场在完全掌握后可以尝试给自己增加限制条件比如“不允许使用Metasploit”、“必须手动编写漏洞利用代码”、“尝试不同的提权路径”这样能迫使你更深入地理解底层原理。靶场的世界很广阔从DC系列到HackTheBox、TryHackMe有无数个模拟环境在等着你去挑战。保持好奇合法练习你会在不断破解与重建的过程中成为一名真正理解安全的专家。
返回列表