攻防世界Web新shou区-simple_php

题目描述:

小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。

  1. 先打开场景,果然是php代码审计题目

在这里插入图片描述

  1. 我们可以简单阅读一下这段代码,大概就是通过get方式传入a和b参数的值,然后判断a的值和0是否相等,b的值不能是纯数字或者数字型字符串,而且要大于1234
  2. 先解决a,
    - a和0数字0进行松散比较必须相等,所以a的值为数字0是可以的,其次由于参数a是get方式传进去的值,所以默认是字符串类型,那么在松散比较下,a的值为字符串0和数字0也是true
    - 其次字符串0和false比较是否相等
    在这里插入图片描述
    • tips:这里需要知道php在进行比较时,有两种比较方式,当采用双等号(==)比较时会进行松散比较,只比较两者的值,而不比较两者类型,
      - 比如,当一个字符串和数字比较时,会先将字符串转换为数字,再比较,'1'==1,这两个是相等的,
      - 但是如果不是数字型字符串,而是'a',非数字字符串和数字类型比较,php会直接返回0,这就导致'a'==0是成立的。
      - 其次,非空字符串都能通过if条件判断,还有一点就是,如果是这样的字符串123abc ,最终会转化为数字123
      - 转化机制是,php在松散比较下,字符串转换为数字规则是,遇到非数值就停止转换,就是123abc,只会转换到a前面,因为a是非数值,所以就只转换到这里,后续不再转换,如果是abc123,那就直接返回0,因为开头a是非数值
      在这里插入图片描述
  3. 其次是b的值,b的值也是用弱类型比较,b的值不能是数字类型或纯数字字符串,我们可以想到用'abcow',任意都是,然后要大于数字1234,如果是abc和数字1234比较,php会将'abc'返回0。但这里也用了双等号,松散比较,所以我们可以构造'9999abc',这样,既不是纯数字字符串,在php松散比较下,又大于1234

在这里插入图片描述
6. 这里构造payload?a=任意字母&b=大于1234的数字和任意字母,例如?a=xxx&b=66666xx,成功获得flag,本题结束

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值