不再显示错误的盲注

不再显示错误的盲注

意外的收获

我在对lesson1重新测试单双引号闭合的时候发现了一个有趣的问题。

lesson1sql源码是

SELECT * FROM users WHERE id='$id' LIMIT 0,1

但是我惊讶的发现我单纯用双引号也能正确的查询

不再显示错误的盲注_第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

–+的问题

而关于这个 –+ 的注释问题,我之前进入了一个误区,这里记录一下。

我以为在双引号后面加注释就行了。

不再显示错误的盲注_第2张图片

SQL语句实际上是这样的

SELECT * FROM `user` WHERE id='1 --+'
--+ 其实跟上面的是同理

因为会自动转成int而且我用的是双引号,并没有与前面的单引号闭合,所以被当成"1 --+"的字符串处理了。

查出来的自然是admin1

varchar不会自动转换

注意这是int类型,SQL遇到这样的情况才会自动转换,如果是varchar类型自然就不会做这样的处理了。

lesson8 GET-Blind-Boolean Based

这是基于bool类型的注入

同样的第一步先判断是单引号还是双引号闭合

首先用单引号闭合,就是在这里引出了开头的问题。因为我发现用单引号闭合进不去。

不再显示错误的盲注_第3张图片

双引号却可以,

你可能感兴趣的:(网络安全,sql注入,mysql,数据库,sql)