Ir al contenido principal

Scripts en NMAP

Cuando pensamos en NMAP, pensamos en el escaneo de puertos de un host objetivo al que estamos relizando una prueba de intrusión, pero gracias a las posibilidades que nos ofrecen su Scripting Engine, NMAP es mucho más que eso.

NMAP logo
Antes de continuar, un aviso: algunas de posibilidades que nos ofrecen los scripts de NMAP son bastante intrusivas, por lo que recomiendo hacerlas contra hosts propios, máquinas virtuales como las de Metasploitable, o contrato de pentesting mediante. Para este artículo voy a usar las máquinas de Metasploitable3.

No voy a entrar en los detalles sobre el uso básico de NMAP, ya que hay miles de tutoriales en Internet que hablan sobre ello. Lo cierto es que NMAP tiene algunas opciones que permiten obtener información extra, además de qué puertos están abiertos y cuales no. Por ejemplo, la opción -sV trata de obtener el servicio concreto, e incluso la versión del servicio que está corriendo en cada puerto. Otro ejemplo es la opción -O, que intenta averiguar el sistema operativo del host.

sudo nmap -sV -p80 -O 192.168.56.102
Salida NMAP detección del SO
En este caso, le hemos pedido que nos dé información sobre el servicio que está corriendo en el puerto 80, y el sistema operativo que tiene el host. Vemos que ha hecho un buen trabajo averiguando la versión del servidor web (Microsoft IIS httpd 7.5), pero con el sistema operativo no llega a ser muy concreto en cuanto la versión exacta que hay instalada.

Si miramos el directorio /usr/share/nmap/scripts, observaremos que hay una gran cantidad de archivos con extensión .nse. Son scripts con diversas funcionalidades. Desde la recogida de información hasta la explotación de vulneravilidades. Pero vamos por pasos. Para poder usar uno de estos scripts, utilizamos la opción --script de NMAP. En el siguiente ejemplo vamos a usar un script llamado smb-os-discovery.nse, cuya misión es intentar obtener información del sistema operativo del host objetivo a través del protocolo SMB. Como dicho protocolo usa los puertos 139 y 445, vamos a usar el script usando la siguiente instrucción.

sudo nmap -p139,445 --script=smb-os-discovery 192.168.56.102
Detección SMB del sistema operativo
Gracias al script, hemos obtenido el sistema operativo exacto que usa la máquina, además de alguna información adicional, como el nombre del equipo o el grupo de trabajo de NetBIOS. No está mal ¿no?

Categorías

NMAP viene cargado con más de 600 scripts, y para organizarlos, están divididos en categorías, es decir, que cada script pretenece a una o más categorías. Vamos a hacer un rápido repaso.

auth. Scripts relacionados con la autenticación de usuarios.

broadcast. Descubrimiento de hosts mediante mensajes de broadcast en la red local.

brute. Uso de técnicas de fuerza bruta para descubrir crendenciales sobre diferentes protocolos y aplicaciones.

default. Scripts por defecto, que pueden ser lanzados mediante la opción -sC de NMAP. No tengo claro el criterio, pero supongo que son los scripts más usuales.

discovery. Trata de hacer descubrimiento de hosts e información mediante consultas a servicios SMB, SNMP, directorios LDAP, etc.

dos. Relacionados con ataques tipo DOS (denegación de servicio).

exploit. Script pensados para explotar alguna vulnerabilidad.

external. Son scripts que realizan conexiones con servicios externos, como por ejemplo whois.

fuzzer. Los scripts de esta categoría utilizan técnicas de fuzzing.

intrusive. Son scripts extremadamente intrusivos, que podrían incluso bloquear el host objetivo.

malware. Tratan de identificar si el host ha sido comprometido por algún tipo de malware o tiene alguna puerta trasera.

safe. Son script poco intrusivos que, en principio, no deben dañar el host objetivo.

version. Estos scripts son invocados cuando se usa la opción -sV. No se pueden invocar explícitamente el uso de esta categoría.

