vulnerabilità MariaDB SQL Injection?

1

Sto testando SQL Injection su un sito Web.

Fondamentalmente, sto provando nel seguente URL:

http://example.org/webpage/*

dove al posto del * il carico utile deve essere iniettato. Quando provo a mettere lì questo: ' OR 1=1/* , l'url sarà così: http://example.org/webpage/'%20OR%201=1/* - questo è l'output:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '/*', 'IT', 'name=\' OR 1=1/*', 1499954730)' at line 1

Questo significa che è SQL-injection vulnerabile? Se sì, come posso provare a sfruttarlo con sqlmap? Questo è quello che ho provato a correre:

$ sqlmap -u "http://example.org/webpage/*"  ma dice che non c'è niente di iniettabile, e penso che sia fallito.

    
posta XRichardX 13.07.2017 - 16:09
fonte

2 risposte

2

Potrei sbagliarmi, ma sono abbastanza sicuro che il tuo problema principale è che stai tentando di fare un'iniezione mysql sbagliata. Come regola generale, se un payload può attivare un errore di sintassi SQL, i tentativi di impedire l'SQL Injection non sono veramente funzionanti. Ad esempio, se si utilizzavano query preparate, non è possibile per il payload generare un errore di sintassi SQL.

In questo caso specifico il problema è che stai usando il tipo di commento sbagliato per nascondere il resto del comando. In questo caso avresti probabilmente più fortuna (facendo in modo che SQL Injection si verifichi) se hai usato un doppio trattino ( -- ) o un cancelletto ( # ) che entrambi iniziano i commenti a riga singola in MariaDB. Il carattere di commento che stai utilizzando ( /* ) è un carattere di commento su più righe che non ha un carattere di commento di chiusura. Questa sembra essere la fonte dell'errore SQL. Anche se non conosco personalmente sqlmap, il mio sospetto è che potrebbe non pensare che ci sia una vulnerabilità di iniezione, non perché si è sicuri, ma semplicemente perché il carico utile per l'iniezione sta generando un errore SQL e quindi non si sta verificando alcuna iniezione. Prova di nuovo con il carattere commento appropriato.

Per ribadire, il fatto che ricevi un errore SQL mi fa pensare che tu sia vulnerabile all'iniezione SQL, semplicemente non stai facendo l'iniezione SQL correttamente.

Modifica

Penso che il prossimo passo sia ignorare per un po 'sqlmap. L'attacco che stai facendo ' OR 1=1 selezionerebbe tutti i record. Il tuo URL implica che questo è un tipo di pagina view , che mostra solo un record alla volta. Di conseguenza, ci sono molti casi in cui tale payload di iniezione SQL non può effettivamente avere alcun risultato sulla pagina in questione. Questa è la parte che può complicare le cose: l'iniezione SQL è "riuscita" solo se puoi effettivamente fare qualcosa con l'attacco e influire sull'applicazione in modo significativo. Ad esempio, se il tuo payload fa caricare tutti i record nel comando SQL, ma la pagina in questione mostra implicitamente solo il primo risultato (perché è una pagina view -type), allora non ti accorgerai che la tua iniezione ha avuto successo.

In breve, il carico utile per iniezione SQL fornito è specifico per il contesto e potrebbe non funzionare in tutti i punti di un determinato sito Web, anche se la pagina è vulnerabile all'iniezione SQL. Ciò rende l'iniezione SQL ancora più complicata. Alcuni strumenti di injection sql possono automatizzare parte di questa complessità, ma non so se sqlmap sia un tale strumento.

Quindi metti sqlmap per un momento. Prova un diverso tipo di carico utile. Invece di selezionare ' OR 1=1 , prova a fare ' AND 1=0 . Questo dovrebbe (teoricamente) portare a zero record. Quindi, se si ottiene un 404 (o risultati in generale), considererei la prova che la pagina è vulnerabile all'iniezione SQL.

Ovviamente, se ti senti cattivo, puoi provare le varianti su '; DROP TABLE users-- fino a quando qualcosa non si rompe :) Sarebbe comunque banale.

    
risposta data 13.07.2017 - 16:34
fonte
0

Buon giorno 2 °.

Hai sbagliato con il punto di iniezione. link '% 20OR% 201 = 1 / * < --- bad link * / < --- buono

Prova a catturare la richiesta http completa con web-debugger (e.x LiveHTTPHeaders / BurpSuite) e salvala su file (e.x. req.txt). Dopodiché avvia sqlmap con la seguente stringa: python sqlmap.py -r req.txt --threads 10 --level 5 --risk 3 --random-agent --batch -v 3 e incolla l'output qui.

Tutto il meglio, N.T.

    
risposta data 14.07.2017 - 09:11
fonte

Leggi altre domande sui tag