这个参考文章是:https://portswigger.net/web-security/request-smuggling
作者通过这一个漏洞,在hackone平台上挖了很多应用的漏洞,获得了几万美元的奖励,然后还在blackhat上演讲过,可以搜下他的ppt(us-19-Kettle-HTTP-Desync-Attacks-Smashing-Into-The-Cell-Next-Door)
),攻击思路比较新奇,在测试中我用了,发现有些应用也存在此漏洞;这里我只简单介绍下,具体去看ppt;
漏洞形成的原因:
前端服务器(cdn)和后端服务器接收数据不同步,引起对客户端传入的数据理解不一致,从而导致漏洞;为什么会不一致呢?
主要是处理Content-Length和Transfer-Encoding不一致,原则上同时使用两者时,Content-Length是无效的,当单个服务器时,没有任何问题,但当多个服务器时,理解的数据不一致时,就会出现有些服务器认为Content-Length的长度有效,有些以Transfer-Encoding有效,这样超出的长度就会拼接到下一次请求,从而导致漏洞。
下面用实例说明下
1. 经典攻击方法重复Content-Length
通过Content-Length属性控制body的长度,前端看到的长度为6,那么POST请求没问题,但后端看到是长度为5,那么G这个字符会拼接到下一个HTTP请求上去,导致返回Unknow method GPOST
屏幕快照 2019-08-31 下午10.29.17.png2. Transfer-Encoding: chunked攻击方法
屏幕快照 2019-08-31 下午10.34.47.png3.其它攻击方式
屏幕快照 2019-08-31 下午10.43.32.png修复方案:
1、前端服务器对前段输入规范化
2、前端服务器使用HTTP2.0
3、后端服务器丢弃非正常请求
网友评论