SQL注入类型判断全网最简单方法(原理解剖)
在sql的语法中,有两个类型的变量比较特殊,分别是整型和字符型:1.整型。
SQL注入类型判断全网最简单方法(原理解剖)
一般来说,SQL注入一般存在于形如: http://xxx.XXX.xxx/abc.php?id=YY等带有参数的动态网页中,有时一个动态网页中可能只有一个参数,有时可能有N个参数,有时是整型参数,有时是字符串型参数,不能一概而论。总之只要是带有参数的动态网页并且该网页访问了数据库,那么就有可能存在SQL注入。如果php程序员没有安全意识,没有进行必要的字符过滤,存在SQL注入的可能性就非常大。
逻辑判断类型(最简单)
就两句话
字符型注入,后端只解析前端参数的有效部分,扔掉后面的所有部分。
整型注入,后端会将前端传入的全部内容作为SQL语句执行。
后端接收参数类型(最好理解)
以开发的角度思考:如果后端需要前端传参来回显,一般控制变量要么是整型要么是字符型。
这里先放总结和方法,下面进行完整验证
总结:
在sql的语法中,有两个类型的变量比较特殊,分别是整型和字符型:
1.整型变量可以接收字符型参数里面首位整数,而忽略之后的全部字符串(字符串必须数字开头),
如:id=‘123±abc*/’,那么id=123。
2.字符型变量接收字符型参数时,会接收完整的参数,所以字符型变量接收字符型参数时,参数不能做算术运算。
3.字符型和整型变量接收整型参数时,参数可以做算术运算,传参结果即是运算结果。
判断方法
先输入id=x+1
如果报错,一定存在SQL字符型注入漏洞
如果没报错,且页面与输入id=x相同,一定存在SQL字符型注入漏洞
如果没报错,且页面与输入id=y(y=x+1的运算结果)相同,一定存在SQL整型注入漏洞
注意:有一些url中+会被转义为空格即编码%20,而正常+号对应的编码是%2B
开始验证
我们用Navicat来实验,设计两个接受参数的类型,user_id 为整型,user_pass为字符型(varchar就是字型)

创建一些数据

整型变量
如果后端接受参数的变量为整型时,我们需要判断注入类型
字符型注入
在URL链接中附加字符串"+1"即 http://xxx.XXX.xxx/abc.php? id =YY +1。
此时abc.php中的SQL语句变成了:
select * from 表名 where 字段 ='YY+1'
如果测试结果为abc.php运行正常,而且与http://xxx.xxx.xxx/abc.php? id = YY运行结果相同;
abc.php中一定存在SQL字符型注入漏洞,且接收参数的变量为整型。


整型注入
在URL链接中附加字符串"+1"即 http://xxx.XXX.xxx/abc.php? id =YY +1。
此时abc.php中的SQL语句变成了:
select * from 表名 where 字段 =YY+1
如果测试结果为abc.php运行正常,而且与http://xxx.xxx.xxx/abc.php? id = YY+1运算后的运行结果相同;
abc.php中一定存在SQL整型注入漏洞,且接收参数的变量为整型。


字符型变量
如果后端接受参数的变量为字符型时,我们需要判断注入类型
字符型注入
在URL链接中附加字符串"+1"即 http://xxx.XXX.xxx/abc.php? id =XX+1。
此时abc.php中的SQL语句变成了:
select * from 表名 where 字段 ='XX+1'


如果测试结果为abc.php运行错误,而http://xxx.xxx.xxx/abc.php? id = XX运行正常;
abc.php中一定存在SQL字符型注入漏洞,且接收参数的变量为字符型。
整型注入
在URL链接中附加字符串"+1"即 http://xxx.XXX.xxx/abc.php? id =XX+1。
此时abc.php中的SQL语句变成了:
select * from 表名 where 字段 =XX+1


如果测试结果为abc.php运行正常,而且和http://xxx.xxx.xxx/abc.php? id = XX+1运算后的运行结果相同;
abc.php中一定存在SQL整型注入漏洞,且接收参数的变量为字符型。
更多推荐



所有评论(0)