002-CL-CL

### CL-CL

假设中间的代理服务器和后端的源站服务器在收到类似的请求时,都不会返回400错误,但是中间代理服务器按照第一个`Content-Length`的值对请求进行处理,而后端服务器按照第二个`Content-Length`的值进行处理。这样有可能引发请求走私。

“`bash
POST / HTTP/1.1\r\n
Host: example.com\r\n
Content-Length: 8\r\n
Content-Length: 7\r\n

12345\r\n
a

“`

前端代理服务器获取的数据包长度为 8,将以上数据包完整转发至后端服务器,但后端服务器仅接收长度为7的数据包。因此读取前7个字符后,后端服务器认为本次请求已经读取完毕,然后返回响应。

但此时缓冲区仍留下一个a,对于后端服务器来讲,这个a是下一个请求的一部分,但没传输完毕。如果此时传来一个请求

“`
GET / HTTP/1.1
HOST: test.com

“`

那么前端服务器和后端服务器将重用TCP连接,使后端实际接收的请求为:

“`
aGET / HTTP/1.1
HOST: test.com

“`

从而实现了一次HTTP请求攻击。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容