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?