SQL Injection Modificar / Insertar valores de tabla

5

¿Es posible actualizar un campo en una base de datos MySQL o insertar una nueva fila usando inyección SQL en este caso?

  1. La única protección en el código PHP es mysql_real_escape_string ().
  2. La consulta se construye entre comillas dobles: "select id from db where id = $id" no comillas literales de una sola cadena.
  3. La base de datos es mysql (usando mysql_query php call), por lo que no creo que las consultas apiladas sean posibles (corríjame si me equivoco).
  4. Usando mysql no mysqli.

Intenté usar algo como 1; update users set first_name = foo sin suerte e intenté pasar las comas ' en formato hexadecimal y octal sin suerte: chr(0x27) char(0x27) chr(047) ascii tables .

¿Es posible actualizar o insertar realmente en estas condiciones?

    
pregunta Crizly 11.11.2014 - 18:19
fuente

2 respuestas

2

La mayoría de los sistemas de administración de bases de datos prohíben el apilamiento de consultas, es decir, select * from tbl; update ... -- . Para habilitar el apilamiento de consultas en PHP / MySQL, la aplicación debe usar la función mysql_mutli_query() para ejecutar la consulta. Esta función es poco común en la naturaleza.

En la inyección de SQL sin apilar consultas, el atacante está limitado por los operadores de consulta accesibles y las funciones de SQL. La herramienta SQLMap permite a un atacante acceder a la funcionalidad expuesta por la inyección de SQL con un shell fácil de usar. La vulnerabilidad de inyección de SQL de ejemplo proporcionada puede ser inyección de ciego sqa , que puede ser explotada con SQLMap.

En MySQL, un atacante puede agregar una selección de unión para acceder a otras tablas:

select id from db where id = 1 union select password from users

o una sub-selección:

select id from db where id = (select password from users)

Además, un atacante podría leer el archivo utilizando la función load_file() :

select from db where id = load_file('/etc/passwd')

Solo las declaraciones seleccionadas pueden usar el operador de consulta into outfile :

select from db where id = 1 union select password from users into outfile '/var/www/backup.txt'

El operador into outfile requiere el uso de comillas simples y no se puede usar en un exploit de inyección de SQL cuando se usa mysql_real_escape_string() .

El documento Hackproofing MySQL sigue siendo relevante y cubre estos ataques, y más.

    
respondido por el rook 11.11.2014 - 19:22
fuente
2

Puede ser posible usando seleccione %código% Sin embargo, como el atacante no controla directamente el valor de id, el atacante necesitaría otro método para controlar estos datos para que el ataque pueda tener un impacto significativo.

    
respondido por el wireghoul 12.11.2014 - 05:34
fuente

Lea otras preguntas en las etiquetas