đ€HTTP Smuggling
Sites
Basic
Les attaques de contrebande de requĂȘtes impliquent de placer Ă la fois l'en-tĂȘte Content-Length et l'en-tĂȘte Transfer-Encoding dans une seule requĂȘte HTTP et de les manipuler de sorte que les serveurs front-end et back-end traitent la requĂȘte diffĂ©remment. La maniĂšre exacte dont cela se fait dĂ©pend du comportement des deux serveurs :
CL.TE : le serveur front-end utilise l'en-tĂȘte
Content-Lengthet le serveur back-end utilise l'en-tĂȘteTransfer-Encoding.TE.CL : le serveur front-end utilise l'en-tĂȘte
Transfer-Encodinget le serveur back-end utilise l'en-tĂȘteContent-Length.TE.TE : les serveurs front-end et back-end prennent tous deux en charge l'en-tĂȘte
Transfer-Encoding, mais l'un des serveurs peut ĂȘtre incitĂ© Ă ne pas le traiter en masquant l'en-tĂȘte d'une maniĂšre ou d'une autre.
CL.TE
Dans ce cas, le serveur front-end utilise l'en-tĂȘte Content-Length et le back-end l'en-tĂȘte Transfer-Encoding.
Il est donc possible d'exploiter la cible comme ceci:
POST / HTTP/1.1
Host: target.com
Content-Length: 13
Transfer-Encoding: chunked
0
SMUGGLEDLe serveur front-end traite l'en-tĂȘte Content-Length et dĂ©termine que le corps de la requĂȘte a une longueur de 13 octets, jusqu'Ă la fin de SMUGGLED. Cette demande est transmise au serveur principal.
Le serveur principal traite l'en-tĂȘte Transfer-Encoding et traite donc le corps du message comme utilisant un codage fragmentĂ©. Il traite le premier bloc, qui est dĂ©clarĂ© ĂȘtre de longueur nulle, et est donc traitĂ© comme mettant fin Ă la demande. Les octets suivants, SMUGGLED, ne sont pas traitĂ©s et le serveur principal les traitera comme Ă©tant le dĂ©but de la requĂȘte suivante dans la sĂ©quence.
TE.CL
Dans ce cas, le serveur front-end utilise l'en-tĂȘte Transfer-Encoding et le back-end l'en-tĂȘte Content-Length.
Il est donc possible d'exploiter la cible comme ceci:
Ici, le serveur front-end traite l'en-tĂȘte Transfer-Encoding et traite ainsi le corps du message comme utilisant un codage fragmentĂ©. Il traite le premier bloc, qui est censĂ© avoir une longueur de 8 octets, jusqu'au dĂ©but de la ligne suivant SMUGGLED. Il traite le deuxiĂšme bloc, qui est dĂ©clarĂ© ĂȘtre de longueur nulle, et est donc traitĂ© comme mettant fin Ă la demande. Cette demande est transmise au serveur back-end.
Le serveur back-end traite l'en-tĂȘte Content-Length et dĂ©termine que le corps de la requĂȘte a une longueur de 3 octets, jusqu'au dĂ©but de la ligne suivant 8. Les octets suivants, commençant par SMUGGLED, ne sont pas traitĂ©s et le serveur principal les traitera comme Ă©tant le dĂ©but de la requĂȘte suivante dans la sĂ©quence
TE.TE
Pour ce dernier cas, pour dĂ©couvrir une vulnĂ©rabilitĂ© TE.TE, il est nĂ©cessaire de trouver une variation de l' en-tĂȘte Transfer-Encoding telle qu'un seul des serveurs front-end ou back-end la traite, tandis que l'autre serveur l'ignore.
Selon que c'est le serveur front-end ou le serveur back-end qui peut ĂȘtre amenĂ© Ă ne pas traiter l'en-tĂȘte Transfer-EncodingobfusquĂ©, la suite de l'attaque prendra la mĂȘme forme que pour les vulnĂ©rabilitĂ©s CL.TE ou TE.CL dĂ©jĂ dĂ©crites.
Il existe des façons potentiellement infinies d'obfusquer l'en-tĂȘte Transfer-Encoding.
Quelques exemples ci-dessous:
Mis Ă jour
Ce contenu vous a-t-il été utile