¿Cómo codificar letras en multipart / form-data para incluir caracteres CR / LF?

0

La parte de la solicitud HTTP que debe enviarse al servidor con Content-Type: multipart/form-data; se ve así:

------WebKitFormBoundaryQ7KGYev31biaJTW8
Content-Disposition: form-data; name="subject"

attacker_controlled

Luego, este valor se incluye en el encabezado de la respuesta a otra solicitud:

Content-Disposition:attachment; filename="attacker_controlled.html"

Me gustaría hacer una inyección de cabecera HTTP aquí. ¿Cómo codificar los caracteres CR / LF en mulupart/formdata para que aparezcan como CR / LF en el lado del servidor? ¿Cómo hacer aquí la inyección del encabezado HTTP si no es posible?

Editar: He intentado cambiar esta solicitud de acuerdo con el consejo de @ AndrewSmith pero no funcionó :

------WebKitFormBoundaryQ7KGYev31biaJTW8
Content-Disposition: form-data; name="subject"
Content-Transfer-Encoding: base64

YXR0YWNrZXJfY29udHJvbGxlZA==

En el HTML resultante en lugar de attacker_controlled hay YXR0YWNrZXJfY29udHJvbGxlZA== (es decir, el servidor web no reconoció la codificación de transferencia de contenido)

Entonces, ¿hay manera de codificar caracteres CR / LF?

    
pregunta Andrei Botalov 09.07.2012 - 19:42
fuente

2 respuestas

3

¿Cómo son las líneas nuevas un problema cuando se define un límite? Lo que ocurre con este tipo de paquete HTTP es que es seguro para archivos binarios, lo que significa que se puede usar todo el rango ASCII 0..255 sin ningún problema; Incluyendo nuevas líneas y retornos de carro. Mientras no se encuentre el límite especificado, el servidor o el navegador simplemente verán los caracteres como parte de los datos y no como cualquier separador.

Solo si un atacante puede controlar el nombre en el encabezado de disposición de contenido, deberá eliminar las nuevas líneas allí. O si puede adivinar el límite que se va a usar, debes asegurarte de que el límite sea dinámico o simplemente se elimine.

    
respondido por el Luc 15.07.2012 - 19:56
fuente
-1

Creo que es una codificación de 7 bits: enlace

Por favor, corrígeme si me equivoco.

También puede ser lo que sea que admita el servidor: 8 bits, etc., solo debes poner un encabezado y ver por ti mismo cómo funciona, y ver qué codificación de transferencia de contenido también especificas.

    
respondido por el Andrew Smith 09.07.2012 - 20:19
fuente

Lea otras preguntas en las etiquetas