¿Cómo omitir la ubicación de respuesta para obtener contenido XSS?

1

En algunos pasos básicos:

  1. Solicitud POST que contiene una foto con varias partes / datos de formulario.
  2. Se encontró que HTTP / 1.1 302 responde con un redireccionamiento al formulario
  3. Redirigir al formulario inicial.

En el caso 1, podemos controlar el nombre de archivo, lo que nos permite utilizar cualquier tipo de carga útil que queramos.

En el caso 2, podemos ver en respuesta la carga útil de XSS, pero no hay ejecución (deje que comience la diversión) debido al encabezado de ubicación.

En el caso 3, vemos el nombre del archivo que es la respuesta codificada de laravael ... = > no XSS.

Explicado:

Paso 1:

POST /upload/file HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Referer: https://example.com/upload
Content-Type: multipart/form-data; boundary=---------------------------172863706614177227892012498540
Content-Length: 8331
Cookie: laravel_session=not_your_problem
Connection: close
Upgrade-Insecure-Requests: 1

-----------------------------172863706614177227892012498540
Content-Disposition: form-data; name="doc_1"; filename="<!DOCTYPE html><script>alert('XSS'); .png"
Content-Type: image/png

Paso 2:

HTTP/1.1 302 Found
Server: nginx/1.12.2
Content-Type: text/html; charset=UTF-8
Connection: close
Cache-Control: no-cache
Location: https://example.com/upload
Date: Tue, 08 May 2018 12:49:50 GMT
Set-Cookie: laravel_session=laravel_session=not_your_problem; path=/
Strict-Transport-Security: max-age=31536000
Content-Length: 535

  adding: <!DOCTYPE html><script>alert('XSS'); .png (deflated 14%)
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="refresh" content="1;url=https://example.com/upload" />

Por lo que sé del marco de Laravel y otros sitios web, las aplicaciones, etc., agregan un redireccionamiento de base de contenido (incluso si hay un encabezado como Ubicación) para una redundancia adicional como <meta http-equiv="refresh" content="1;url=something" .

¿En qué circunstancias y cómo puedo evitar el encabezado de ubicación para ejecutar mi contenido y, por lo tanto, mi XSS?

    
pregunta Lucian Nitescu 08.05.2018 - 15:28
fuente

1 respuesta

1

Si XSS solo ocurre si el cliente envía la carga útil, esto no es realmente viable a menos que pueda engañarlos para que lo hagan.

El RFC dice que los clientes pueden redirigir automáticamente al recibir un HTTP 302 con el encabezado de ubicación . Si bien se requiere un cuerpo, el cliente puede ignorarlo de manera efectiva según la especificación.

Por lo tanto, no creo que pueda "omitir el encabezado de la ubicación", al menos cuando el navegador sigue instantáneamente al encabezado de la ubicación y no muestra la página, que parece ser el comportamiento predominante.

Podría ser posible, si el cliente tiene alguna influencia en los encabezados devueltos por el servidor, realizar una división de respuesta HTTP ataque , donde el encabezado de la ubicación se puede modificar o omitir por completo. Una vez más, es probable que esto requiera que la víctima presente la solicitud elaborada ellos mismos, lo que hace que sea una avenida poco probable.

    
respondido por el multithr3at3d 08.05.2018 - 17:02
fuente

Lea otras preguntas en las etiquetas