开启环境:
这一题我们通过分析需要知道一些知识:
1.$_SERVER[‘PHP_SELF’] :正在执行脚本的文件名
例子:127.0.0.1/pikachu/index.php 显示:/pikachu/index.php
2.SERVER[′REQUESTURI′]:与 _SERVER[‘PHP_SELF’]的区别是会加上参数
例子:127.0.0.1/pikachu/index.php?file=1.php 显示:/pikachu/index.php?1.php
3.basename():返回路径中的文件名部分
例子:127.0.0.1/pikachu/index.php?file=1.php 显示:1.php
127.0.0.1/pikachu/index.php?file=flag.php/1.php 显示:1.php
利用的点:如果传入的参数中出现了非ascii字符则会把它给丢弃。
4.正则绕过–show_source:
[ (空格) + . 这四个都可以被处理为_
5.highlight_file有读取文件的作用
知道这些知识后,分析代码:可以输出flag但if ($guess === $secret)这个secret)这个secret根本找不到,应该是迷惑人的
开头有:include 'utils.php'
大胆的读它
绕过:preg_match('/utils\.php\/*$/i', $_SERVER['PHP_SELF'])
/index.php/utils.php/%a0
页面显示成正常,成功绕过
再绕过:isset($_GET['show_source']))
利用: [ (空格) + .
/index.php/utils.php/%a0?show+source=1
flag!