
En este caso de explotación, se tiene que el frontend interpreta el Transfer-Encoding y el backend Content-Length. Por lo que probaremos a descincronizar cada una de ellas.
- Frontend: En este caso, al interpretar el Transfer-Encoding, este se fijara en donde termina la solicitud.

Como se observa en la imagen, al final se encuentra un 0 el cual indica que hasta ahi es donde termina la solicitud, para luego pasársela al backend. En caso de que este 0 no exista el frontend dará un error por respuesta.

En la imagen anterior vemos que da un error debido a que no se le indica en donde debe terminar la solicitud.
- Backend: Para este caso el backend interpreta el Content-Length, por lo que para llegar a desincronizar, debemos pasarle unos bits mas en el Content-Length.
Como vemos, el Content-Length tiene una asignación de 19 bits, por lo que la solicitud se logra enviar correctamente.

POST / HTTP/1.1
Host: 0aa5003f03e77cfe82ce01af00d20081.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked
Content-Length: 20
9
test=test
0Pero al agregar un bit mas 20 al Content-Length, este genera un error del lado del backend.

POST / HTTP/1.1
Host: 0aa5003f03e77cfe82ce01af00d20081.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked
Content-Length: 20
9
test=test
0El error es generado debido a que al ser solo 19 bits, el backend interpreta que falta una debido a que se define en el Content-Length: 20.
LAB
Teniendo en cuenta lo anterior, podemos construir nuestra solicitud maliciosa.
- Para el primer size del Content-Length debemos considerar el contenido antes del segundo POST.

- Para el segundo que es el
sizeantes del segundo post, este debe considerar toda la data del segundo POST pero en hexadecimal.

- Para el el tamaño del segundo Content-Length este se debe considerar toda la data que se encuentra en el body.

Según lo explicado, ahora podremos asignar los valores adecuados.
- Para el primer content-length se tiene que son 19 bits.

- Par el siguiente
sizeque debe estar en hexadecimal.

- Para el el ultimo es solo la data antes del segundo POST.

Ahora intentaremos generar el 404 pero observamos que estas solicitudes no llegan a generar un 404.

Esto es debido a que es necesario un bit mas en el segundo Content-Length, pasando de 19 a 20.
POST / HTTP/1.1
Host: 0aa5003f03e77cfe82ce01af00d20081.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked
Content-Length: 4
36
POST /404 HTTP/1.1
Content-Length: 20
testing=test
0Al cambiar el Content-Length y enviamos dos veces la solicitud podemos generar un 404 error. El hecho de que tengamos que enviar nos veces la solicitud es debido a que la solicitud queda en un tipo de keep-alive o a la espera de otro solicitud, es por esto que en la siguiente solicitud muestra recien el 404.
