A 03-01 vam obtenir una taula de ports oberts per host: a dev (10.10.10.15) vam veure el 22, 80, 3306, 8080 i un misteriós 54321; a db-interno (10.10.10.40) el 53 i el 161/UDP; a la botiga el 80 i el 443. Però aquell 3306/tcp mysql és només una etiqueta que Nmap posa pel número de port: qualsevol pot posar un servei a qualsevol port. No sabem quina versió corre, quin servidor web serveix el 80, ni què dimonis és el 54321.
Enumerar serveis és respondre aquesta pregunta: per a cada port obert, quin servei és, quina versió, quin sistema operatiu l'allotja i quina informació exposa. L'entregable d'aquesta lliçó és un inventari de serveis amb versions —la peça que a 03-03 creuarem amb vulnerabilitats conegudes—. Aquí identifiquem i inventariem; encara no valorem ni prioritzem vulnerabilitats. I, com sempre, dins de l'abast: l'enumeració també genera trànsit i algunes sondes (força bruta de recursos, consultes SNMP massives) poden ser intrusives, així que s'acorden i es documenten.
Contingut
- De port obert a servei identificat
- Detecció de versions amb Nmap (
-sV) - Detecció de sistema operatiu (
-O) - Banner grabbing manual
- Enumeració per protocol: panorama
- HTTP/HTTPS: whatweb, nikto i NSE
- SMB: enum4linux i smbclient
- SNMP: snmpwalk
- Altres: FTP, SSH, SMTP, DNS, MySQL
- L'inventari de serveis de TechNova
- Contrapartida defensiva
- Errors comuns i consells
- Exercicis
- Conclusió
- De port obert a servei identificat
L'escaneig de ports diu on escolta alguna cosa; l'enumeració diu què escolta i què explica de si mateix. La diferència és enorme per a un pentester:
- "El 3306 està obert" → no sé si és explotable.
- "El 3306 és MySQL 5.5.62, sense TLS, i accepta connexions des de la xarxa" → ja puc buscar vulnerabilitats concretes d'aquesta versió.
La versió és la dada més valuosa d'aquesta fase, perquè les vulnerabilitats conegudes estan lligades a versions concretes (ho veurem a 03-03 amb CVE i CPE). Per això l'objectiu central és afinar cada port obert fins a un servei + versió.
- Detecció de versions amb Nmap (
-sV)
-sV)-sV fa que Nmap, després de trobar un port obert, interrogui el servei enviant sondes i comparant les respostes amb la seva base de dades de firmes (nmap-service-probes). Retorna el servei real i, sovint, la versió exacta.
PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.29 ((Ubuntu)) 3306/tcp open mysql MySQL 5.5.62-0ubuntu0.14.04.1 8080/tcp open http Jetty 9.4.z-SNAPSHOT 54321/tcp open http Werkzeug httpd 0.14.1 (Python 3.6.9)
Lectura línia a línia:
22 ... OpenSSH 7.6p1 Ubuntu: no només "ssh", sinó la versió exacta i que el sistema és Ubuntu (dada de SO de franc).80 ... Apache httpd 2.4.29: el servidor web és Apache 2.4.29.3306 ... MySQL 5.5.62: la base de dades ja no és una etiqueta: és MySQL 5.5.62, una versió antiga (pista per a 03-03).8080 ... Jetty 9.4.z: un servidor Java Jetty, probablement una aplicació diferent.54321 ... Werkzeug httpd 0.14.1 (Python 3.6.9): resolt el misteri: el port estrany és una app web en Python/Flask (Werkzeug és el seu servidor de desenvolupament). Que corri el servidor de desenvolupament en un port exposat és en si un indici de mala configuració.
Opcions útils: --version-intensity 0-9 regula quantes sondes envia (més intensitat = més precís però més sorollós); -sV --version-light és un compromís ràpid.
- Detecció de sistema operatiu (
-O)
-O)-O intenta endevinar el SO analitzant detalls de la pila TCP/IP (fingerprinting): valors inicials de TTL, mida de finestra, opcions TCP... Cada SO té una "empremta" diferent.
Running: Linux 4.X|5.X OS CPE: cpe:/o:linux:linux_kernel:4 OS details: Linux 4.15 - 5.6 Network Distance: 1 hop
Running: Linux 4.X|5.X: és un Linux amb kernel de la sèrie 4 o 5.OS CPE: cpe:/o:linux:linux_kernel:4: apareix el CPE, l'identificador estandarditzat que farem servir a 03-03 per buscar vulnerabilitats.Network Distance: 1 hop: està a un salt (mateixa xarxa), coherent amb l'auditoria interna.
Una drecera molt usada és -A, que combina -sV -O més scripts per defecte i traceroute:
És còmode, però més sorollós; en escenaris sigilosos es prefereix llançar -sV i -O per separat i controlats.
- Banner grabbing manual
No sempre cal Nmap. Molts serveis es presenten sols en connectar (el banner). Connectar-se a mà amb netcat o openssl confirma versions i de vegades revela detalls que Nmap resumeix:
# Capcaleres HTTP: demanem i llegim la resposta del servidor
printf 'HEAD / HTTP/1.0\r\n\r\n' | nc 10.10.10.15 80La capçalera X-Powered-By: PHP/7.2.24 és or: confirma que darrere d'Apache hi ha PHP 7.2 (la versió sense suport que ja sospitàvem de la botiga). Per a serveis sobre TLS es fa servir openssl s_client -connect host:443 en lloc de nc.
- Enumeració per protocol: panorama
A partir de la versió, cada protocol té les seves pròpies tècniques d'enumeració per extreure informació. Mapa de què mirar segons el port:
| Port | Servei | Què enumerar | Eines |
|---|---|---|---|
| 80/443 | HTTP/S | Tecnologies, rutes, fitxers, capçaleres | whatweb, nikto, nmap NSE, dirb |
| 139/445 | SMB | Recursos compartits, usuaris, polítiques | enum4linux, smbclient, nmap NSE |
| 161/UDP | SNMP | Interfícies, processos, usuaris, rutes | snmpwalk, onesixtyone |
| 21 | FTP | Accés anònim, versió, llistats | nmap NSE, ftp |
| 22 | SSH | Versió, mètodes d'autenticació | nmap NSE, banner |
| 25 | SMTP | Usuaris (VRFY/EXPN), relay obert | nmap NSE, smtp-user-enum |
| 53 | DNS | Registres, transferència de zona | dig, nslookup, nmap NSE |
| 3306 | MySQL | Versió, usuaris, accés remot | nmap NSE, mysql |
Nmap porta la NSE (Nmap Scripting Engine): scripts categoritzats. Aquí fem servir la categoria safe d'enumeració (no la vuln, que és de 03-03). Els scripts viuen a /usr/share/nmap/scripts/ i s'invoquen amb --script.
- HTTP/HTTPS: whatweb, nikto i NSE
La botiga és l'objectiu estrella, així que la seva enumeració web és prioritària. Primer whatweb per identificar tecnologies:
http://tienda.technova.lab [200 OK] Apache[2.4.29], PHP[7.2.24], Country[RESERVED][ZZ], HTTPServer[Ubuntu][Apache/2.4.29 (Ubuntu)], JQuery[1.12.4], Script, X-Powered-By[PHP/7.2.24]
Confirma Apache 2.4.29, PHP 7.2.24 i jQuery 1.12.4 (totes versions antigues). Després nikto, un escàner de servidor web que busca fitxers i configuracions conegudes (l'utilitzem aquí com a reconeixement, no com a veredicte de vulnerabilitat):
+ Server: Apache/2.4.29 (Ubuntu) + /admin/: Directory indexing found. + /config.php.bak: Backup file found, possibly discloses credentials. + /phpinfo.php: Output from the phpinfo() function was found. + Cookie PHPSESSID created without the httponly flag.
Troballes d'enumeració molt útils: un directori /admin/ amb llistat, un config.php.bak (possible fuga de credencials) i un phpinfo.php (revela tota la configuració PHP). Amb NSE ampliem amb scripts segurs:
80/tcp open http | http-title: TechNova - Tienda Online | http-methods: | Supported Methods: GET HEAD POST OPTIONS | http-enum: | /admin/: Possible admin folder | /login.php: Possible admin login
- SMB: enum4linux i smbclient
Si en un host Windows o Samba apareixen el 139/445, SMB és una font riquíssima. A TechNova hi ha estacions i un controlador de xarxa; suposem que 10.10.10.55 (estació) els té oberts. enum4linux automatitza l'enumeració:
[+] Server allows sessions using username '', password '' (null session) ... [+] Users via RID cycling: TECHNOVA\Administrador (RID 500) TECHNOVA\jlopez (RID 1103) TECHNOVA\mgarcia (RID 1104) [+] Share Enumeration: Sharename Type Comment --------- ---- ------- RRHH Disk Documentos RRHH IPC$ IPC IPC Service
Un null session (sessió sense credencials) permet llistar usuaris (reapareixen jlopez i mgarcia del recon!) i recursos compartits com RRHH. Amb smbclient intentem accedir al recurs (dins de l'abast):
Poder llistar RRHH amb -N (sense contrasenya) és una fallada de configuració seriosa. Ho documentem; explotar-lo a fons és matèria de mòduls posteriors.
- SNMP: snmpwalk
A 03-01 vam veure el 161/UDP (SNMP) obert a db-interno. SNMP amb la comunitat per defecte (public) exposa un bolcat enorme d'informació interna. Primer endevinem la comunitat amb onesixtyone, després snmpwalk:
SNMPv2-MIB::sysDescr.0 = STRING: Linux db-interno 4.15.0-112-generic HOST-RESOURCES-MIB::hrSWRunName.42 = STRING: mysqld IP-MIB::ipAdEntAddr.10.10.10.40 = IpAddress: 10.10.10.40 TCP-MIB::tcpConnLocalPort = INTEGER: 3306
SNMP ens regala: el SO exacte (Linux 4.15.0-112), els processos en execució (mysqld corrent), les interfícies de xarxa i els ports locals. És enumeració interna gairebé de franc, i per això SNMP amb public és una troballa clàssica.
- Altres: FTP, SSH, SMTP, DNS, MySQL
Escombrat d'altres protocols habituals amb NSE i clients natius:
# FTP: comprovar acces anonim i versio
nmap --script ftp-anon,ftp-syst -p 21 10.10.10.60
# SMTP: enumerar usuaris valids i comprovar relay obert
nmap --script smtp-commands,smtp-open-relay -p 25 correo.technova.lab
# DNS: versio del servidor
dig @10.10.10.40 version.bind chaos txt
# MySQL: versio i capacitats (script segur/info)
nmap --script mysql-info -p 3306 10.10.10.15Exemple de sortida de mysql-info:
3306/tcp open mysql | mysql-info: | Protocol: 10 | Version: 5.5.62-0ubuntu0.14.04.1 | Capabilities flags: 63487 | Salt: k5*Lp2...
Confirma MySQL 5.5.62 des del mateix protocol (no només per -sV), i que accepta connexions des de la xarxa —una base de dades no hauria d'estar exposada així—.
- L'inventari de serveis de TechNova
Consolidem tot en l'entregable de la lliçó: un inventari de serveis amb versions. Ordenat, és l'entrada directa de 03-03.
| Host | Port | Servei | Versió | SO | Notes d'enumeració |
|---|---|---|---|---|---|
| tienda.technova.lab | 80 | Apache | 2.4.29 | Ubuntu | PHP 7.2.24, jQuery 1.12.4, /admin/, config.php.bak |
| tienda.technova.lab | 443 | Apache (TLS) | 2.4.29 | Ubuntu | Mateix vhost sobre HTTPS |
| 10.10.10.15 (dev) | 22 | OpenSSH | 7.6p1 | Ubuntu | — |
| 10.10.10.15 (dev) | 80 | Apache | 2.4.29 | Ubuntu | App PHP |
| 10.10.10.15 (dev) | 3306 | MySQL | 5.5.62 | Ubuntu | Exposada a la xarxa |
| 10.10.10.15 (dev) | 8080 | Jetty | 9.4.z | Ubuntu | App Java |
| 10.10.10.15 (dev) | 54321 | Werkzeug/Flask | 0.14.1 (Py 3.6.9) | Ubuntu | Servidor de desenvolupament exposat |
| 10.10.10.40 (db) | 161/UDP | SNMP | v2c comunitat public |
Linux 4.15 | Bolcat intern accessible |
| 10.10.10.55 (est.) | 445 | Samba/SMB | — | Windows | Null session, share RRHH |
Fixa't: passem de "ports oberts" a un qui-és-qui amb versions llest per buscar CVE. Aquest és exactament el material que necessita la lliçó següent.
- Contrapartida defensiva
Tota aquesta enumeració es recolza en el fet que els serveis donen massa informació. El hardening corresponent:
- Ocultar banners i versions.
ServerTokens Proda Apache, treureX-Powered-Byde PHP, banners neutres a SSH/SMTP. No impedeix l'atac, però dificulta el mapatge. - Tancar sessions nul·les d'SMB (
restrict anonymous), desactivar SMBv1 i no exposar recursos comRRHHsense autenticació. - SNMP: canviar la comunitat
public, fer servir SNMPv3 amb autenticació i xifratge, o desactivar-lo si no es fa servir. - No exposar bases de dades (
bind-address 127.0.0.1a MySQL); mai deixar servidors de desenvolupament (Werkzeug,phpinfo.php,.bak) en sistemes accessibles. - Detecció: l'enumeració amb
-sVi NSE genera connexions completes i patrons reconeixibles; un IDS ben afinat i el registre d'accessos anòmals (moltes peticions a rutes inexistents, consultes SNMP externes) la delaten.
- Errors Comuns i Consells
- Refiar-se del
SERVICEper número de port. El3306podria no ser MySQL. Confirma sempre amb-sVo banner grabbing. - Saltar directe a
--script vuln. Això és 03-03. Aquí toca inventariar amb scriptssafe/d'enumeració; barrejar fases embruta la feina. - Ignorar UDP i SNMP. SNMP amb
publicdóna mig informe fet i molta gent ni el mira per ser UDP. - Enumeració web sense context. nikto i whatweb solten molt soroll; anota el rellevant (versions, rutes, fitxers sensibles) i descarta la resta.
- Sessions nul·les no documentades. Si un null session et dóna usuaris i shares, és una troballa per si mateixa: registra-la, no la donis per feta.
- Ser massa intrusiu. Algunes sondes (força bruta de directoris agressiva, consultes SNMP massives) carreguen el servei. Ajusta intensitat i respecta la finestra.
- Consell: mantén un inventari viu en taula (host/port/servei/versió/notes) des de la primera comanda. Aquest document és literalment l'entrada de 03-03.
- Exercicis
Exercici 1. Tens el 8080/tcp open de dev però Nmap només va dir "http-proxy" a 03-01. Escriu la comanda per identificar servei i versió d'aquest port i explica quina informació esperaries obtenir i per què és més útil que "http-proxy".
Exercici 2. A 10.10.10.55 un enum4linux -a retorna una null session amb la llista d'usuaris i un recurs RRHH accessible amb smbclient -N. Classifica què és enumeració (propi d'aquesta lliçó) i què seria ja explotació (mòduls posteriors), i què has de fer aquí i ara.
Exercici 3. Justifica, amb dos exemples concrets de l'inventari de TechNova, per què la versió és la dada més valuosa d'aquesta fase de cara a la lliçó següent (03-03).
Solucions
Solució 1.
-sV interroga el servei i el compara amb les firmes de Nmap; amb intensitat alta afina la versió. Esperaríem alguna cosa com Jetty 9.4.z-SNAPSHOT (servidor Java) en lloc de l'etiqueta genèrica "http-proxy". És més útil perquè "http-proxy" és només una suposició per número de port, mentre que "Jetty 9.4.z" identifica el programari real i la seva versió, que és el que permet buscar vulnerabilitats concretes a 03-03.
Solució 2. Enumeració (aquesta lliçó): descobrir que existeix la null session, llistar usuaris (jlopez, mgarcia, Administrador) i llistar/llegir els noms del recurs RRHH. Tot això és inventariar informació exposada. Explotació (mòduls posteriors): fer servir aquests usuaris per a atacs de contrasenyes (Mòdul 4), o descarregar i exfiltrar els fitxers de RRHH com a part d'un accés. Aquí i ara: documentar la fallada (SMB permet sessió nul·la i exposa RRHH sense autenticació) amb evidència, i incloure-la a l'inventari; no anar més enllà del que l'abast autoritzi en aquesta fase.
Solució 3. Exemple A: MySQL 5.5.62 — sense la versió només sabríem "hi ha una base de dades"; amb la versió podem buscar a la NVD/exploit-db els CVE específics de MySQL 5.5.62 (03-03). Exemple B: PHP 7.2.24 / Apache 2.4.29 — versions concretes sense suport els CVE conegudes de les quals podrem llistar i prioritzar. La versió és la clau de cerca que connecta un servei amb la seva llista de vulnerabilitats conegudes; sense ella, la detecció de vulnerabilitats de la propera lliçó seria endevinar.
Conclusió
Hem transformat la taula de ports oberts en un inventari de serveis amb versions: ja no tenim "el 3306 obert", sinó "MySQL 5.5.62 exposat a la xarxa en un host Ubuntu 4.15"; no "el 80 obert", sinó "Apache 2.4.29 amb PHP 7.2.24, amb /admin/ llistable i un config.php.bak"; i hem resolt misteris com el 54321 (un Werkzeug/Flask de desenvolupament). Pel camí hem fet servir -sV, -O, banner grabbing manual i enumeració específica per protocol (whatweb, nikto, enum4linux, smbclient, snmpwalk, NSE), sempre identificant i inventariant, sense valorar encara la gravetat.
I aquesta és just la frontera que creuem ara. Tenim una llista de programari amb versions concretes, moltes d'elles visiblement antigues (MySQL 5.5, PHP 7.2, jQuery 1.12, un servidor de desenvolupament exposat, SMB amb sessió nul·la, SNMP public). La pregunta ja no és "què hi ha", sinó "què d'això és vulnerable, com de greu i per on convé començar".
A 03-03 Detecció de Vulnerabilitats, l'última lliçó del mòdul, creuarem aquest inventari amb les bases de dades de vulnerabilitats conegudes (CVE, CPE, NVD, exploit-db), passarem escàners (Nessus/OpenVAS, nmap --script vuln, nuclei) i, sobretot, validarem críticament els resultats per separar el fals positiu de la troballa real. El resultat serà una llista prioritzada de vulnerabilitats candidates: el pont cap a l'explotació del Mòdul 4.
Curs de Pentesting: Tècniques de Proves de Penetració
Mòdul 1: Introducció al Pentesting
- Què és el Pentesting?
- Tipus de Pentesting
- Fases del Pentesting
- Ètica i Legalitat en el Pentesting
- Metodologies i Estàndards del Sector
Mòdul 2: Reconeixement i Recollida d'Informació
- Reconeixement Passiu
- Reconeixement Actiu
- Eines de Recollida d'Informació
- OSINT i Anàlisi de la Superfície d'Atac
Mòdul 3: Escaneig i Enumeració
Mòdul 4: Explotació de Vulnerabilitats
- Introducció a l'Explotació
- Explotació de Vulnerabilitats Web
- Explotació de Vulnerabilitats de Xarxa
- Explotació de Vulnerabilitats de Sistemes
- Atacs a Contrasenyes i Autenticació
Mòdul 5: Post-Explotació
- Escalada de Privilegis
- Manteniment de l'Accés
- Pivoting i Moviment Lateral
- Cobertura de Petjades i Anti-Forense
Mòdul 6: Informe i Remediació
- Documentació de Troballes
- Classificació de Riscos i CVSS
- Recomanacions de Remediació
- Presentació de Resultats
