Inyección de SQL: extracción de datos de la base de datos del contenido de la página

5

Tengo una pregunta con la que espero que alguien pueda ayudar ...

Estoy en el proceso de escribir una herramienta de Inyección SQL desde cero (soy consciente de que ya existen herramientas excelentes, como el Mapa SQL, pero esta debe escribirse desde cero).

El problema que tengo:

Cuando manualmente realiza una inyección de SQL para determinar los nombres de las tablas o los nombres de las columnas, etc. mediante el uso de cadenas como:

www.vulnerable site.net/articles.php?id =-1 union select 1,2,group_concat(column_name),4 from information_schema.columns --

o

www.vulnarable site.net/articles.php?id =-1 union select 1,2,table_name,4 from information_schema.tables --

es fácil determinar los nombres de las tablas / los nombres de las columnas, ya que simplemente puede mirar la página y leer los nombres de las columnas que aparecen en el contenido de la página.

Pero, ¿cómo puede hacerse esto de manera automática?

Hacer esto de una manera automatizada es mucho más difícil porque ¿cómo sabe la herramienta lo que en la página que se devuelve cuando se ejecuta la inyección de sql son los nombres de tabla / columna? >

¿Cuál sería la forma más confiable de hacer esto para que la herramienta sepa qué partes del contenido de la página extraer porque son nombres de tablas / columnas?

por ejemplo ... ¿podría analizar / buscar el contenido de la página en busca de cadenas separadas por comas para obtener los nombres de tabla y columna que se imprimen en la inyección? ¿Hay mejores formas más confiables de hacerlo?

su ayuda con esto es muy apreciada, muchas gracias

    
pregunta perl-user 24.04.2013 - 16:13
fuente

2 respuestas

3

La forma más fácil es usar la inyección de sql ciego. Sabe si la pregunta que está haciendo es correcta o incorrecta según el tiempo que la consulta demore en ejecutarse. Este es también el enfoque más flexible porque un exploit de inyección de sql ciego funcionará independientemente del tipo de inyección de sql que se esté explotando (ciego, no ciego, seleccionar, insertar, actualizar, eliminar ...).

Otro enfoque es tratar de identificar un campo visible en la página mientras fuerza bruta el número de columnas. Una vez que encuentre esta ubicación en la página, puede raspar los datos desde este punto (sqlmap hace algo como esto para la inyección no ciega):

www.vulnerable site.net/articles.php?id =-1 union select 'dsjhfsjhfdf'
www.vulnerable site.net/articles.php?id =-1 union select 'dsjhfsjhfdf','sfjufewjfef'
...

Esto funcionará bien con MySQL, pero en algunos tipos de bases de datos como postgresql, las columnas en la selección de unión deben ser del mismo tipo. Por lo tanto, la base de datos también tendrá que someterse a una fuerza bruta.

    
respondido por el rook 24.04.2013 - 18:55
fuente
0

La forma más sencilla es acceder a la página con información legítima y con la inyección y observar la diferencia. Si sabe qué contenido no es resultados y sabe cuál es el formato del resultado esperado, no es tan difícil elegir los detalles con cosas como expresiones regulares o algún otro motor de análisis.

Por supuesto, cualquier otro elemento dinámico (como anuncios) que puede diferir de la carga de la página a la carga de la página puede presentar un problema que requeriría un plan más elaborado.

    
respondido por el AJ Henderson 24.04.2013 - 18:24
fuente