自己的场景

先看一下现象![LUIA]AGSEA1M_$(3FH}LAS.png

  1. mysqlphp中,数字和字符串进行比较时,当这个字符串是一个无法转换为数字的字符串,它就会被强制转化为数字,结果总是为0

题目源码

  1. 查询语句

    1. $sql = "select pass from ctfshow_user where username = {$username}";
  2. 返回逻辑

    1. //用户名检测
    2. if(preg_match('/and|or|select|from|where|union|join|sleep|benchmark|,|\(|\)|\'|\"/i', $username)){
    3. $ret['msg']='用户名非法';
    4. die(json_encode($ret));
    5. }
    6. //密码检测
    7. if(!is_numeric($password)){
    8. $ret['msg']='密码只能为数字';
    9. die(json_encode($ret));
    10. }
    11. //密码判断
    12. if($row['pass']==intval($password)){
    13. $ret['msg']='登陆成功';
    14. array_push($ret['data'], array('flag'=>$flag));
    15. }

    所以payload 如下username=0&password=0
    还有一个tip 思考一下R[D3P~16XCJXJQC{35Y]TQY.png