就是经过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。经过构造恶意的输入,使数据库执行恶意命令,形成数据泄露或者修改内容等,以达到攻击的目的。主要是因为应用程序对用户的输入没有进行严格的过滤而形成的。php
在说sql注入分类以前,先来看一下万能密码的构成原理。万能密码是因为某些程序,经过采用判断sql语句查询结果的值是否大于0,来判断用户输入数据的正确性形成的。当查询之大于0时,表明用户存在,返回true,表明登陆成功,不然返回false 表明登陆失败。因为 ‘or 1=1--' 在执行后,结果始终为1,因此能够登陆成功。所以,被称为万能密码。html
注入的分类:数字型和字符型。攻击者目的只有一点,那就是绕过程序的限制,使用户输入的数据带入数据库执行,利用数据库的特殊性获取更多的信息或者更大的权限。sql
当输入的参数为整形时,若是存在注入漏洞,能够认为是数字型注入。数据库
测试步骤:服务器
(1) 加单引号,URL:www.text.com/text.php?id=3’测试
对应的sql:select * from table where id=3’ 这时sql语句出错,程序没法正常从数据库中查询出数据,就会抛出异常;编码
(2) 加and 1=1 ,URL:www.text.com/text.php?id=3 and 1=1url
对应的sql:select * from table where id=3’ and 1=1 语句执行正常,与原始页面如任何差别;htm
(3) 加and 1=2,URL:www.text.com/text.php?id=3 and 1=2blog
对应的sql:select * from table where id=3 and 1=2 语句能够正常执行,可是没法查询出结果,因此返回数据与原始网页存在差别
若是知足以上三点,则能够判断该URL存在数字型注入。
当输入的参数为字符串时,称为字符型。字符型和数字型最大的一个区别在于,数字型不须要单引号来闭合,而字符串通常须要经过单引号来闭合的。
例如数字型语句:select * from table where id =3
则字符型以下:select * from table where name=’admin’
所以,在构造payload时经过闭合单引号能够成功执行语句:
测试步骤:
(1) 加单引号:select * from table where name=’admin’’
因为加单引号后变成三个单引号,则没法执行,程序会报错;
(2) 加 ’and 1=1 此时sql 语句为:select * from table where name=’admin’ and 1=1’ ,也没法进行注入,还须要经过注释符号将其绕过;
Mysql 有三种经常使用注释符:
-- 注意,这种注释符后边有一个空格
# 经过#进行注释
/* */ 注释掉符号内的内容
所以,构造语句为:select * from table where name =’admin’ and 1=1—’ 可成功执行返回结果正确;
(3) 加and 1=2— 此时sql语句为:select * from table where name=’admin’ and 1=2 –’则会报错
若是知足以上三点,能够判断该url为字符型注入。
Sql注入分类能够按照参数类型分为数字型和字符型。还有一些常见的注入分类,例如:
(1)POST:注入字段位于POST数据中;
(2)Cookie:注入字段位于Cookie数据中;
(3)延时注入:根据数据库延时特性的注入
(4)搜索注入:注入字段在搜索的位置;
(5)base64注入:注入字符通过base64编码后注入;
(7)错误注入:基于数据库错误信息的响应注入;
以上内容转自https://www.cnblogs.com/aq-ry/p/9368619.html