攻防世界easyphp

这道代码审计题我们需要绕过限制让key1,2变量等于1,然后下面即可打印flag

先从第一部分开始,要让a取整的值大于六百万而且长度不能大于3,我们可以使用科学计数法,比如7e6,结果七百万而且长度刚好为3。

第二个if我们b不为空并且截取md5算法后的b的后六位要和'8b184b'强等于,强等于某个字符串不能md5碰撞了,我们写个脚本看看有没有哪个数符合这个条件吧

得出53724符合这个条件,所以?a=7e6&b=53724即可让$key1=1

接下来分析第二部分

$c=(array)json_decode(@$_GET['c'])使得我们传递参数给c需要用json格式,并且强制转换为数组

$c是中键位m的值不能是数字并且值要大于2022,传个字符串2023a即可

count计算数组元素个数,然后就是要让c[n]中存在第一个子元素也为数组,很简单直接嵌套数组即可

根据官方文档PHP: array_search - Manual  array_search函数第三个参数导致如果在数组中找不到"DGGJ"就会将前面的字符串转为布尔值false继续找,
array_search函数又是弱类型比较,所以我们在c["n"]嵌套的数组再加一个0即可绕过,不让他终止程序,c["n"]数组中没有这个字符串循环里面不可能终止程序,然后得到$key2=2

最终payload:?a=7e6&b=53724&c={"m":"2023a","n":[[],0]}

拿下

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值