vuln. Hacen una búsqueda de vulnerabilidades en el host.

Podemos lanzar los scripts individualmente, como ya hemos visto, o por categorías completas. Los scripts en la categoría default los podemos lanzar con la instrucción nmap -sC. Si queremos lanzar los scripts de otra categoría usamos el modificador --script, pero indicando la categoría en lugar de un script concreto.

nmap --script=vuln
Los nombres de los scripts son bastante representativos, pero si queremos obtener detalles de alguno de ellos podemos usar la opción --script-help.
nmap --script-help smb-enum-users

Uso de los scripts de NMAP para pentesting

Ahora que tenemos una visión general, vamos a ponerlos en práctica contra un host Windows del Metaesploitable3 que os indicaba al principio.

Uno de los servicios que muchas veces no está bien configurado en los servidores Windows es el SNMP, así que suele ser un buen lugar donde lanzar la caña. Veamos si podemos recoger algo usando el script snmp-win32-users. En este caso, como SNMP va por UDP, usaremos el modificador -sU para usar este protocolo, y ya que el puerto de SNMP es el 161, usaremos también el modificador -p161.

$sudo nmap -sU -p161 --script=snmp-win32-users 192.168.56.102
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-29 17:28 CEST
Nmap scan report for 192.168.56.102
Host is up (0.00069s latency).

PORT    STATE SERVICE
161/udp open  snmp
| snmp-win32-users: 
|   Administrator
|   Guest
|   anakin_skywalker
|   artoo_detoo
|   ben_kenobi
|   boba_fett
|   c_three_pio
|   chewbacca
|   darth_vader
|   greedo
|   han_solo
|   jabba_hutt
|   jarjar_binks
|   kylo_ren
|   lando_calrissian
|   leia_organa
|   luke_skywalker
|   sshd
|   sshd_server
|_  vagrant
MAC Address: 08:00:27:DC:53:82 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 13.50 seconds

Estupendo, ahí tenemos a una serie de usuarios del sistema. Un autentico fan de Starwars. Veamos si podemos averiguar qué software está instalado en la máquina.
$sudo nmap -sU -p161 --script=snmp-win32-software 192.168.56.102
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-29 17:32 CEST
Nmap scan report for 192.168.56.102
Host is up (0.00067s latency).

PORT    STATE SERVICE
161/udp open  snmp
| snmp-win32-software: 
|   7-Zip 22.01 (x64); 2023-03-19T02:22:16
|   Java 8 Update 251 (64-bit); 2023-03-19T02:23:56
|   Java SE Development Kit 8 Update 211 (64-bit); 2023-03-19T02:25:46
|   Microsoft .NET Framework 4.5.2; 2023-03-19T02:12:48
|   Microsoft .NET Framework 4.5.2; 2023-03-19T02:12:44
|   Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.6161; 2023-03-19T02:27:48
|   OpenSSH for Windows 7.1p1-1 (remove only); 2023-03-19T02:06:06
|_  Oracle VM VirtualBox Guest Additions 6.0.8; 2023-03-19T02:45:06
MAC Address: 08:00:27:DC:53:82 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 13.45 seconds
Y de camino, los servicios que están corriendo en la máquina.
$sudo nmap -sU -p161 --script=snmp-win32-services 192.168.56.102
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-29 17:33 CEST
Nmap scan report for 192.168.56.102
Host is up (0.00084s latency).

