0x00 前言
最近在做题的时候了解到了一个比较新奇的漏洞——HTTP请求走私漏洞,了解了一下这个漏洞的原理以及一些利用方法,特此抛砖引玉。由于刚刚接触这一漏洞,难免会出现一些谬误,还请斧正。
0x01 漏洞原理
简单来说,http走私漏洞的发生是由于在复杂的网络环境下,不同的服务器对RFC标准实现的方法和标准不同。也就是说,对于同一个http请求,不同的服务器采取不同的处理方法,会产生不同的结果。
在http1.0即以前版本的设计中,客户端每进行一次HTTP请求,都要跟服务器建立一个TCP链接。而这样的设计会导致服务器负载开销过大。所以在HTTP1.1版本中,增添了Keep-Alive这个特性。
- Keep-Alive : 新增一个请求头 Connection: Keep-Alive
,告诉服务器接受完本次http请求后不要关闭链接,对于后面的请求重用该链接,这样既可加快速度,又可节约服务器资源。
如今的许多网站都用上了CDN加速服务以提高用户的使用体验。通过在源站前面加一个反向代理服务器,用户在请求资源时就可以直接在代理服务器中获取到。而一般情况下这样的代理服务器和后端的服务器会直接重用TCP链接。当我们向代理服务器发送一个构造过的HTTP请求时,代理服务器可能会认为是一个正常的HTTP请求并传给源站服务器,但是源站服务器警告过解析处理后发现只有一部分为正常的请求,剩下的部分即为走私的请求,当该部分对其他正常用户的请求造成影响时,就造成了HTTP走私攻击。