使用HTTP头去绕过WAF

0x00 前言

    现在,各个安全厂商的WAF越来越多了,虽然它们的WAF卖得挺贵,但是买的人也不少(运营商、互联网企业、政府部门、传统的产业)。因此我们也是经常碰到那么多WAF啊,绕过WAF技术千姿百态,各种天花乱坠的的招数。有些招数对于V WAF绕得过,有些招数对于N WAF可以绕过,还有的招数对于哪个WAF都绕不过(自认倒霉吧,估计管理设置WAF策略的兄弟妹子也是一个高手,要不然就是他们请了大牛)。下面介绍一种绕过WAF的策略。

0x01 原因分析

    Web应用防火墙(WAF)是Web应用程序深度防御模型的一部分。它虽然不是安全代码的替代品,但却提供了过滤恶意输入的伟大选择。这里有一个实际的评估,其中部分企业部署的WAF是很容易被绕过,毕竟真正会部署WAF策略的运维人员也很少,基本上还是得靠安全厂商的工程师来运维。极差的设计或者错误的配置都会导致该WAF很容易被绕过。在应用程序生产部署时候,测试应用程序的安全性是很重要的。虽然这个应用程序可能在开发或质量保证进行了评估。但是当你们在部署它的时候,你可能会引入由于配置问题的新的攻击向量。例如我们虚拟银行Heisenberg Bank.就是这种情况。

    当执行起这个安全评估时,我快速地模糊测试了我平时会考虑到的所有应用程序终端点。截图如下:


    上图是一个被WAF阻挡后,返回的页面信息。经过一些调查后,我发现了本地机器是因为触发了一些规则而被WAF拦截的,这些规则如下:

快速连续地使用POST请求表格
快速连续地使用GET去请求大多数的页面
确实CSRF 标志
恶意字符

    每当上面的任何一个条件得到满足后,WAF会使用页面错误代码来阻止攻击者进行访问,阻挡时间为5分钟。既然这样,那么我们应该如何去进行下一步昵?使用编码载荷来绕过WAF正则匹配式的常规方法近来是行不通的,毕竟WAF已经走过漫长的岁月了。不过,我们可以声东击西。

    在等待被WAF解开封锁的期间,我决定做一些关于WAF的研究。在浏览几个WAF实施指南时,我发现了一个论坛曾提及到,使用缓存服务/设备去整合一个WAF。它的描述类似于用户很费劲地站立起来,好像清漆缠身或在不同的主机上运行的代理/加速器装置。然后该WAF挡住该服务器。当然,供应商毫不犹豫地回答道,你可以基于IP的设备部署白名单,让这些IP不被WAF检查。

    在这一点上,一切都还是很好。接下来的正是Heisenberg Bank 及其WAF 表现不佳的地方。通过更多阅读,我发现,WAF并不是在传入的请求做了一个真正的查询(类似于REMOTE_ADDR,或者其他类似的东西),WAF是在寻找一个*定制* HTTP标头。在用户或其他服务器连接到WAF的情况下,它的工作流程如下图所示:




    由图我们得知,WAF并非真正地检查请求的HTTP头。而具体的实现是检查头部的X始发-IP请求。那么,哪个设备应该被WAF配置为信任昵?在这种情况下,默认是WAF本身。

0x02 实际操作

    因为我控制所有被发送浏览器的HTTP请求,我可以轻松地添加这样的HTTP头去愚弄WAF认为我(攻击者)是WAF它,让我完全绕过它的保护功能:


经过进一步研究,这些HTTP头有可能被WAF定义为白名单(而不是做一个适当的查找):

X-forwarded-for    #把这个定义为缓存服务器
X-remote-IP           #把这个定义为代理服务器,或者同网段IP
X-originating-IP    #把这个定义为服务器主机的ip或者127.0.01
x-remote-addr      #把这定义为内部IP,例如172段,或者192段,或者10段

我们可以通过各种信息侦察和调查发现,有些IP地址是处于WAF的白名单中的。 如下图所示:

    搞清楚绕过后,其余的评估取得了许多其他的漏洞和加快了速度,这得益于我可以绕过WAF。这就和拦截内联代理头并且把头部添加到所有的请求一样简单。
    一个简单的解决方案是让您的前端代理剥离所有带非标准的HTTP头,但那么你还在玩猫捉老鼠的黑名单游戏。更妙的是,咨询你的供应商WAF,看看什么样的头可以被接受,默认被启用。然后寻找一个不依赖于攻击者可以伪造信息的解决方案。
    一般来说,你也可以使用Gethead来审核您的网站的HTTP标头的安全性。Gethead是我们的动态测试团队的领导者Nathan LaFollette (@httphacker).的一个项目。该博客的一个真棒追随者也做了一个burpsuite套件的扩展,将这些头添加到您的所有请求

burpsuite WAF绕过插件下载地址 github地址:https://github.com/codewatchorg/bypasswaf

或者在burp主界面 extender -->>BApp Store-->>左侧-->>下拉找到 BypassWAF

0x03 burpsuite插件bypasswaf

1  添加头部到所有Burp请求来绕过某些WAF产品。这个扩展自动地将下列头部添加到所有请求去。

 X-Originating-IP: 127.0.0.1
 X-Forwarded-For: 127.0.0.1
 X-Remote-IP: 127.0.0.1
 X-Remote-Addr: 127.0.0.1

2 用法与步骤:
添加该插件到burp

在burp中创建一个会话处理规则以此来激活该插件。

修改范围以包括可应用的工具和URLs

开始测试

3使用截图


参考文献

http://www.securityaegis.com/bypassing-web-application-firewalls-using-http-headers/

https://github.com/codewatchorg/bypasswaf/blob/master/README.md


  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
绕过WAF使用sqlmapapi,有几种方法可以尝试。首先,可以利用MySQL的版本号注释功能绕过WAF,这是一种常见的绕过方法。此外,还可以使用一些其他技巧,比如使用0xA0代替空格、利用特殊用法如\N和.e浮点绕过WAF,以及使用&&代替and等关键字和大括号注释来绕过WAF。这些方法可以绕过一些WAF对SQL注入的过滤规则。 另外,还可以尝试利用HTTP协议的不同版本进行粘包来绕过某些WAF,因为一些WAF在解析数据包时可能会出现问题。通过发送不同版本协议的粘包,可以绕过WAF的检测。 此外,还可以利用URL编码、charset编码、MIME编码等进行绕过WAF。这些编码技巧可以混淆注入语句,使其绕过WAF的过滤规则。 如果你想了解更多关于绕过WAF的方法,可以参考sqlmap的temper插件。该插件提供了更多关于数据库的绕过技巧,可以帮助你绕过WAF的防护机制。你可以在sqlmap的GitHub地址上找到这个插件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [常见的WAF绕过方法](https://blog.csdn.net/wutianxu123/article/details/104260945)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值