HTTP请求走私(HTTP Request Smuggling)是攻击者通过构造特殊格式的HTTP请求,利用前端(反向代理/CDN)和后端服务器对协议解析的差异,劫持其他用户请求或窃取数据的攻击手法。
举个例子,攻击者可以先发送一个正常的请求,然后在请求体中插入一些特殊的字符,让服务器以为这个请求已经结束了。接着,攻击者再插入一个新的请求,这个请求就会被服务器当作一个新的请求来处理。
核心逻辑:
-
前端服务器解析 -> 认为请求A结束。
-
后端服务器解析 -> 认为请求A未结束,继续处理后续内容。
CL.TE攻击(Content-Length vs Transfer-Encoding)
原理:前端用Content-Length,后端用Transfer-Encoding解析请求。
结果:后端将GET /admin视为独立请求,绕过前端权限校验。
TE.CL攻击(Transfer-Encoding vs Content-Length)
原理:前端用Transfer-Encoding,后端用Content-Length解析请求。
结果:后端解析出两个请求,第二个请求被篡改为POST /。
TE.TE攻击(混淆编码)
原理:构造非标准的Transfer-Encoding标头,触发前后端解析差异。
结果:不同服务器对多重编码处理不一致,导致请求分割。
1、攻击者可以绕过安全防护设备,访问到原本无法访问的资源。
2、篡改服务器的响应内容,甚至获取用户的敏感信息。
比如,攻击者可以利用请求走私,将恶意代码注入到服务器的响应中,当用户访问这个页面时,就会执行攻击者的代码,从而导致用户的信息泄露。
输入过滤:清洗恶意请求。
协议标准化:统一解析逻辑。
使用HTTP/2协议:HTTP/2协议对请求的解析更加严格,可以有效防止请求走私。
某云服务商漏洞(CVE-2020-9490)
漏洞点:Apache HTTP Server与Tomcat解析差异
后果:攻击者访问内部管理接口,删除核心数据导致服务中断12小时
某网站前端用CL,后端用TE解析请求,如何构造Payload访问/flag路径?
《网安60秒丨点击劫持》
原文始发于微信公众号(小白学安全):网安60秒丨HTTP请求走私
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论