设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 运营中心 > 建站资源 > 策划 > 正文

WAF绕过的捷径与方法(2)

发布时间:2019-02-20 06:18 所属栏目:20 来源:qiaoy
导读:旁挂 WAF 一般不在会话链路以内,这意味着针对命令执行、Getshell 类的一条语句拿权限的攻击束手无策,满足业务性能,牺牲了较多的安全指标,做出这种妥协,一方面是业务/运维强势,可用性是相关部门较重的 KPI 指

旁挂 WAF 一般不在会话链路以内,这意味着针对命令执行、Getshell 类的一条语句拿权限的攻击束手无策,满足业务性能,牺牲了较多的安全指标,做出这种妥协,一方面是业务/运维强势,可用性是相关部门较重的 KPI 指标,另一方面可能是 WAF 系统开发和运营人力资源紧张,旁路离线分析提供了一定的缓和空间。

旁路 WAF 可以理解为一套离线分析系统,在各类配置和参数设置上很难同业务机器同步,这导致两者之间的耦合缺漏会更大,且旁路部署的后置阻断措施也极具多样性:IP 维度(4 层封禁、7 封封禁),session 维度(业务路由基于登陆的 cookies 等),给绕过也提供了一些方法,常见的绕过方法有:

  • 若系统是通过分光等方式旁挂,那针对前置串联 WAF 的 SSL 证书绕过方法在这里一样通用;
  • 通过攻击测试,很容易判断出旁路 WAF 同阻断组件的通联时间,获取海量且廉价的代理 IP,控制好单 IP 的测试存活时间,较低成本便可绕过;
  • 针对异常协议和中间件特效的攻击将在后续章节讲述,在旁挂 WAF 上均可实现绕过。

WAF 产品架构多样,除了串联和旁路外,基于业务特性还有各种各样的组合方式,之前所在公司基于业务架构单一的特点(系统、语言、中间件、数据库版本等相关信息全局一致),只需要关注固定版本的系统/应用漏洞情报,便可采用平日旁挂,漏洞爆发打开串联开关,漏洞批量修复后恢复旁挂的方式,在安全、效率、成本的博弈中发挥一点能动性。

2. 协议/中间件层面

HTTP 协议是一个渐进工程。

处于尚未完结的渐进工程中,强制的向下兼容,加之各类中间件对协议的解读和实现花样百出,导致整个协议骨干健壮清晰,细枝末节处却错综繁杂,越是复杂有异议的地方,越是存在安全隐患。

如《Web 之困》书中所描述,协议版本的升级,大多数精力都投入到了新花样和动人功能的开发上,缺陷的修补向来是不受人待见的,而协议侧的缺陷却往往是致命的。

DEFCON 24 会议上,regilero 有一篇名为《Hiding Wookiees In Http》的演讲,详细分析了 HTTP 协议中 Keepalives 和 Pipelines 组合使用上的缺漏,可导致会话注入和缓存投毒,在 WAF 绕过上也提供了一条路径。

Keepalives 虽然在 HTTP1.0 版本便可以使用,但并没有得到官方的确认,是浏览器爆炸发展阶段的民间战胜官方的胜利,HTTP1.1 版本后才开始作为默认参数参与到请求中,这条参数也属于新版本令人心动的崭新功能,引入的原因也是为了解决请求量级斗升,新建立连接带来的系统和网络损耗,功能大致如下所示:

(1) HTTP Pipeline:

(2) HTTP KeepAlive:

(3) HTTP 1.0:

功能设计本身的意图是多请求单连接,但‘多请求’这个场景又有多般演绎,比如下图这种请求,在 WAF 端的识别上,这属于一个请求,逻辑也是通过拆解 Key、value 的模式以 Body 内容读取第二个请求的内容,当然是属于异常的 Key-Value 结构,这样第二个包的内容便很容易绕过 WAF 策略直接进行攻击了。

(4) Keeplive 绕过:

关于 HTTP 协议特性的安全缺陷,还有一个值得说道的漏洞,2011 年 BlackHat 大会有一篇名为《Checkmate with Denial of Service》的演讲,阐述了一系列 DOS 漏洞,其中有部分是关于 HTTP 慢速攻击的分析,此后漫长的一段时间中,slowloris 都是诸多大型 DDOS 事件中的主角,关于慢速 DOS 的原理其实就是利用了 HTTP 的特性,通过 Keepalives 特性,发起大量请求,修改 Content-Length,Hold 住会话,在超时前定期发送小包,保持存活状态,使服务端线程数打满,又不得释放,服务便处于不可用状态,这种攻击在前文所述的针对中间件的 DOS 中不失为一种有效的攻击绕过方式。

除了协议特性以外,异变的 HTTP header 也有可能提供绕过 WAF 的捷径,2018 年的 AppSec 大会上,有一篇《hacker WAF bypass techniques》的演讲,通过以下几个方式进行 WAF 绕过:

  • 字符集编码;Content-Type 头中使用 charset 定义字符集的应用场景不只有在 responses 中,request 中同样可以使用,而变换字符编码集以后,基于规则引擎的 WAF 则彻底失控。
  • 内容类型格式;在特定中间件版本下 Key-value 可以通过文件上传的类型 multipart/form-data 进行提交,而 WAF 针对此类型侧检测一般是只针对上传漏洞,导致常规的 xss、sqli 便可以通过该方式进行 bypass,即使存在各通用类型的漏洞检测,也可通过 Fuzz 异变上传类型的格式,达到 WAF 无法识别,后端中间件可以解析的目的:

当然以上 Bypass 的路径并非通用的,很大情况与不同中间件对 HTTP 的理解和运用有关,详细中间件系统和版本测试情况可参见表格:

https://drive.google.com/file/d/0B5Tqp73kQStQU1diV1Y0dzd1QU0/view

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读