注:转载请注明出自:https://blog.csdn.net/qq_36711453/article/details/78734503
漏洞成因:
SQL注入主要存在于动态网站的web应用中,攻击者将恶意的sql语句插入到表单的输入域或网页请求的字符串中,提交给web服务器,如果应用程序没有对用户的输入进行检查和过滤,则会执行恶意的SQL语句,即SQL注入产生。
简而言之:SQL注入由于应用程序没有对用户的输入进行安全性检查和过滤造成的。
SQL注入攻击一般流程:
(1)探测SQL注入点:常见方法在参数传递的地方输入参数,并添加”“‘、”and 1=1“、”and 1=2“、"or 1 = 1"、"or 1=2", 若浏览器返回错误信息,则说明未对输入做处理;若”and 1=2 “和"and 1=1"结果不同,则说明对输入进行了处理。
(2)判断数据库类型:常见的两种数据库SQL Server 和 Access。可以利用系统变量、系统表、等区分
(3)Access 数据库;探测数据库表名、列名、字段值来判断数据库信息,了解数据库模式,采用方法是不合法的查询得到结果。
(4)SQL Server 数据库:首先判断是否支持多句查询、子查询,是否存在数据库用户并判断其权限。
(5)提升权限:确定数据库信息并获得相关权限后,进行攻击。
攻击方式:
(1)重言式攻击:攻击者在条件语句中注入代码,是的条件语句的结果始终为真,攻击后果取决于得到的结果在程序中的作用。
(2)非法或者逻辑错误查询攻击:该攻击意图是识别可攻击的参数、分析数据库的关系结构、提取数据等。
(3)联合查询:构造Union查询,将注入的查询语句插入到正常的SQL语句中。
(4)附带查询攻击:该攻击的意图是提取、增加和修改数据库中的数据,实施拒绝服务攻击和远程命令执行。
(5)利用存储过程攻击:存储过程也可能存在安全问题,攻击者利用存储过程对数据库进行攻击。目的扩大权限,实施服务器拒绝服务攻击和远程命令执行。
(6)推断攻击:意图是识别可注入的参数,提取数据,识别数据库策略。
(7)替换编码攻击:为了躲避编码安全性检测系统的检测。
检测步骤:
(1)获取被检测网站的网页
采用网络爬虫工具,自动获取被测服务器上的网页,并进行相关处理。例如:去除广告、导航、重复等干扰信息,分析网页Frame帧结构等
(2)提取网页中的注入点
根据网页的HTML源码,提取"<form>"、"<a>"等元素的属性及子元素,进行规范化处理,滤除重复后加入URL列表
(3)根据注入点构建测试用例
使用编程语言和数据库中的注释符、连接符、界定符、等素材构件测试用例,建立基于字符串、数值、注释符等内容的测试用例
(4)分析WEB服务器的响应信息
通过注入点向服务器提交测试用例后,对服务器的响应信息进行分析。包括对错误信息、异常信息、异常内容与原始内容、响应延时等分析。
(5)建立SQL注入漏洞检测的判定规则
注入测试用例后引起的数据库出错,响应信息中包含了出错类型及代码信息 ;注入测试后服务器运行正常,响应信息与原始信息的相同;服务器的响应时间受影响,和原始响应延时不同; 注入无效请求后,服务器响应总是处在某个固定状态,则可能存在盲注的可能; 若疑似存在漏洞,则待详细分析。
SQL注入防范:
(1)参数化语句:用过将查询语句参数化,来防范SQL注入
(2)输入验证:通过白名单和黑名单的验证对用户的输入进行验证
(3)输出编码:对程序各个模块之间或者各个部分之间传递的数据进行编码处理
(4)规范化:拒绝所有不符合规范的输入和对输入编码进行解码分析是常见的两种规范化处理方法
(5)避免SQL注入漏洞的程序设计:使用存储过程、处理敏感数据等
(6) 安全的编码规范:根据OWASP提供的安全编码规范进行相关编码