加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 服务器 > 安全 > 正文

只了解如何通过 HTTP WAF bypass 的肤浅知识

发布时间:2023-10-11 11:04:11 所属栏目:安全 来源:
导读:关于WAF的问题?它是我们日常攻防演练必会遇见的,在IOS七层模型中,WAF分为网络层、应用层的,当然还有云 WAF(CDN+WAF)这新型类场景的。不同环境下我们绕过WAF的思路也是有所区别的,例如,对于传统的网络层 WAF,

关于WAF的问题?

它是我们日常攻防演练必会遇见的,在IOS七层模型中,WAF分为网络层、应用层的,当然还有云 WAF(CDN+WAF)这新型类场景的。不同环境下我们绕过WAF的思路也是有所区别的,例如,对于传统的网络层 WAF,采用chunked编码(即对内容进行所谓的"加密")即可绕过,下次遇见的时候,我们仍然尝试在网络层这一类型上进行尝试和探索。

存在于应用层的WAF,它们的处理引擎是经过前端到达Apache(或者是Nginx)完成 HTTP协议初步解析后,再转交给引擎处理的,这个时候网络层的绕过技术是无效的。这就需要我们去研究:对于一个 HTTP 请求,Nginx 解析了什么内容?交给后面的 PHP、ASP 又解析了什么内容?(探究到这个深度,就需要有良好的编程基础和协议基础,否则,后面及其吃力)。

关于Encoding,整个名称应该为Accept-Encoding;它在http协议中的作用是可以对内容(也就是body部分)进行编码。Accept-Encoding: gzip:表示它可以采用gzip这样的编码,从而达到压缩的目的。这样的话关于网络层的WAF是可以被绕过的,当然我们也可以使用其他的编码把内容搅乱或加密,以此来防止未授权的第三方看到文档的内容。当服务端接收到请求,并且从Header里拿到编码标识时,就可以选择其中一种方式来进行编码压缩,然后返给客户端。

浏览器发给服务器,声明浏览器(客户端)支持的编码类型解释

Accept-Encoding设置在请求头当中,会告诉服务器,我可以接受哪种编码压缩

Content-Encoding设置在响应头中,会告诉客户端,我用的是哪种编码压缩

​小提示:Encoding​的大概意思是:决定文件接收方将以什么形式、什么编码读取这个文件,指定服务器响应的 HTTP 内容类型;这两个header头都会影响服务器对于数据内容的传输格式类型(压缩算法);文章:参考链接!

小提示:Accept-Encoding: deflate​但发现这种方法已经过时了,我们可以换成Accept-Encoding: gzip,发现上传成功。

由于该协议对 PHP 对解析存在缺陷、使得如果一行有多个 filename 字段值,则PHP构造的Web Server会取最后的filename值进行解析。Web Server最终可以得到的文件名是1.php,但是某些WAF只会判新第一个filename的值,因此 WAF 对上传的文件的过滤检测功能会被黑客绕过,并且这里的form-data是可有可无的类型,就是去掉它也不会影响Web Server获取filename的名称(如下所示):

Content-Disposition: form-data; name="file1"; filename="1.txt";filename="1.php";

利用特殊编码对payload进行转义,从而绕过WAF对特殊关键词的过滤。该方法的思路主要围绕: multipart/form-data进行,主要针对于 POST 参数的,对于需要在GET参数位置触发的恶意漏洞影响不大。说起multipart/form-data 的作用,我们知道HTTP 协议POST请求,除了常规的 application/x-www-form-urlencoded 以外,还有 multipart/form-data 这种形式,就是为了解决上传文件场景的问题下文件内容较大且内置字符不可控的问题而准备的。multipart/form-data 格式也是可以传递POST参数的。对于Nginx+PHP的架构,Nginx 实际上是不负责解析 multipart/form-data 的 body 部分的,而是交由 PHP 来解析,因此 WAF 所获取的内容就很有可能与后端的 PHP 发生不一致。

Bypass WAF 的核心思想在于,一些 WAF 产品处于降低误报考虑,对用户上传文件的内容不做匹配,直接放行。事实上,这些内容在绝大多数场景也无法引起攻击。但关键问题在于,WAF 能否准确有效识别出哪些内容是传给$POST 数组的,哪些传给$FILES 数组?如果不能,那我们是否就可以想办法让 WAF 以为我们是在上传文件,而实际上却是在 POST一个参数,这个参数可以是命令注入、SQL 注入、SSRF 等任意的一种攻击,这样就实现了通用 WAF Bypass。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章