PORT    STATE SERVICE
161/udp open  snmp
| snmp-win32-services: 
|   Apache Tomcat 8.0 Tomcat8
|   Application Host Helper Service
|   Background Intelligent Transfer Service
|   Base Filtering Engine
|   COM+ Event System
|   Certificate Propagation
|   Cryptographic Services
|   DCOM Server Process Launcher
|   DHCP Client
|   DNS Client
|   Desktop Window Manager Session Manager
|   Diagnostic Policy Service
|   Diagnostic System Host
|   Distributed Link Tracking Client
|   Distributed Transaction Coordinator
|   Elasticsearch 1.1.1 (elasticsearch-service-x64)
|   Group Policy Client
|   IKE and AuthIP IPsec Keying Modules
|   IP Helper
|   IPsec Policy Agent
|   MEDC Server Component - Apache
|   MEDC Server Component - Notification Server
|   ManageEngine Desktop Central Server
|   Microsoft FTP Service
|   Network Connections
|   Network List Service
|   Network Location Awareness
|   Network Store Interface Service
|   OpenSSH Server
|   Plug and Play
|   Power
|   Print Spooler
|   RPC Endpoint Mapper
|   Remote Desktop Configuration
|   Remote Desktop Services
|   Remote Desktop Services UserMode Port Redirector
|   Remote Procedure Call (RPC)
|   Remote Registry
|   SNMP Service
|   Security Accounts Manager
|   Server
|   Shell Hardware Detection
|   Software Protection
|   System Event Notification Service
|   TCP/IP NetBIOS Helper
|   Task Scheduler
|   User Profile Service
|   VirtualBox Guest Additions Service
|   Windows Event Log
|   Windows Firewall
|   Windows Font Cache Service
|   Windows Licensing Monitoring Service
|   Windows Management Instrumentation
|   Windows Process Activation Service
|   Windows Remote Management (WS-Management)
|   Windows Update
|   Workstation
|   World Wide Web Publishing Service
|   domain1 GlassFish Server
|   jenkins
|   jmx
|   wampapache
|_  wampmysqld
MAC Address: 08:00:27:DC:53:82 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 13.55 seconds
Con este listado, ya podríamos consultar la base de datos CVE para ver si hay alguna vulnerabilidad en alguno de los programas o servicios, pero ya que estamos, vamos a pedirle a NMAP que nos adelante algo de trabajo pidiendole que lance los scripts de la categoría vuln contra el host.
sudo nmap --script=vuln 192.168.56.102
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-29 17:35 CEST
Nmap scan report for 192.168.56.102
Host is up (0.00055s latency).
Not shown: 981 closed tcp ports (reset)
PORT      STATE SERVICE
21/tcp    open  ftp
22/tcp    open  ssh
80/tcp    open  http
|_http-csrf: Couldn't find any CSRF vulnerabilities.
|_http-dombased-xss: Couldn't find any DOM based XSS.
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
3306/tcp  open  mysql
3389/tcp  open  ms-wbt-server
4848/tcp  open  appserv-http
| ssl-dh-params: 
|   VULNERABLE:
|   Diffie-Hellman Key Exchange Insufficient Group Strength
|     State: VULNERABLE
|       Transport Layer Security (TLS) services that use Diffie-Hellman groups
|       of insufficient strength, especially those using one of a few commonly
|       shared groups, may be susceptible to passive eavesdropping attacks.
|     Check results:
|       WEAK DH GROUP 1
|             Cipher Suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA
|             Modulus Type: Safe prime
|             Modulus Source: RFC2409/Oakley Group 2
|             Modulus Length: 1024
|             Generator Length: 8
|             Public Key Length: 1024
|     References:
|_      https://weakdh.org
7676/tcp  open  imqbrokerd
8009/tcp  open  ajp13
8080/tcp  open  http-proxy
| http-enum: 
|_  ..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f/var/mobile/Library/AddressBook/AddressBook.sqlitedb: Possible iPhone/iPod/iPad generic file sharing app Directory Traversal (iOS)
8181/tcp  open  intermapper
| ssl-dh-params: 
|   VULNERABLE:
|   Diffie-Hellman Key Exchange Insufficient Group Strength
|     State: VULNERABLE
|       Transport Layer Security (TLS) services that use Diffie-Hellman groups
|       of insufficient strength, especially those using one of a few commonly
|       shared groups, may be susceptible to passive eavesdropping attacks.
|     Check results:
|       WEAK DH GROUP 1
|             Cipher Suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA
|             Modulus Type: Safe prime
|             Modulus Source: RFC2409/Oakley Group 2
|             Modulus Length: 1024
|             Generator Length: 8
|             Public Key Length: 1024
|     References:
|_      https://weakdh.org
8383/tcp  open  m2mservices
| ssl-dh-params: 
|   VULNERABLE:
|   Diffie-Hellman Key Exchange Insufficient Group Strength
|     State: VULNERABLE
|       Transport Layer Security (TLS) services that use Diffie-Hellman groups
|       of insufficient strength, especially those using one of a few commonly
|       shared groups, may be susceptible to passive eavesdropping attacks.
|     Check results:
|       WEAK DH GROUP 1
|             Cipher Suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA
|             Modulus Type: Safe prime
|             Modulus Source: RFC2409/Oakley Group 2
|             Modulus Length: 1024
|             Generator Length: 8
|             Public Key Length: 1024
|     References:
|_      https://weakdh.org
9200/tcp  open  elasticsearch
49152/tcp open  unknown
49153/tcp open  unknown
49154/tcp open  unknown
49176/tcp open  unknown
MAC Address: 08:00:27:DC:53:82 (Oracle VirtualBox virtual NIC)

