关于nginx与协议走私

协议走私实战参考:https://portswigger.net/web-security/request-smuggling/exploiting/lab-bypass-front-end-controls-cl-te

协议走私回顾:笔者之前曾做过简单尝试。后发现python的一些框架都对其做了防御性代码。

那Nginx是否有相关代码进行预防呢,笔者结合gpt对源码进行了一些分析。
结论是nginx是有预防性代码的。对于ct和te同时存在时,只会处理te;同时存在多个ct或者te时,会直接返回400错误。

下面时结合nginx源码的一些分析

  1. 处理CT和TE同时存在的情况
    Nginx官方从stable-1.4开始就已经对请求头中的协议走私问题进行了代码防御
    核心源码均在src/http/ngx_http_request.c 文件中
image.png

和stable-1.2进行对比

image.png

通过官方changelog可以观察到从2013年4月份开始发布的版本就有针对协议走私的防御性代码的。

image.png

以Stable-1.8核心代码举例来阅读下这段防御性代码的意思

image.png
  1. 处理同时存在多个CT或者TE的情况从Stable-0.5版本开始,Nginx源码就针对某些特别的请求头参数进行了唯一性校验。
image.png

从stable-1.18开始,对CT和TE都做了唯一性校验

image.png

关于这段函数的解释


image.png
image.png

也就是说针对这几个请求头可能存在的参数,不允许重复。否则直接返回400协议违背。我们做几个简单的测试。


image.png

以IF-NONE-MATCH为例,一个的情况下是正常的。


image.png

请求头再加一个相同的参数就报协议违背错误。


image.png

用IF-RANGE测试也是相同的情况。


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容