Consulta de multilínea con problema de inyección SQL

2

Lamentablemente, estoy realizando un ataque de Inyección SQL contra un sitio web en la escuela (creado por el técnico). No puedo señalar a nadie al sitio en cuestión. El profesor nos ha permitido obtener los conocimientos necesarios. Tengo permiso para realizar pruebas en este sitio antes de que la gente me pregunte por qué quiero saber la respuesta . He encontrado lo que creo que es un campo uname inyectable para crear un nuevo usuario en el sitio web, sin embargo, cada vez que intento usar consultas de varias líneas, la consulta no se ejecuta. Antes de ejecutar una consulta INSERT, parece que se ejecuta una consulta SELECT para verificar si el uname ya existe en el sistema.

Supongo que el campo de nombre de usuario se puede explotar como si creara un nuevo usuario con una sola cita en su apellido:

uname: o'connor 

Recibo el siguiente error detallado de SQL:

OH DEAR - unable execute SQL query: SELECT * FROM usertable WHERE uname='o'connor'

Sin embargo, si intento usar un punto y coma y ejecuto una instrucción de varias líneas, no se ejecuta, por ejemplo:

uname: admin'; UPDATE  usertable SET password='pass' WHERE uname='admin'; 

Se produjo un error:

OH DEAR - unable execute SQL query: SELECT * FROM usertable WHERE uname='admin'; UPDATE usertable SET password='pass' WHERE uname='admin'; '

el script PHP que procesa los datos POST parece agregar una sola cita al final, pero mi entendimiento fue que mi consulta inyectada se ejecutaría antes de llegar a esta única cita. ¿Estoy ejecutando consultas multilínea correctamente?

** ACTUALIZACIÓN También he intentado:

uname: admin'; UPDATE  usertable SET password='pass' WHERE uname='admin'; -- 

no sirve para nada el mismo problema que no se puede ejecutar y sé que todos estos nombres de columnas y de tablas son correctos. ¿Hay alguna forma de que pueda enviar la consulta original a un archivo de texto o algo así o cuando se devuelven los resultados, cambiar el valor de algo que se envía en la página a las contraseñas?

    
pregunta Tubby Tommy 10.02.2015 - 16:45
fuente

2 respuestas

3

No soy un programador de PHP, pero creo que la mayoría de las personas utilizan mysql_query() al ejecutar consultas de MySQL en PHP y esto solo le permitirá ejecutar una declaración SQL a la vez. Es posible ejecutar varias declaraciones en PHP, pero es necesario seguir pasos específicos .

Es posible que quien haya escrito este código esté usando mysql_query , lo que significaría que no podrá inyectar declaraciones SQL adicionales.

La inyección de SQL todavía es posible pero en un nivel mucho más limitado. Por ejemplo, puede inyectar sql en la cláusula where pasando el siguiente valor:

test' OR '1'='1

Lo que generaría la consulta:

SELECT * FROM usertable WHERE uname='test' OR '1'='1'

También puede agregar una cláusula UNION que consulta otra tabla y devuelve resultados:

test' UNION SELECT * from creditCardTable where uname = 'admin

Lo que generaría la consulta:

SELECT * FROM usertable WHERE uname='test' 
UNION 
SELECT * from creditCardTable where uname = 'admin'

Espero que esto ayude.

    
respondido por el Abe Miessler 10.02.2015 - 17:43
fuente
0

No hay absolutamente ninguna garantía de que todas las aplicaciones ejecuten consultas apiladas. De hecho, la antigua extensión ext/mysql (que todavía se usa comúnmente en PHP) nunca los admitió.

Por lo tanto, un ataque "ingenuo" en el que acaba de agregar sus propias consultas puede no funcionar aquí. Probablemente tendrás que trabajar con la consulta original. Sin embargo, todavía hay muchas técnicas de ataque como la manipulación de la cláusula WHERE para obtener un usuario diferente, seleccionando datos arbitrarios a través de una cláusula UNION , posiblemente creando un script malicioso con una cláusula INTO OUTFILE .

    
respondido por el Fleche 10.02.2015 - 17:47
fuente

Lea otras preguntas en las etiquetas