Host script results:
|_smb-vuln-ms10-054: false
|_smb-vuln-ms10-061: NT_STATUS_ACCESS_DENIED
| smb-vuln-ms17-010: 
|   VULNERABLE:
|   Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)
|     State: VULNERABLE
|     IDs:  CVE:CVE-2017-0143
|     Risk factor: HIGH
|       A critical remote code execution vulnerability exists in Microsoft SMBv1
|        servers (ms17-010).
|           
|     Disclosure date: 2017-03-14
|     References:
|       https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/
|       https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
|_      https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143
|_samba-vuln-cve-2012-1182: NT_STATUS_ACCESS_DENIED

Nmap done: 1 IP address (1 host up) scanned in 152.97 seconds
NMAP ha encontrado por nosotros algunos problemas, como posibles debilidades criptográficas, y lo mejor de todo, vulnerabilidades como la CVE-2017-0143 que tiene SMBv1, que permite la ejecución remota de código. Sólo con esta información, ya tendríamos material interesante para pasar a la fase de explotación de nuestro test de intrusión. Aunque de eso ya hablaremos otro día. Por hoy podemos descansar, que nos lo hemos ganado.

Comentarios

Entradas populares de este blog

Creando firmas de virus para ClamAV

ClamAv es un antivirus opensource y multiplataforma creado por Tomasz Kojm muy utilizado en los servidores de correo Linux. Este antivirus es desarrollado por la comunidad, y su utilidad práctica depende de que su base de datos de firmas sea lo suficientemente grande y actualizado. Para ello es necesario que voluntarios contribuyan activamente aportando firmas. El presente artículo pretende describir de manera sencilla cómo crear firmas de virus para ClamAV y contribuir con ellas a la comunidad.

Manejo de grafos con NetworkX en Python

El aprendizaje computacional es un área de investigación que en los últimos años ha tenido un auge importante, sobre todo gracias al aprendizaje profundo (Deep Learning). Pero no todo son redes neuronales. Paralelamente a estas técnicas, más bien basadas en el aprendizaje de patrones, también hay un auge de otras técnicas, digamos, más basadas en el aprendizaje simbólico. Si echamos la vista algunos años atrás, podemos considerar que quizá, la promesa de la web semántica como gran base de conocimiento ha fracasado, pero no es tan así. Ha ido transmutándose y evolucionando hacia bases de conocimiento basadas en ontologías a partir de las cuales es posible obtener nuevo conocimiento. Es lo que llamamos razonamiento automático y empresas como Google ya lo utilizan para ofrecerte información adicional sobre tus búsquedas. Ellos lo llaman Grafos de Conocimiento o Knowledge Graphs . Gracias a estos grafos de conocimiento, Google puede ofrecerte información adicional sobre tu búsqueda, ad