sql注入类型有哪些
sql注入类型有以下6种:1. 数字类型的注入;2. 字串类型的注入;3. GET注入;4. POST注入;5. COOKIE注入;6. HTTP注入。sql注入是通过将恶意的 sql 查询或添加语句插入到应用的输入参数中,再在后台 sql 服务器上解析执行进行的攻击。
1.数字类型的注入
当输入参数为数字类型时,例如页码,ID等,存在注入时则为数字类型的注入。
测试方法如下:
http://www.xx.com/a.php?id=1
http://www.xx.com/a.php?id=1’ 返回异常
http://www.xx.com/a.php?id=1 and 1 =1 返回正常
http://www.xx.com/a.php?id=1 and 1 =2 返回异常
说明存在注入可能。
这类注入方式常见于PHP和ASP等弱类型语言中,弱类型语言会自动推导数据类型,例,输入的ID的值为1时,会自动推导出ID的数据类型为int型,当输入的ID的值为1 and 1 = 2时,会自动推导出ID的数据类型为string型,但JAVA或者C#这类强类型语言并没有这样的特性,int型强制转换成string型时,会抛出异常,注入失败,所以这类注入方式常见于弱类型语言中。
2.字串类型的注入
当输入参数为字串类型时,则为字串类型的输入,其与数字类型的注入的区别在于:注入时需要使用单引号来闭合。
测试方法如下:
http://www.xx.com/b.php?name=admin
http://www.xx.com/b.php?name=admin’and 1 = 1 -- 返回正常
其不同主要原因在于sql语句的差异,例,select *from user where name = ‘admin’ 则注入时需要单引号闭合,注入的数据应为admin’and 1 = 1 --,合并为sql则为select * from user where name = ‘admin’and 1 = 1 – ‘ 。
3.按提交方式不同的注入(get、post、cookie)
要想深入了解Cookie注入的成因,必须要了解ASP脚本中的request对象。它被用来获取客户端提交的数据,其一般的使用方法是:request.[集合名称](参数名称),但ASP中也可以省略集合名称,直接使用request(“参数名称”),当使用这样的方法时,ASP规定是按QueryString、Form、Cookies、ServerVariables的顺序来获取数据的,当我们使用request("参数名称")方式获取客户端提交的数据,并且没有对使用request.cookies("参数名称")方式提交的数据进行过滤时,Cookie注入就产生了。
测试方法如下:
1.先判断注入点是否存在,例http://www.xx.com/a.asp?id=128去掉id后是否能正常访问,若无法正常访问则id参数在数据传输中起作用
2.清空浏览器,在浏览器地址栏输“javascript:alert(document.cookie="id="+escape("xx"));”,回车后弹出对话框,使用原来的URL刷新页面,页面正常,说明是以request(“id”)获取数据。
3.测试用例:URL: “javascript:alert(document.cookie="id="+escape("and1 = 1"));”
URL: “javascript:alert(document.cookie="id="+escape("and1 = 2"));”
判断是否有注入点方法与其余sql注入一致。
4.HTTP注入
例:
X-Forwarded-For是HTTP头的一个字段。它被认为是客户端通过HTTP代理或者负载均衡器连接到web服务端获取源ip地址的一个标准。
Useragent是记录软件程序的客户端信息的HTTP头字段,他可以用来统计目标和违规协议。在HTTP头中应该包含它,这个字段的第一个空格前面是软件的产品名称,后面有一个可选的斜杠和版本号。
Referer是另外一个当应用程序没有过滤存储到数据库时,容易发生SQL注入的HTTP头。它是一个允许客户端指定的可选头部字段,通过它我们可以获取到提交请求URI的服务器情况。它允许服务器产生一系列的回退链接文档,像感兴趣的内容,日志等。它也允许跟踪那些坏链接以便维护。
5.获取信息的方式不同
(1)基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
(2)基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
(3)基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。