Cómo forjar el encabezado de referencia en el método GET activado en HTML

4

Estoy analizando las vulnerabilidades CSRF de la DVWA. Me encuentro con el nivel medio que utiliza este fragmento de código para validar si el encabezado referer es igual al nombre del servidor:

if( eregi( $_SERVER[ 'SERVER_NAME' ], $_SERVER[ 'HTTP_REFERER' ] ) ) .

Si es así, mi consulta será aceptada y activada en una base de datos que cambie la información de inicio de sesión. Lo hago a través de una página web maliciosa.

Hasta ahora he podido ver cuál es el nombre del remitente en un encabezado de respuesta del servidor. A mi entender, esa función php está pidiendo lo siguiente:

¿El valor de $ _SERVER [‘SERVER_NAME’] está presente en $ _SERVER [‘HTTP_REFERER’]?

Por lo tanto, lo primero que pensé fue tratar de manipular la cadena de URL de solicitud e incrustar el encabezado de referencia en ella. (sin resultados) Supongo que el if statement solo está buscando un patrón. El problema es que no sé cómo pasarlo y, en serio, no entiendo si mi solicitud GET está presente en $_SERVER[ 'SERVER_NAME' ] o en $_SERVER[ 'HTTP_REFERER' ] . Desde mi investigación, creo que el encabezado de referencia no se puede cambiar en una etiqueta html img simple. Entonces, mi última pregunta sería: ¿Puedo falsificar la cadena de la etiqueta img (solicitud HTTP GET) de una manera que la declaración se evalúe como verdadera? Si no, ¿cómo puedo hacer eso en un escenario donde una víctima siempre usa inconscientemente esta página web maliciosa?

    
pregunta fish202 04.11.2017 - 18:40
fuente

1 respuesta

4

¡Es muy sencillo!

Sugerencia :

  

La verificación verifica si la URL solicitante contiene la cadena localhost , pero no si comienza con ella. Entonces, ¿cómo se obtiene la cadena localhost en el referente (en cualquier lugar)?

Solución:

  

Debe enviar la solicitud desde una página que contenga el nombre de host de destino en su URL.

Entonces, si su instancia de DVWA está alojada en localhost , debe incrustar esa cadena en la URL. Simplemente envíe la solicitud CSRF desde http://evilhost/?localhost . Esto producirá un encabezado de referencia como este:

Referer: http://evilhost/?localhost

Eso es suficiente para pasar el cheque.

    
respondido por el Arminius 04.11.2017 - 23:19
fuente

Lea otras preguntas en las etiquetas