Iniezione SQL - Estrazione dei dati del database dal contenuto della pagina

5

Ho una domanda che spero che qualcuno possa aiutarti ...

Sono in procinto di scrivere uno strumento SQL Injection da zero (sono consapevole che ci sono già strumenti eccellenti come Map SQL, ma questo deve essere scritto da zero).

Il problema che sto riscontrando:

Quando manualmente esegue l'iniezione SQL per determinare nomi di tabelle o nomi di colonne e così via usando stringhe come:

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 --

è facile determinare i nomi delle tabelle / i nomi delle colonne in quanto puoi semplicemente guardare la pagina e leggere i nomi delle colonne che vengono restituiti nel contenuto della pagina.

Ma come può essere fatto in modo automatico?

Fare questo in modo automatizzato è molto più difficile anche se, in che modo lo strumento sa cosa nella pagina che viene restituita quando viene eseguito l'injection SQL sono nomi di tabelle / nomi di colonna?

Quale sarebbe il modo più affidabile per fare in modo che lo strumento sappia quali parti del contenuto della pagina estrarre perché sono nomi di tabelle / nomi di colonne?

ad esempio ... posso analizzare / cercare il contenuto della pagina per le stringhe separate da virgole per ottenere i nomi di tabella e colonna che vengono generati dall'iniezione? Esistono modi migliori e più affidabili per farlo?

il tuo aiuto con questo è molto apprezzato, molte grazie

    
posta perl-user 24.04.2013 - 16:13
fonte

2 risposte

3

Il modo più semplice è usare l'iniezione sql cieca. Sai se la domanda che stai facendo è giusta o sbagliata a seconda di quanto tempo impiega la query per eseguire. Questo è anche l'approccio più flessibile perché un exploit cieco di injection sql funzionerà indipendentemente dal tipo di SQL injection che viene sfruttato (blind, non-blind, select, insert, update, delete ....).

Un altro approccio è provare e identificare un campo visibile sulla pagina mentre si forza bruta il numero di colonne. Una volta trovata questa posizione sulla pagina, puoi raschiare i dati da questo punto (sqlmap fa qualcosa di simile all'iniezione non cieca):

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

Funzionerà bene con MySQL ma alcuni tipi di database come postgresql, le colonne nella selezione unione devono essere dello stesso tipo. Quindi il database dovrà anche essere forzato brutalmente.

    
risposta data 24.04.2013 - 18:55
fonte
0

Il modo più semplice è accedere alla pagina con input legittimo e con l'iniezione e osservare la differenza. Se sai quali contenuti non sono risultati e sai qual è il formato del risultato previsto, non è difficile individuare i dettagli con espressioni come le espressioni regolari o qualche altro motore di analisi.

Certo, qualsiasi altro elemento dinamico (come pubblicità) che può differire dal caricamento della pagina al caricamento della pagina può presentare un problema che richiederebbe un piano più elaborato.

    
risposta data 24.04.2013 - 18:24
fonte