sql注入闭合方式判断详解

5年前

前言

在回顾sql注入时,发现对闭合方式的判断sql语句并没有理解到位,有时候使用会报错,于是有了这篇文章。本文sql语句在navicat中实验,navicat已连接到MySQL数据库。(PS:下面所有的图_选中的部分为输入的判断语句,且该实验环境本身会为其加单引号[此处自动添加单引号应该是为了解析语法和单引号闭合的单引号不一样,单引号闭合是后端语言获取用户传入的数据进行的闭合操作],不影响)

数值型

当输入1时,有查询结果无报错

图1

当输入1' 时,会报错,未闭合,多了个'

图2(忘选中了,1’是输入的)

当输入1" 时 ,虽然闭合了,但也会报错,因为没有把1闭合会导致1多余构成语法错误,我个人认为(我下了相应版本的手册,奈何全是英文,目前能力有限,暂时无法学习该内容只能靠实验猜想)数据库解析你命令时,如果你输入有引号,会直接从你引号起始位置开始读取,如果该引号前面有内容则会报语法错误

图片3

综上,数值型闭合就是当加'"都会报错,不加任何东西就是正确的就说明是该类型闭合。当然像 1 and 1=1 #1 and 1=2 # 也可以同样理解 /*前面true 返回1(返回数据是and前的数值),后面false,返回为空*/

单引号型

当输入1时,有查询结果无报错

图4

当输入1' 时,会报错,未闭合,多了个'

图5

当输入1" 时,有查询结果,无报错

图6

综上,单引号闭合就是当加'会报错,其他都是正确的就说明是该类型闭合。

双引号型

同理,双引号闭合就是当加"会报错,其他都是正确的就说明是该类型闭合。

图7
图8
图9

后记:文中若有错误,或理解不当的地方还请大佬们指正。