SQL injection Ci sono casi in cui un url vulnerabile non conterrebbe un simbolo 'equals' (=)

7

Ho una domanda che spero tu possa aiutarti?

Sto cercando di filtrare / grep una lunga lista di URL di spider dal mio sito per ottenere solo l'url che potrebbe essere vulnerabile a SQL injection.

La mia domanda: È vero che qualsiasi URL potenzialmente vulnerabile all'iniezione sql sempre contiene un simbolo 'equals' (=) nell'URL?

Pertanto, se dovessi grep per tutti gli URL che contengono un simbolo '=' nell'URL, mi mancherò qualsiasi altro URL che non contenga un simbolo '=' che potrebbe ancora essere vulnerabile?

Ad esempio questi contengono tutti un simbolo '=' e potrebbero potenzialmente essere vulnerabili a SQL injection.

http://[website]/index.php?itemid=10
http://www.[yoursite].org/site/page.asp?CID=72&DID=
http://www.[mysite].com/site/page.asp?=

Ci sono casi in cui l'url non contiene un '=' e sono ancora vulnerabili a SQL injection?

------- ------- EDIT

Sono SOLO interessato a modificare / iniettare l'URL nella barra degli URL del mio browser per vedere se eventuali URL nel mio elenco sono potenzialmente vulnerabili a SQL injection (cioè non sono interessato a iniettare moduli o richieste POST e così via ancora).

Ho un elenco di URL in un file txt

file.txt

http://www.[site].com/index.php?itemid=10
http://www.[site].com/
http://www.[site].com/site/page.asp?CID=72&DID=
http://www.[site].com/animals/pictures
http://www.[site].com/pictures
http://www.[site].com/index.php?itemid=7
http://www.[site].com/faq

Voglio filtrare / grep questo file txt in modo da ottenere solo gli URL contenenti un simbolo '=' come mostrato di seguito:

FILTEREDFILE.txt

http://www.[site].com/index.php?itemid=10
http://www.[site].com/site/page.asp?CID=72&DID=
http://www.[site].com/index.php?itemid=7
http://www.[site].com/site/page.asp?CID=72&DID=

Usando questi URL nel FILTEREDFILE.txt userò quindi un ciclo foreach per aggiungere un apostrofo alla fine di ognuno per vedere se è vulnerabile all'iniezione sql guardando il lunghezze del contenuto della risposta per vedere se c'è una variazione / differenza.

So che anche sugli URLS e non contengono un '=' che potrebbero ancora esserci vulnerabilità di SQL injection nei moduli e nelle richieste POST e così via, ma al momento non mi interessa.

ATTENZIONE:

Sono interessato solo a vulnerabilità che possono essere determinate modificando / alterando l'URL stesso (ovvero aggiungendo un apostrofo alla fine di http: // www. [site] .com / index .php? itemid = 7 e così via).

