Perché la sqlmap non riesce a trovare un'iniezione SQL nel mio codice?

6

Ho installato XAMPP sul mio PC di sviluppo e ho avviato il server HTTP Apache e MySQL.

Viene fornito con una pagina di test "Raccolta CD", con il seguente codice PHP di back-end:

mysql_query("DELETE FROM cds WHERE id=".round($_REQUEST['id']));

Non sono un esperto di PHP, suppongo che la chiamata di round sia lì per prevenire l'iniezione SQL. Quindi l'ho rimosso dal codice PHP, lasciando il seguente:

mysql_query("DELETE FROM cds WHERE id=".$_REQUEST['id']);

Ho verificato che posso modificare i parametri di query nell'URL per fare tutto ciò che mi piace nel database, quindi la vulnerabilità di SQL injection è sicuramente lì.

Ora sto cercando di utilizzare sqlmap per trovare la vulnerabilità di SQL injection. Lo eseguo in questo modo:

python sqlmap.py -u "http://127.0.0.1/xampp/cds.php?action=del&id=14"

Ma restituisce quanto segue:

[16:01:47] [WARNING] GET parameter 'id' is not injectable [16:01:47] [CRITICAL] all parameters are not injectable, try to increase --level/--risk values to perform more tests. Rerun without providing the --te chnique switch. Give it a go with the --text-only switch if the target page has a low percentage of textual content (~15.27% of page content is text)

Qualche idea su cosa potrei fare male?

    
posta LeopardSkinPillBoxHat 04.06.2012 - 08:03
fonte

4 risposte

8

C'è un'enorme probabilità che il tuo server non visualizzi errori / avvisi. Sqlmap tenta di iniettare payload sql inj.-like e osserva lo "stato" dell'app web. Dato che sqlmap non ha accesso al tuo codice vulnerabile o al tuo contenuto DB, potrebbe solo intuire la potenziale vulnerabilità osservando il comportamento webapp - in questo caso il comportamento "visivo" (nessun avviso / errore - nessun potenziale sql-inj.)

Tuttavia, sqlmap ti ha dato un suggerimento molto carino: prova ad aumentare i valori di livello / rischio:

    python sqlmap.py -u "http://..." --level=3 --risk=3

dopo tale modifica aumenterai la quantità di payload (inviati alla tua webapp) e troverai sql.inj cieco !. Significa che al livello 3 (e --risk = 3) sqlmap non controlla solo gli effetti "visibili". Utilizza un'operazione temporanea [BENCHMARK ()] che ritarda la risposta del server se sql. Inj. si verifica.

    
risposta data 06.06.2012 - 09:16
fonte
2

Devi accedere all'applicazione web, per visitare quella pagina? In tal caso, sqlmap non ha il tuo cookie di autenticazione, quindi potresti aver bisogno di alimentarlo con un cookie valido con --cookie=... .

Non ho molta esperienza con sqlmap, ma ho notato che una pagina web online afferma che sqlmap 0.9 è inaffidabile e l'ultima versione di sviluppo è più affidabile . Questa è un'altra cosa che potresti provare.

C'è sempre l'ovvio: hai provato le raccomandazioni che suggerisce nell'output che hai citato?

    
risposta data 04.06.2012 - 08:45
fonte
2

1) Si prega di utilizzare l'ultima revisione dal nostro repository (dal tuo output dato è ovvio che stai usando la versione precedente v0.9 - un sacco di cose sono cambiate fino ad allora):
$ svn checkout https://svn.sqlmap.org/sqlmap/trunk/sqlmap sqlmap-dev

2) I messaggi di errore non sono necessari per il rilevamento di sqlmap (come avviene per altri "strumenti"). Sqlmap's trova il modo di iniettare qualcosa per usarlo e non cerca "solo" messaggi di errore (che non provano nulla)

3) Aumentare il livello / rischio quando si è certi che dovrebbe essere sfruttabile (es. --level = 3 --risk = 3) ma nella maggior parte dei casi non OR il livello / rischio predefinito dovrebbe essere sufficiente

Cordiali saluti,
Miroslav Stampar

    
risposta data 06.06.2012 - 09:57
fonte
-2

C'e 'uno scambio di pile! Veramente? È così facile rispondere! Dai un altro sguardo:

id=" round ($ _ richiesta [ 'id']));.

Vedi ancora? L'iniezione SQL è stata completata! PHP sta arrotondando "0 OR 1 = 1; -" a solo 1. Rimuovi la funzione di round e incidi te stesso tutta la notte.

    
risposta data 25.12.2014 - 08:14
fonte

Leggi altre domande sui tag