Ataque de encabezado de host - Envenenamiento por restablecimiento de contraseña - API web ASP.NET 2 alojada como servicios de aplicaciones de Azure

0

Actualmente estoy probando un sitio donde se usa el encabezado del host para crear un enlace de correo electrónico de recuperación. Sin embargo, cuando intento manipular el encabezado del host en Burp, aparece un mensaje HTTP 400 que dice que estoy usando un nombre de host no válido. Recibo este error incluso si solo trato de manipular el encabezado del host para GET / o cualquier otra solicitud.

Mi idea inicial fue que, debido a que era un Servicio de aplicaciones en Azure, no se encontró el host y no tenía ningún enlace en el servidor y, por lo tanto, no funcionó. Sin embargo, en el mismo servidor del Servicio de aplicaciones, hay otra aplicación alojada contra la que se me permitió probar. Cuando agregué un encabezado de host que sé que existe en ese servidor, todavía obtengo el mismo error HTTP 400.

¿Qué está haciendo Microsoft para evitar esto?

Ping comprobando que los dominios están en el mismo servidor:

Ejemplodesolicitud,hostydestinoeditados,peroambosdominiosestánenelmismoservidor.

Elmensajeessiempreelmismo:

HTTP/1.1400BadRequestContent-Type:text/html;charset=us-asciiServer:Microsoft-HTTPAPI/2.0Date:Fri,06Oct201707:28:25GMTConnection:closeContent-Length:334<!DOCTYPEHTMLPUBLIC"-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Hostname</h2>
<hr><p>HTTP Error 400. The request hostname is invalid.</p>
</BODY></HTML>

Puedo agregar un X-Forwarded-Host: mydomain.com a la solicitud y se procesará pero no recogerá el encabezado como host.

enlace

    
pregunta Ogglas 06.10.2017 - 09:49
fuente

1 respuesta

0

Voy a darle una oportunidad y responderé a mi mismo. El código responsable de enviar el correo electrónico es el siguiente:

await emailRepository.SendResetPasswordTokenAsync(Url.Action("ResetPassword", "Authentication", new { token.Token }, Request.Url.Scheme), model.Email, token.User.FullName);

La parte vulnerable es este bit:

Url.Action("ResetPassword", "Authentication", new { token.Token }, Request.Url.Scheme)

Creé una aplicación en mi máquina e intenté crear URL con IIS Express y cambié de host y obtuve exactamente el mismo error. Creo que este error se produce porque no hay un enlace predeterminado y porque la solicitud se emite utilizando HTTPS. Si cambio la solicitud para usar HTTP estándar, el encabezado del host se interpreta y en la solicitud a continuación termino en domain2 .

Sinembargo,tambiénlointentéusandomiIISlocalconenlaceparacapturartodoenelpuerto80.Usandoelmismocódigoquelaaplicaciónvulnerable,pudemanipularelhost:

Código:

publicActionResultIndex(){varhost=Request.Headers["host"];

    ViewBag.Title = $"Host: {host} Url Created: {Url.Action("Index", "Home", "", Request.Url.Scheme)}";

    return View();
}

    
respondido por el Ogglas 06.10.2017 - 10:48
fuente

Lea otras preguntas en las etiquetas