自己的场景
先看一下现象![LUIA]AGSEA1M_$(3FH}LAS.png
在mysql和php中,数字和字符串进行比较时,当这个字符串是一个无法转换为数字的字符串,它就会被强制转化为数字,结果总是为0 。
题目源码
查询语句
$sql = "select pass from ctfshow_user where username = {$username}";
返回逻辑
//用户名检测if(preg_match('/and|or|select|from|where|union|join|sleep|benchmark|,|\(|\)|\'|\"/i', $username)){$ret['msg']='用户名非法';die(json_encode($ret));}//密码检测if(!is_numeric($password)){$ret['msg']='密码只能为数字';die(json_encode($ret));}//密码判断if($row['pass']==intval($password)){$ret['msg']='登陆成功';array_push($ret['data'], array('flag'=>$flag));}
所以payload 如下username=0&password=0
还有一个tip 思考一下![R[D3P~16XCJXJQC{35Y]TQY.png](/uploads/projects/xbx0d@torze3/b75b1793e62d9c377067e14dd4c9950c.png)
