在网上看了那些方法,总的来说,我觉得有些绕。今天练习sqli-libs的时候自己遇到了问题,自己琢磨琢磨就想到了这个方法。
废话不多说,下面开始吧!
方法一:order by法
构造payload为:
id=1 order by 9999 --+
- 如果正确返回页面,则为字符型
- 否则,为数字型
分析:
字符型执行的sql语句为select * from user where id='1 order by 9999 --+'
,注释符【- -】实际上在执行的时候,被当成id的一部分,也就是说,在执行sql语句的时候,条件是
id='1 order by 9999 --+'
。最终只会截取前面的数字,返回id=1的结果。
如果是数字型的话,执行的sql语句为select * from user where id=1 order by 9999 --+
,在现实生活中,根本就没什么可能会存在有9999个字段的表,所以会报错。
方法二:逻辑判断法
这就很简单了,就是猜,但是也得知道一点技巧。
比如说,id这种,一般在数据库存储为int类型的,在查询时,可能是数字型,也可能是字符型。
但是,如果是name或者username之类的,按正常逻辑,一看就知道是以varchar或者char存储的,那指定就是字符型了,因为不加引号,sql语句绝对报错。
就像这样:
如果不加引号:
版权归原作者 jenchoi413 所有, 如有侵权,请联系我们删除。