Inyección de SQL: automatización de la toma de huellas dactilares del DBMS

4

Tengo un problema. Espero que alguien pueda ayudarlo con respecto a las huellas dactilares del DBMS usando inyección SQL, de una manera automatizada y con script para determinar el DBMS de manera precisa y confiable.

Estoy en el proceso de escribir una herramienta de inyección de sql desde cero, pero tengo problemas para encontrar una forma / número de formas de toma de huellas dactilares del DBMS de forma confiable. (Soy consciente de que ya existen muchas herramientas excelentes, pero para este proyecto es necesario escribirlo desde cero).

Haciendo esto manualmente:

La toma de huellas dactilares del DBMS manualmente es mucho más fácil ya que es más fácil observar los cambios y el comportamiento de la página, sin embargo, al intentar hacer esto de manera automática con un script / programa, es mucho más difícil monitorear el comportamiento de la página.

Automatizar esto utilizando un escáner / fuzzer:

Soy consciente de que una forma posible es analizar los mensajes de error devueltos y ver si contienen ciertos mensajes de error relacionados con un DBMS en particular, pero en los casos en que esto no es posible, necesito otra forma. de hacer esto.

El problema que tengo:

También he jugado con métodos de concatenación de cadenas por ejemplo ...

Esto utiliza el hecho de que diferentes DBMS manejan la concantenación de cadenas con diferentes operadores. La concatentación se realiza en diferentes DBMS como:

MS SQL : 'string1' + 'string2'
MYSQL : CONCAT('string1','string2')
Oracle : 'string1' || 'string2' or CONCAT('string1','string2')

http://example/index.php?id=1+UNION+SELECT+NULL, CONCAT('sql',+'injection'),NULL,NULL  <-- MYSQL
http://www.example.com/abc.php?id=1 AND 'str1str2' ='str1'+'str2'         <-- MSSQL
http://www.example.com/abc.php?=1 AND 'str1str2'=CONCAT('str1','str2')    <-- MYSQL
http://www.example.com/abc.php?=1 AND 'str1str2'=CONCAT('str1','str2')    <-- ORACLE
http://www.example.com/abc.php?=1 AND 'str1str2'='str1'||'str2'   <-- ORACLE

Supuestamente puedo usar este método para ver si la cadena se imprime en la página o si la página cambia o si se genera un error ... y así sucesivamente

pero de algunas pruebas he hecho que varios de estos métodos de concatenación parecen funcionar en una serie de DBMS (por ejemplo, usar el símbolo + funciona tanto en MSSQL como en MYSQL), que no sirve de nada cuando estoy tratando de determinar definitivamente qué DBMS es.

Utilizar dialecto SQL diferente parece ser otro método posible, consulte enlace , pero puedo encontrar muy poca información sobre este método?

¿Conoce la forma mejor / más confiable de tomar huellas dactilares del DBMS de manera automatizada / mediante scripts?

Tu ayuda es muy apreciada, gracias

    
pregunta perl-user 11.04.2013 - 12:25
fuente

2 respuestas

2

Si te gusta automatizar la toma de huellas dactilares, recomiendo usar más de un solo indicador, porque a veces resulta un poco complicado ...

Incluso odio esos ataques de tiempo, a veces son bastante útiles ... Aquí otra sugerencia sobre diferentes dialectos de SQL ...

(MSSQL) enlace ; esperar para demora '0: 0: 10' -

(MySQL) enlace ; si 1 = 1 BENCHMARK (1000000000, MD5 (1))

(Postgre) enlace ; seleccione pg_sleep (10);

    
respondido por el Dr.Ü 15.04.2013 - 18:22
fuente
1

¿Has considerado cómo SQLMap toma sus huellas dactilares? Dice que utiliza:

  

mensajes de error, análisis de banners, comparación de salida de funciones y características específicas como la inyección de comentarios de MySQL.

    
respondido por el schroeder 11.04.2013 - 20:11
fuente

Lea otras preguntas en las etiquetas