Ctfshow web入门-php特性-web89-91 WP

web89
在这里插入图片描述

查看代码
preg_match过滤0-9,即发现有0-9,就输出no no no
然而intval函数的作用是返回变量的整数值,两者相互矛盾

这里可以通过数组绕过,构造payload: ?num[]=

在这里插入图片描述

成功获取flag

web90

在这里插入图片描述

查看源码,第一个if是验证num是否被设置,第二个if验证num是否是4476,如果是,就输出no no no ,第三个if验证num取整后是否等于4476

看到取整,还不好做吗~,直接输入小数取整绕过第二个if的验证

 payload?num=4476.1

在这里插入图片描述

web91

在这里插入图片描述

查看源码

首先是

if(preg_match('/^php$/im', $a)){

这个if的意思是匹配$a开头和结尾是php,如果是php,进入下一个if

/^php$/im ^表示开头 $表示结尾 /i不区分大小写 /m表示多行匹配

preg_match('/^php$/i

这个if的意思是匹配$a开头和结尾是php,不区分大小写,如果开头是php,那么就输出hacker

仔细对比发现,第二个if的过滤对比第一个,少了一个多行匹配/m,这可以用到Apache HTTPD换行解析漏洞(CVE-2017-15715)

师傅的传送门:传送门

大概意思是:以前的1.php可以用1%0aphp访问,%0a表示换行符,那么综上所述,就可以绕过函数的过滤

构造payload: ?cmd=a%0aphp 

a%0aphp,首先是preg_match中的$(匹配结尾)匹配a%0aphp中的换行符,这个时候会匹配到%0a(将%0a当作换行),那么a%0aphp后面的php因为preg_match函数有个/m(匹配多行)就是单独的一行了,满足第一个if,要求行开始和结尾都是php

其次是第二个if,第二个if要求$a中开头和结尾没有php,而这个preg_match函数中没有/m匹配多行,所以就直接匹配abcabc不满足第二个if,所以输出flag

在这里插入图片描述

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值