直接就可以进入看看源代码

原本以为这道题目有两个方法来做 但是 后面发现第二个没有找到漏洞
这里考点主要就是 正则和 basename的特性
首先就是正则
现在出现一个知识点
就是
/index.php/config.php 这种路径 访问的还是 index.php
我们可以试试看

还是在index.php中过滤了 说明访问的还是 index.php
那我们怎么实现嗯
主要是下面这里
- if (isset($_GET['source'])) {
- highlight_file(basename($_SERVER['PHP_SELF']));
- exit();
- }
首先看看 PHP_SELF输出的是什么

$_SERVER['PHP_SELF'] 表示当前 php 文件相对于网站根目录的位置地址
如果我们在后面加上 /config.php呢

很显然 还是 被过滤了
因为会被正则匹配到
我们现在的突破点在哪里

basename会去除掉非ASCII值
例如
/config.php/%ab
他就会去除掉 %ab 然后就变为了 config.php
但是这个为什么不会被匹配呢 我们去正则测试一下就行了

我们能发现 确实绕过了
所以思路就是
- 通过 /config.php/%ab 绕过正则
-
- 并且 basename 去除了 后面非ascii 值 %ab
-
- 这样路径就就为了config.php

那么这道题目payload就出现了
- index.php/config.php/%ab?source=
-
- 这里首先正则 因为 后面 存在 /%ab 就不会匹配
-
- 其次 basename 匹配到 %ab非ascii值
-
- 然后就会去除 这样就变为了 index.php/config.php/
-
- 通过 PHP_SELF 就会匹配到 config.php
-
- 然后实现高亮
