SQL全称是Structured Query Language,是一种结构化的查询语言,用于与数据库进行交互并能够被数据库解析。SQL注入攻击是一种常见的注入攻击类型。攻击方式在用户与程序进行交互时发生的。如在表单输入、搜索框输入功能中插入SQL命令,然后发送到服务端。服务端对数据进行了解析执行,并执行了一些非预期的操作。
SQL注入 危害
1、从数据库中读取敏感数据;
2、篡改数据库数据;
3、对数据库执行管理权限操作;
4、执行系统命令导致程序危害发生;
SQL漏洞被列为高危漏洞
产生条件
1、SQL语句中包含了不被信任的数据,如用户输入信息等;
2、动态构建的SQL语句,如将搜索条件拼接到语句中;
注入影响
1、保密性:可能会导致敏感新泄露,如管理员账户、会员信息等;
2、身份验证:如果使用了较差的SQL命令来进行判断用户信息正确性。可能导致在不清楚用户密码的情况下,直接以用户身份进行登录系统;
3、授权:如果将某平台的授权信息保存在数据库中,可能被非法更改,导致经济损失情况的发生;
4、完整性:如果敏感的信息被非法读取,可能导致此信息所关联的信息被非法更改、破坏、删除,影响了此条数据的完整性;
代码命令 目前,在服务器上面运行的大部分程序都是以数据库为驱动,这样进一步的增加了SQL注入漏洞的产生,因此,SQL注入漏洞非常关键,在开发过程中要严格把控。
注入分类
1、参数类型分类
数字型注入:输入参数为整型时,如Id、年龄和页码等;
字符型注入:输入参数为字符串型时,如姓名、职业、住址等;
两者最大的区别:字符型注入一般要使用单引号进行闭合,而数字型注入则不需要;
2、注入位置分类
GET注入:注入字符在URL参数中;
POST注入:注入字段在POSt提交的数据中;
Cookie注入:注入字段在Cookie数据中,网站使用通用的防注入程序,会对GET、POST提交的数据进行过滤,却往往遗漏Cookie中的数据进行过滤。
其他注入:HTTP请求的其他内容触发的SQL注入漏洞;
代码漏洞 3、结果反馈分类
盲注入:盲注入不会展现任何数据库报错内容,它是依据构造真或假的问题对数据库进行“提问”,注入方式主要有两种:基于布尔值与基于时间。
3.1、基于布尔值
如在MySQL中判断数据名长度的输入为1' and length(database()) = 10 #,通过相应的正确与否判断数据名的长度是否为10,猜测数据库中数据的具体内容时,可以借助书本上SUBSTR、LIMIT、ASCII等一些特殊的命令及函数进行猜测;
3.2、基于时间
基于时间的SQL盲注入方式通常是在SQL语句中添加延时函数,依据相应时间来判断是否存在SQL注入,常用的延时函数或指令有sleep、repeat等。
总结:盲注入提交SQL命令较多,通常通过手工方式无法完成,借用工具如SQLMAP。
非盲注入(正常SQL注入):执行注入SQL语句将敏感信息展示出来,并进行进一步的操作。
4、其他类型
延时注入:使用延时函数方式;
搜索注入:注入点在搜索框中;
编码注入:将输入的字符串进行编码,如base64编码;
堆查询注入:同时执行多条语句;
联合查询注入:使用union操作码合并两条或多条SQL语句;
多阶注入:由多个HTTP请求响应共同完成的注入;