今天看啥  ›  专栏  ›  系统安全运维

实战分享 | Post文件上传WAF Bypass总结

系统安全运维  · 公众号  ·  · 2024-08-05 09:48
    

主要观点总结

本文介绍了针对POST参数的 multipart/form-data 的WAF Bypass技术。

关键观点总结

关键观点1: multipart/form-data 的用途和背景

为了解决上传文件场景下文件内容较大且内置字符不可控的问题,RFC1867为HTTP协议添加了此功能。常见的浏览器都支持此规范。

关键观点2: WAF与PHP在处理multipart/form-data时的差异

Nginx不解析multipart/form-data的body部分,由PHP来解析,导致WAF获取的内容可能与后端的PHP不一致。

关键观点3: 绕过WAF的几种方法

通过添加特定字符或构造特定的Content-Disposition来绕过WAF的检测。

关键观点4: 文件扩展名绕过的思路和方法

介绍在WAF解析到filename参数时,如何通过协议和后端解析的层面绕过文件扩展名的检测。


文章预览

本文介绍的思路主要围绕针对于 POST 参数的  multipart/form-data  进行讨论。 multipart/form-data  是为了解决上传文件场景下文件内容较大且内置字符不可控的问题。在最初的 http 协议中,并没有上传文件方面的功能。RFC1867 为 HTTP 协议添加了这个能力。常见的浏览器都已经支持。按照此规范将用户指定的文件发送到服务器,可以按照此规范解析出用户发送来的文件。 HTTP 传输的内容通过 boundary 进行了分割,以  --boundary  开始,并以  --boundary--  结尾。 multipart/form-data 格式也是可以传递 POST 参数的。对于 Nginx + PHP 的架构,Nginx 实际上是不负责解析 multipart/form-data 的 body 部分的,而是交由 PHP 来解析,因此 WAF 所获取的内容就很有可能与后端的 PHP 发生不一致。 通过一个简单的脚本来验证上面的说法。 echo file_get_contents ("php://input"); echo '$_POST Content\n'; echo ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览