天天看点

攻防世界Web新手区-simple_php

题目描述:

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

  1. 先打开场景,果然是php代码审计题目
攻防世界Web新手区-simple_php
  1. 我们可以简单阅读一下这段代码,大概就是通过get方式传入a和b参数的值,然后判断a的值和0是否相等,b的值不能是纯数字或者数字型字符串,而且要大于1234
  2. 先解决a,a的值要等于0,但是a的值不能为空,也就是不能为false
    • 首先,如果a的值为0,那么a是不是等于false
      攻防世界Web新手区-simple_php
    • 这里需要知道php在进行比较时,有两种比较方式,当采用双等号(

      ==

      )比较时会进行松散比较,只比较两者的值,而不比较两者类型,比如,当一个字符串和数字比较时,会先将字符串转换为数字,再比较,

      '1'==1

      ,这两个是相等的,但是如果不是数字型字符串,而是

      'a'

      ,非数字字符串和数字类型比较,php会直接返回0,这就导致

      'a'==0

      是成立的。其次,非空字符串都能通过if条件判断
      攻防世界Web新手区-simple_php
  3. 其实是b的值,b的值也是用弱类型,b的值不能是数字类型或纯数字字符串,我们可以想到用

    'abcow'

    ,任意都是,然后要大于数字1234,如果是

    abc

    和数字1234比较,php会将

    'abc'

    返回0。但这里也用了双等号,松散比较,所以我们可以构造

    '9999abc'

    ,这样,既不是纯数字字符串,在php松散比较下,又大于1234
攻防世界Web新手区-simple_php

5. 这里构造payload

?a=任意字母&b=大于1234的数字和任意字母

,例如

?a=xxx&b=66666xx

,成功获得flag,本题结束