PHP在CTF中的应用场景

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
  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值