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