Vulnhub HackFest Orcus

09 June 2017

HackFest Orcus Boot2Root Vulnhub

URL de la máquina: https://www.vulnhub.com/entry/hackfest2016-orcus,182/
Descripción: Welcome to Orcus

This is a vulnerable machine i created for the Hackfest 2016 CTF http://hackfest.ca/
Difficulty: Hard
Tips: If youre stuck enumerate more! Seriously take each service running on the system and enumerate them more!
Goals: This machine is intended to take a lot of enumeration and understanding of Linux system.There are 4 flags on this machine 1. Get a shell 2. Get root access 3. There is a post exploitation flag on the box 4. There is something on this box that is different from the others from this series (Quaoar and Sedna) find why its different.
Feedback: This is my third vulnerable machine, please give me feedback on how to improve ! @ViperBlackSkull on Twitter simon.nolet@hotmail.com
Special Thanks to madmantm for testing this machine
SHA-256: 79B1D93C60E664D70D8EB3C0CDF1AD98BF2B95036C84F87EEF065FA71C1AE51E

Solución

En primer lugar, y como en todas las máquinas que estamos realizando, lo primero en realizar siempre es un escaneo de puertos de la máquina para comprobar que servicios están corriendo en ella.

_config.yml

Vemos que hay varios servicios corriendo en el servidor, pero primero de todo vamos a ver que podemos encontrar en el servicio web que está corriendo.

Como en los casos anteriores vemos la imagen de un planeta que al pinchar sobre ella, redirige a otra imagen. Comprobamos si existe el fichero robots.txt y vemos que contiene muchas entradas, vamos a mirar alguna de ellas y lanzamos también un dirb para ver si encontramos alguna carpeta o fichero que no esté reflejado en el fichero robots.txt

./dirb http://10.32.6.104 wordlists/big.txt 

-----------------
DIRB v2.22    
By The Dark Raver
-----------------

START_TIME: Wed Jun 14 06:38:25 2017
URL_BASE: http://10.32.6.104/
WORDLIST_FILES: wordlists/big.txt

-----------------

GENERATED WORDS: 20458                                                         

---- Scanning URL: http://10.32.6.104/ ----
==> DIRECTORY: http://10.32.6.104/FCKeditor/
+ http://10.32.6.104/LICENSE (CODE:200|SIZE:15437)
==> DIRECTORY: http://10.32.6.104/admin/
==> DIRECTORY: http://10.32.6.104/backups/
==> DIRECTORY: http://10.32.6.104/cron/
==> DIRECTORY: http://10.32.6.104/external/
==> DIRECTORY: http://10.32.6.104/files/
==> DIRECTORY: http://10.32.6.104/framework/
==> DIRECTORY: http://10.32.6.104/install/
==> DIRECTORY: http://10.32.6.104/javascript/
==> DIRECTORY: http://10.32.6.104/phpmyadmin/
+ http://10.32.6.104/robots.txt (CODE:200|SIZE:1347)
+ http://10.32.6.104/server-status (CODE:403|SIZE:299)
==> DIRECTORY: http://10.32.6.104/themes/
+ http://10.32.6.104/webalizer (CODE:200|SIZE:0)
==> DIRECTORY: http://10.32.6.104/zenphoto/

Revisando los outputs que hemos obtenido con dirb, vemos que dentro de la carpeta backups se encuentra un fichero zip con nombre “SimplePHPQuiz-Bakcupz.tar.gz” el cual descargamos.Revisando el contenido del backup nos encontramos un fichero “SimplePHPQuiz/includes/db_conn.php”con las siguientes credenciales:

<?php 

//Set the database access information as constants
DEFINE ('DB_USER', 'dbuser');
DEFINE ('DB_PASSWORD', 'dbpassword');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'quizdb');

@ $dbc = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

if (mysqli_connect_error()){
	echo "Could not connect to MySql. Please try again";
	exit();
}

?>

Vemos que son credenciales para una base de datos y recordamos que en la salida del dirb había una referencia a phpmyadmin, por lo que probamos las password y vemos que funciona.

_config.yml

En las bases de datos que hay disponibles en el gestor phpmyadmin, observamos que hay una con nombre zenphoto que está vacía. Buscando por internet descubrimos que zenphoto se trata de un CMS, por lo que al estar vacío posiblemente puede que se encuenten los ficheros en el servidor pero que no esté instalado. Vemos que en el output del comando dirb, aparece una salida con una carpeta zenphoto, accedemos a ella y nos aparecerá el panel de instalación. Introducimos las crendenciales de la base de datos obtenidas anteriormente y seguimos el gestor de instalación.

_config.yml

Una vez instalado el CMS, te pedirá que reestablezcas las claves de administrador.
Pon las que quieras y logueate.
Si has hecho todo correctamente, una vez logueado verás lo siguiente:

_config.yml

Mirando las distintas funcionalidades que ofrece el CMS, observamos que en la pestaña de uploads, hay una opción, llamda elFinder, que está deshabilitada.Esa opción permite subir ficheros como si se tratase de un FTP.

_config.yml

La habilitamos y vamos a la pestaña de upload. Seleccionamos Upload folder(uploaded) y subimos una reverse shell para que la máquina se conecte a nuestra máquina local.

Para ello hemos hecho click en el número 1 de la siguiente imagen y trás seleccionar el fichero que queremos subir debe de aparecer el número 2.

_config.yml

Vamos a visitar el fichero para que se produzca la conexión inversa.

_config.yml

Una vez dentro de la máquina lo primero que hacemos es buscar la primer flag que indica el enunciado.Se encuntra en /var/www/flag.txt y el contenido es 868c889965b7ada547fae81f922e45c4.

Ahora tenemos que realizar la elevación de privilegios.

Lo primero que realizamos es que version de kernel tenemos instalada

$uname -a  
Linux Orcus 4.4.0-45-generic #66-Ubuntu SMP Wed Oct 19 14:12:05 UTC 2016 i686 i686 i686 GNU/Linux  

buscando por internet vemos que existe este exploit https://www.exploit-db.com/exploits/40871/ pero es para un kernel de 64 bits y no de 32…luego no nos funciona.
Buscamos por si dentro del sistema hubiera algun binario con el bit suid activo, pero no encontramos nada interesante.Trás un buen rato mirando cosas y algo perdido decido volver a mirar el resultado del escaneo de puertos a la máquina y caigo en la cuenta de que hay un nfs abierto. Cogemos y montamos el nfs con el siguiente comando:

sudo mount 10.32.6.104:/ folder_mount/

vemos que la carpeta que nos monta es tmp, por lo que para elevar privilegios realizamos las siguientes acciones.

En la máquina donde tenemos la conexión inversa creada, copiamos el binario de shell a la carpeta /tmp

cd/tmp  
cp /bin/bash root_me 

y ahora desde nuestra máquina ejecutamos:

cd folder_mount/tmp/  
sudo chown root:root root_me  
chmod s+u root_me  

Ahora que ya tenemos la shell creada con el bit suid activo, la ejecutamos y ya somos usuario root

_config.yml

Para aquellos que no conozcan el parámetro p, la definición del man es la siguiente:

-p  Turned on whenever the real and effective user ids do not match.
    Disables processing of the $ENV file and importing of shell functions.
    Turning this option off causes the effective uid and gid to be set to the real uid and gid.

Según el enunciado existen otra flag y una cosa distinta a las otras dos máquinas pero yo no las he buscado, seguramente en otros writeups podáis encontrar la solución para esas dos cosas.


← Vulnhub HackFest Quaoar Vulnhub VulnerableDocker Easy mode »