Ho un problema in cui spero che qualcuno possa aiutare riguardo al rilevamento delle impronte digitali del DBMS usando sql injection, in modo scripted / automatizzato per determinare in modo accurato e affidabile il DBMS.
Sono in procinto di scrivere uno strumento di iniezione sql da zero, ma sto riscontrando problemi nel trovare un modo / un numero di modi per imprimere in modo affidabile il DBMS. (Sono consapevole che ci sono già molti strumenti eccellenti, ma per questo progetto deve essere scritto da zero).
Esecuzione manuale:
L'impronta digitale del DBMS manualmente è molto più facile in quanto è più facile osservare le modifiche e il comportamento della pagina, tuttavia quando si cerca di farlo in modo automatico con uno script / programma diventa molto più difficile monitorare il comportamento di la pagina.
Automazione di questo utilizzando uno scanner / fuzzer:
Sono consapevole che un modo possibile è analizzare i messaggi di errore restituiti e vedere se contengono determinati messaggi di errore relativi a un particolare DBMS, ma nei casi in cui ciò non è possibile ho bisogno di un altro modo di fare questo.
Il problema che sto riscontrando:
Ho anche giocato con i metodi di concatenazione delle stringhe e.g ...
Questo utilizza il fatto che diversi DBMS gestiscono la concantenazione delle stringhe con operatori diversi. La concatenazione viene eseguita in diversi DBMS come:
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
Posso presumibilmente utilizzare questo metodo per vedere se la stringa viene stampata sulla pagina o se la pagina cambia o se viene generato un errore ... e così via
ma da alcuni test ho fatto un certo numero di questi metodi di concatenazione che sembrano funzionare su un numero di DBMS (es. usando il simbolo +
funziona sia su MSSQL che su MySQL), che non è utile quando sono cercando di determinare in modo definitivo quale DBMS sia.
L'utilizzo di diverso dialetto SQL sembra un altro metodo possibile, vedi link , ma posso trovare pochissime informazioni su questo metodo?
Conosci il modo migliore / più affidabile per l'impronta digitale del DBMS in modo automatico / con script?
il tuo aiuto è molto apprezzato, grazie