WAF的SQL注入绕过手段和防御
安华金和 思成
一. 关于SQL注入
    SQL注入是一种常见的入侵WEB应用的手法。SQL注入是运用应用系统的编程漏洞和SQL语言的语法特性,改变原始的SQL语句执行逻辑而产生的。
    袭击者向Web应用发送精心构造的输入数据,这些输入中的一部分被解释成SQL指令,改变了本来的正常SQL执行逻辑,执行了袭击者发出的SQL命令,最终使袭击者获取Web应用的管理员权限或者下载了Web应用存到数据库中的敏感信息。
二. SQL注入如何实现
    为了对本文进行更好的讲解,下面简朴地对SQL注入的原理进行示例性说明。
如下图是某网站的登录界面。
    登陆界面中输入用户名:admin 密码admin1234。在Web应用程序后台会把输入和程序混合变成SQL命令去访问数据库。最终Web应用发给后台数据的SQL命令是:
Select * from users where username = 'admin' and Password = 'admin1234'(这个形式)
这个SQL查询规定数据库检查“用户表”中的每一行,提取出每条username列为admin和Password列值为admin1234的记录。假如数据库中WHERE后的条件满足。应用程序将为该用户建立一个通过验证的会话。(Web应用登陆成功)
    上面是正常登陆Web应用的过程。假如由于编程的不严谨,用户名或密码输入处存在SQL注入点,袭击者可以运用SQL注入绕过Web应用的登陆访问控制。例如袭击者在用户名处输入admin'-- 密码处可以输入任意值均可通过。
    由于,后台实际的SQL语句将演变成:
select * from users where username ='admin'--' and password ='123dq
    在SQL Server中“-”等于注释,由于加入了“—”上面的语句等价于
select * from users where username= 'admin'
也就是说只要有用户名为admin。袭击者就可以直接用admin登入到应用系统中。
    当然SQL注入的用法远不止这一种,本文不做详述。
三. WAF如何防御SQL注入
    WAF简朴说,就是解析HTTP请求,检查HTTP中参数是否存在袭击行为;若存在,则触发袭击行为。
    重要有两种主流的的方式绕阔WAF,一种是运用WAF也许存在的HTTP协议解析缺陷,另一种就是运用包装后的SQL命令,使WAF无法辨认SQL注入。
spring framework高危漏洞
    一般通过HTTP协议袭击的方式,有四种绕过WAF入侵的手法:
三.1断包绕过
    某些初期版本的WAF不具有把TCP断包组合成完整TCP包的能力。一旦袭击者发送的HTTP请求包是断包,WAF将无法正常解决不完整的HTTP请求包。假如这些请求包中具有SQL注入语句就可以直接绕过WAF,进入web应用组成SQL注入语句。
三.2缓冲区溢出
    现在的WAF产品基本都具有了对HTTP协议中参数的解析能力。但是袭击者假如故旨在参数中写入过长的占位内容+shellcode,这时假如WAF产品自身对参数检查不够严格的话,则有也许导致缓冲区溢出的发生。例如改变id=1的输入为id=1 and (1000个以上)+shellcode的模式。袭击者也许会运用这种入侵手段,绕过WAF进而入侵到应用系统内部。
三.3协议不兼容
    尚有一种方式就是向WEB服务器发送畸形的,而非RFC2616标准的HTTP请求,这时WEB服务器也许出于兼容的目的,会尽也许解析畸形的HTTP请求,这种情况下假如WAF和WEB兼容的方式不一致则也许出现绕过现象。例如一个请求没有协议字段、没有HOST字段,apache默认会把HTTP协议作为0.9版本解决,HOST默认使用apache自身的servername。WAF出于兼容的目的,这时候未必能和web服务器上的server采用相同的策略。由于不同版本的HTTP有语法差异,这种情况就有也许绕过WAF进入系统内部。
三.4参数污染
    参数污染简朴说就是同名参数写多个,WAF往往只检查第一个参数。但服务器具体用哪个参数,策略是不相同的。
例如:xxx. php?id=0&id=7%20union%20select%201,2,3,current_user是个明显的SQL注入。WAF解析id=0 这一看就是合法的,但PHP解析得到的确是 id=7 union select .....却是个注入语句。不同的server有不同的解析方式,这个时候WAF很有也许被绕过。
    通过SQL命令包装的方式绕过WAF,是运用WAF在进行SQL命令的防御的核心技术正则匹配的缺陷。这种技术,一般通过4种匹配事变的方式进行方式::
    1、 辨认SQL语句的关键保存字,如select from,union select,drop table,into outfile等。
    2、辨认DBMS的内建函数,如version(),load_file(),sleep(),benchmark()等
    3、辨认DBMS内建变量,如@@version等。
    4、辨认数据库所辨认的内联注释,如/*!union*/ /*!select*/或/*!50000union*/等
    针对以上的防御手段,黑客们总结出了一些绕过WAF的袭击手段,比如:
    (1)大小写绕过
    最简朴基础的一种绕过方式比如关键字SELECT初期由于正则匹配规则不健全SElect 是无法分辨出是SELECT 的导致WAF绕过,而后面的数据库则会对的解析成SELECT。
    (2)编码绕过
    在大小写绕过的基础上开始出现编码绕过。重要有三种:URL编码、十六进制编码、Unicode编码。在浏览器中输入URL会进行一次URL编码,黑客会通过多次编码来进行WAF绕过。例如:Id.php?id=1%2520union/**/select ,数据库得到的Id.php?id=1 union/**/select。假如只解码一次得到的是Id.php?id=1%20union/**/select,就有也许绕过WAF入侵数据库。这个问题可以采用多次循环解码来解决。其中Unicode编码种类很多,假如只是基于黑名单过滤,无法解决所有情况,从而也可以实现WAF的绕过。其中UTF-32编码曾经实现过对GOOGLE的绕过。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。