SQL字符型注入和整型注入的判断
由于SQL数据库中常用的被查询数据类型为整型和字符型两种,相应的在进行SQL注入的过程中也需要对注入点进行判断。
数字型判断
当输入的参 x 为整型时,通常 abc.php 中 Sql 语句类型大致如下:
select * from <表名> where id = x
这种类型可以使用经典的 and 1=1 和 and 1=2 来判断:
Url 地址中输入 www.xxx.com/abc.php?id= x and 1=1
页面依旧运行正常,继续进行下一步。
Url 地址中继续输入 www.xxx.com/abc.php?id= x and 1=2
页面运行错误,则说明此 Sql 注入为数字型注入。
原因如下:
当输入 and 1=1时,后台执行 Sql 语句:
select * from <表名> where id = x and 1=1
没有语法错误且逻辑判断为正确,所以返回正常。
当输入 and 1=2时,后台执行 Sql 语句:
select * from <表名> where id = x and 1=2
没有语法错误但是逻辑判断为假,所以返回错误。
我们再使用假设法:
如果这是字符型注入的话,我们输入以上语句之后应该出现如下情况:
select * from <表名> where id = 'x and 1=1'select * from <表名> where id = 'x and 1=2'
查询语句将 and 语句全部转换为了字符串,并没有进行 and 的逻辑判断,所以不会出现以上结果,故假设是不成立的。
字符型判断
当输入的参 x 为字符型时,通常 abc.php 中 SQL 语句类型大致如下
select * from <表名> where id = 'x'
这种类型我们同样可以使用 and ‘1’='1 和 and ‘1’='2来判断:
Url 地址中输入 www.xxx.com/abc.php?id= x’ and ‘1’='1
页面运行正常,继续进行下一步。
Url 地址中继续输入 www.xxx.com/abc.php?id= x’ and ‘1’='2
页面运行错误,则说明此 Sql 注入为字符型注入。
原因如下:
当输入 and ‘1’='1时,后台执行 Sql 语句:
select * from <表名> where id = 'x' and '1'='1'
语法正确,逻辑判断正确,所以返回正确。
当输入 and ‘1’='2时,后台执行 Sql 语句:
select * from where id = 'x' and '1'='2'
语法正确,但逻辑判断错误,所以返回正确。
参考:https://www.cnblogs.com/zztac/p/11355622.html