Quello che voglio sapere è se greping il file txt per URL che contengono un simbolo '=' mi mancherà qualsiasi URL che potrebbe essere ancora vulnerabile che non contenga un ' = 'symbol. (esclusi moduli, POSTS, url riscritti, semplicemente manipolando l'URL nella barra degli URL)

Spero che questo spieghi meglio la mia domanda,

grazie per il tuo aiuto

    
posta perl-user 20.02.2013 - 10:52
fonte

4 risposte

11

Le iniezioni SQL possono essere eseguite in qualsiasi parte della richiesta. Qualsiasi parametro della richiesta HTTP può contenere dati SQL che possono ingannare l'applicazione per iniettarla nel database.

Ad esempio, Amazon ha gli ID prodotto nel URL link Questo è chiamato riscrittura di URL e il server web estrae l'id prodotto dall'URL e lo utilizza per interrogare il database per esso.

Senza disporre del codice sorgente disponibile, non c'è modo di sapere quali query SQL vengono eseguite. Un'applicazione Web può eseguire un DNS inverso sull'indirizzo IP di connessione e inserire tale nome nel database. Ma l'IP può risolversi in una stringa che esegue un'iniezione SQL.

Ecco alcuni modi per ottenere variabili dall'URL nell'applicazione web:

  • Wikipedia utilizza i due punti (:). esempio: link
  • Le applicazioni JavaScript possono usare frammenti (#) come input. esempio: link
  • Tilde (~) era popolare una volta. esempio: link
  • È possibile incontrare collegamenti del gestore di protocolli come data: o javascript: che possono indirettamente passare dati all'app Web. ex: javascript:addtocart(5)

Durante l'analisi dei link, ricorda che i caratteri possono essere codificati tramite URL.

    
risposta data 20.02.2013 - 10:57
fonte
1

È possibile non contenere il segno di uguale, anche se non è stata effettuata la riscrittura dell'URL, ma dipenderà da quanto male è codificato il sito web.

Qualsiasi parte dell'URL web, che genererà una query sql, potrebbe essere utilizzata per eseguire l'iniezione sql se non correttamente disinfettata.

Le variabili Get possono essere passate senza valore, solo la definizione.

Considera questo esempio:

URL: http://site.com/user.php?user-1234

Codice:

foreach ($_GET as $k => $v) {
    $k2 = explode('-', $k);
    if ($k2[0]='user') $res=$k2[1];
}
//do sql query with $res
    
risposta data 20.02.2013 - 16:08
fonte
1

Tutti gli input sono vulnerabili all'iniezione SQL, quindi è necessario filtrare e controllare sempre sul lato server. Non preoccuparti di dove viene, in qualsiasi momento stai usando una variabile dall'utente, dalla lettura di un file, più o meno ogni volta che non hai il valore hardcoded, dovresti eseguire l'escape e il controllo corretto.

Se non hai già familiarità con OWASP, ti suggerisco di iniziare con la loro guida su SQL Injection .

Non mi affiderei alla stringa uguale come rivelatore, potresti ottenere un'iniezione SQL che cambia funzionalità o effettua un controllo booleano con un semplice attacco di iniezione di commenti.

Inoltre, come indicato nelle altre risposte, se filtri su stringhe di query ti perdi nelle pagine che elaborano i dati del modulo trasmessi tramite il metodo POST . Ad esempio, se si dispone dell'URL che elabora i risultati dell'invio di un modulo, potrebbe non avere alcun parametro get, ma sarà comunque possibile eseguire l'iniezione SQL quando vengono elaborati i valori di POST . Ho letto il tuo post completo, ma non sono sicuro del motivo per cui non vorrai controllare tutti i moduli di input se stai facendo lo sforzo di testare la tua applicazione. È meglio eseguire alcuni strumenti automatici come nikto, scanner burp o AppScan se si dispone dei fondi.

Sembra che tu stia facendo un grande sforzo per coprire solo parte del problema. Inoltre, se hai il codice sorgente, inizierei da lì se sei un programmatore invece di identificare le pagine, perché potrebbero esserci più pagine che chiamano la stessa funzione.

    
risposta data 23.02.2013 - 02:14
fonte
0

Risposta breve no non si può presumere che solo gli URL con un = in essi siano possibili vettori per l'iniezione SQL.

Il problema con questo assunto è che ignora l'uso di gestori di contenuti e framework web che utilizzano le informazioni del percorso url per determinare quale gestore / procedura viene chiamata e come gestire le informazioni sul percorso. Prendi in considerazione molti servizi basati su REST che utilizzano questo approccio e molti framework web popolari.

Potrei avere un URL come

link

dove viene chiamato il gestore e passato arguement1, arguement2 e arguement3. A seconda di come viene implementato il gestore e di cosa fa, freddo fornisce facilmente un vettore per l'iniezione sql.

    
risposta data 23.02.2013 - 00:04
fonte

Leggi altre domande sui tag