Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ColdWinteR

#1
Los UNION unen los resultados de dos consultas, independientemente de si se cumplen o no.
Efectivamente, ayer seguí buscando, y el error está en que existe una ambigüedad entre el UNION y el ORDER BY, por lo que es necesario el uso de paréntesis al principio y al final de cada una de las dos consultas:
(SELECT campo1,campo2 FROM tabla WHERE campo1>50 ORDER BY campo2 asc) UNION (SELECT campo2,campo3 FROM tabla WHERE campo3<50 ORDER BY campo2 asc)
Algo como esto devolvería los registros de los campos "campo1" para los cuales fueran mayores a 50; todos los registros del "campo2"; y los registros menores a 50 del "campo3" de la tabla "tabla", ordenados ascendentemente por el "campo2".
Si no estuviera ese maldito ORDER BY, no sería necesario el uso de paréntesis, y en mi caso, ni se puede quitar ni se puede meter entre paréntesis la primera consulta.
Quizás se pueda sacar algo con esto por "fuerza bruta" mediante subconsultas... porque las otras dos cláusulas que se pueden usar después de un LIMIT, aparte de UNION, son INTO y PROCEDURE, y creo que no son aprovechables aquí.
Esa es mi investigación hoy... xD ThX :)
#2
Para que no te dé error has de poner una de las tablas detrás del ORDER BY, pues si no, estás pasándole como argumento a dicha función ", u.user_name LIMIT 0, 40-".
Si el código del SQL Injection comienza justo detrás del ORDER BY, lo primero que tendrás que poner será una tabla (por ejemplo, m.mana), y a raíz de ahí, realizar tus consultas mediante UNION SELECT.
Y ahí es donde radica mi problema xD Yo estoy probando otro SQL Injection muy similar a este, sobre Invision Power Board. Este es el PoC:
http://www.example.com/forums/index.php?act=Members&max_results=50&st=SQL_INJECTION
Al introducir esto en el navegador, sobre un foro vulnerable, se obtienen los siguientes resultados:
mySQL query error: SELECT m.columnas
    FROM la_tabla
    ORDER BY m.columnas asc
    LIMIT SQL_INJECTION,50
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 'SQL_INJECTION,50' at line 8

Esto me hizo deducir que la inyección se producía sobre el primer parámetro de LIMIT. El segundo parámetro, es el que se le atribuye en "max_results" en el navegador. Por tanto (y dándole muchas vueltas al tema mareado por google, porque no tenía ni idea de mySQL XD), finalmente he conseguido algo así:
mySQL query error: SELECT m.columnas
    FROM la_tabla
    ORDER BY m.columnas asc
    LIMIT 0,50 UNION ALL SELECT * FROM la_tabla LIMIT 0,50

...y este ha sido el error:
mySQL error: Wrong usage of UNION and ORDER BY
Fallo en el ORDER BY y en el UNION... y no toqué el ORDER BY. He llegado a la conclusión de que falla debido a que las dos consultas deben ir entre paréntesis, aunque no estoy seguro; digo esto porque siempre que he visto un UNION, las consultas que "unía" estaban en esta situación.
No obstante, el caso es que estoy "atascado", y tampoco sé cómo meter los paréntesis al principio y al final de cada consulta en mi navegador. ¿Alguna idea?
#3
Yo también buscaré info al respecto; si la encuentro la pondré aquí mismo. Si por el contrario, encuentras algo antes que yo, hazlo saber :)