如何判断是字符型注入还是数字型注入

前言

通常sql 注入漏洞会被分为2种类型

数值型
字符型

其实所有产生类型都是数据库本身表产生的,在我们创建的时候会发现其后面总有个数据类型限制,而不同的数据库有不同的数据类型,不管我们怎么分常用的数据类型总是以数值和字符来进行区分的。

如何区分

1)数字型

当输入的参数x为整型的时候,通常sql语句是这样的

select * from users where id =x

这种类型可以使用经典的and 1=1 and 1=2来判断

  • url地址中输入www.xxxx.com/ccc.php?id=x and 1=1
    页面显示正常,继续下一步

  • url地址中输入www.xxxx.com/ccc.php?id=x and 1=2
    页面错误,这说明存在数字型注入。

  • 原因如下:
    当输入and 1=1时,后台会执行sql语句是

select * from users where id =x and 1=1

没有语法显示错误且,返回正常

当输入and 1=2时,后台会执行sql语句是

select * from users where id =1 and 1=2;

没有语法错误且,返回错误

  • 我们在使用假设:
    如果是字符型注入的话,我们输入的语句应该会出现这样的状况
select * from users where id ='1 and 1=1'; 
select * from users where id ='1 and 1=2';

查询语句将and语句全部转换成字符串,并没有进行and的逻辑判断,所以不会出现以上结果,所以这个等式是不成立的。

2)字符型

当输入的参数x为字符型时,通常sql语句会这样的

select * from users where id ='x'

这种类型我们可以使用and ‘1’='1 和 and ‘1’='2来进行测试

  • www.xxx.com/ccc.php?id=1’ and ‘1’='1
    页面正常,继续下一步
  • www.xxx.com/ccc.php?id=1’ and ‘1’='2
    页面报错,则说明存在字符型注入。
  • 原因如下:
    当输入and ‘1’=‘1的时候,后台执行的语句是
select * from users where id='x' and '1'='1'

语法正确,逻辑判断正确,返回正确

当输入and ‘1’=‘2的时候,后台执行的语句是

select * from users where id='x' and '1'='2'

语法正确,逻辑判断错误,返回错误

字符型和数字型最大的一个区别在于,数字型不需要单引号来闭合,而字符串一般需要通过单引号来闭合的。

作者:二潘
链接:https://www.jianshu.com/p/5edd7a58a69e

  • 30
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值