三、攻击链时间线
- 指纹识别:nginx/1.8.1,判断是 Docker:读取
/.dockerenv
补充其他 Docker 佐证文件:
-
/proc/1/cgroup用 LFI 读取,如果里面路径出现/docker/xxxx→ 实锤容器 payload:?page=/proc/1/cgroup

Ubuntu 14.04 系 Docker 容器(发现 /.dockerenv),php-fpm pool www
Ubuntu 14.04 怎么识别
同样靠 LFI 读取系统发行版文件:
?page=/etc/os-release

php‑fpm pool www 是怎么发现的
👉 用 LFI 读 /proc/self/cmdline!
payload:
?page=/proc/self/cmdline
- 判别探测:page=hello.php 无报错(display_errors 关);page=/etc/passwd 内容落页面底部 → 实锤 include($_GET'page') 直拼、无自动后缀
/etc/passwd 是什么? Linux 上一个所有人都能读 的文本文件,里面记录系统用户列表(root、www-data 等)。 它不是可执行的 PHP ,所以不会被当成代码运行;但 include 会把文件的原始内容直接输出到网页上 。 👉 你在页面底部看到一堆用户名,就说明:LFI(本地文件包含)漏洞存在!
-
任意文件读:读通 /etc/passwd、/proc/self/cmdline(php-fpm: pool www)、nginx 全套配置 → 拿到 web 根目录 /var/www/html
-
源码级情报:include /var/www/html/index.php 时整站被"执行"嵌套输出 → 题目提示原文:"尝试获取webshell,答案就在根目录下key.php文件中"
-
伪协议被封验证:php://filter、data:// 静默失败 → 判定 file_exists 门控,本地包含无写入点, RCE 只能走"可落盘文件投毒"
-
日志投毒 RCE:default.access.log 是死文件,但 default.error.log 活跃且错误条目原样记录 Host 头 → Host: + 请求 /images/ 触发 "directory index of ... is forbidden" 错误落盘 → include /var/log/nginx/default.error.log → 代码执行,验证 uid=33(www-data)
-
定位答案:shell 里 ls /var/www/html 发现答案文件其实是 key.cisp(题目文案写 key.php 是坑)
-
读取:cat /var/www/html/key.cisp → key{tmweqxsz}
