¿Usar XSS basado en DOM para redirigir a un dominio diferente o ejecutar un script?

0

Estaba probando mis manos en XSS basado en DOM. Me encontré con un escenario donde una cadena controlada por el usuario de la URL se incluye en JavaScript como se muestra a continuación.

var userControlled=substring of URL;
window.location="/abc/xyz?param="+userControlled;

La URL es algo así como http://mydomain/param1=qwerty , donde puedo ingresar cualquier valor para param1 y el sistema no se quejará.

Nota: el valor de param1 no aparece directamente en ninguna parte de la respuesta, pero es usado por DOM.

O la URL puede ser http://mydomain/param1=qwerty#sadsdsdsd .

Me estaba preguntando, ¿hay alguna forma de redirigir al usuario a un dominio diferente o ejecutar un script o algo que pueda ayudarme a ejecutar un ataque XSS exitoso? O cualquier otro ataque para esa materia.

    
pregunta Sachin Kumar 21.11.2011 - 11:45
fuente

4 respuestas

4

Este fragmento de código no tiene un defecto XSS pero sí sufre la división de parámetros. Permite al usuario especificar parámetros GET adicionales que pueden permitir la escalada de privilegios cuando la solicitud lleva credenciales, como un token CSRF en un parámetro anterior o cookies de autorización.

Por ejemplo, si userControlled es

&start-world-war-iii=true

entonces el navegador GET /abc/xyz?param=&start-world-war-iii=true con las cookies del usuario.

Probablemente sea de bajo riesgo ya que la asignación de window.location conduce a una solicitud GET que rara vez tiene efectos secundarios que pueden ser abusados por las credenciales llevadas.

Para mitigar esto, userControlled debería normalizarse:

window.location="/abc/xyz?param=" + encodeURIComponent(userControlled);
    
respondido por el Mike Samuel 22.11.2011 - 22:04
fuente
3

Este recorte de JS no es vulnerable a XSS basado en DOM. Recomiendo usar el DOM Snitch plugin para auditar aplicaciones para XSS basados en DOM.

    
respondido por el rook 21.11.2011 - 16:33
fuente
1

Si bien la respuesta de Mike es correcta, ya que el ejemplo proporcionado no es vulnerable a XSS basado en DOM, su ataque propuesto no es necesario ya que un atacante que puede hacer que un usuario haga clic en su enlace particular también podría hacer que un usuario visite el < em> / abc / xyz? param = & start-world-war-iii = true ubicación directamente.

Si, por ejemplo, el código fuera más parecido a este, sería vulnerable a XSS basado en DOM:

var userControlled = document.location.hash.slice(1);
var s = "<script>document.location='/path/to/thing/" + userControlled + "';<\/script>";
document.write(s);

Luego hay varias cosas que puedes hacer. Si bien podría ser inmediatamente obvio usar algo como /path/to/target?param=value#alert('xss');' para interrumpir el cambio de ubicación mientras aún Al poder ejecutar JavaScript, también se puede usar algo como / path / to / target? param = value # '% 2b (alerta (' xss2 '),' value ')% 2b' que seguirá realizando el cambio de ubicación, pero también ejecutará JavaScript mientras concatena la nueva cadena de ubicación.

    
respondido por el Jeff 04.09.2013 - 16:54
fuente
-1

Sí, su muestra es explotable para XSS basado en DOM para redirigir a un usuario. Aquí hay una muestra de una carga útil:

make_a_js_error;</script><meta http-equiv="refresh" content="0;URL='http://test.com/hack.html" />

Podemos cometer un error js en la página para detener el comportamiento normal de JS en la página. Luego, el usuario puede ser redirigido con una etiqueta meta.

Aquí hay una muestra completa:

<?php

$hostMain = '//test.com';
$myFile=basename(__FILE__);

$payload =
    <<<PLD
make_a_js_error;</script><meta http-equiv="refresh" content="0;URL='http://test.com/hack.html" />
PLD;
?><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>XSS Sample</title>
</head>
<body>
<script>
    <?php if(isset($_GET['param'])):?>
        window.location = "<?php echo $hostMain . '/' . $myFile;?>/?param="+<?php echo urldecode($_GET['param'])?>;
    <?php endif;?>
</script>
<a href="<?php echo $hostMain  . '/' . $myFile . "?param="; echo urlencode($payload);?>">do redirect</a>

</body>
</html>
    
respondido por el Aleksandr Ryabov 02.11.2018 - 20:17
fuente

Lea otras preguntas en las etiquetas