不再显示错误的盲注
意外的收获
我在对lesson1重新测试单双引号闭合的时候发现了一个有趣的问题。
lesson1的sql源码是
SELECT * FROM users WHERE id='$id' LIMIT 0,1
但是我惊讶的发现我单纯用双引号也能正确的查询
原来如此
下面用这样的table来进行实例讲解.
id | name |
---|---|
0 | admin0 |
1 | admin1 |
因为SQL在遇到这种情况是会自动转换为int类型比较,如果该字段是int的话。
select * from `user` where id='1"'
--+ 等价于
select * from `user` where id='1'
返回的结果是admin1,而如果是这样的呢?
select * from `user` where id='"1'
--+ 等价于
select * from `user` where id='0'
返回的结果是admin0
–+的问题
而关于这个 –+ 的注释问题,我之前进入了一个误区,这里记录一下。
我以为在双引号后面加注释就行了。
SQL语句实际上是这样的
SELECT * FROM `user` WHERE id='1 --+'
--+ 其实跟上面的是同理
因为会自动转成int而且我用的是双引号,并没有与前面的单引号闭合,所以被当成"1 --+"的字符串处理了。
查出来的自然是admin1了
varchar不会自动转换
注意这是int类型,SQL遇到这样的情况才会自动转换,如果是varchar类型自然就不会做这样的处理了。
lesson8 GET-Blind-Boolean Based
这是基于bool类型的注入
同样的第一步先判断是单引号还是双引号闭合
首先用单引号闭合,就是在这里引出了开头的问题。因为我发现用单引号闭合进不去。
用双引号却可以,