Un script es una pieza de código que no necesita ser compilada. Es deicir que permanece en un estado legible para un humano. Muchos programas ofrecen funcionalidades extra vía scripts. Además los scripts hacen posible añadir funcionalidades personalizadas que no existían en los comandos. Nmap ofrece soporte de scripts usando el lengueje Lua. El motor de scripting de Nmap (NSE) es un interpretador de Lua que permite a Nmap hacer uso de scripts.
La instalación por defecto de Nmap puede contener hasta 600 scripts. Estos están en la ruta /usr/share/nmap/scripts. Estos scripts están convenientemente nombrados empezando por el protocolo al que se dirigen. Podemos encontrar alrededor de 120 scripts que empiezan con HTTP:
pentester@AttackBox /usr/share/nmap/scripts# ls http* http-adobe-coldfusion-apsa1301.nse http-passwd.nse http-affiliate-id.nse http-php-version.nse http-apache-negotiation.nse http-phpmyadmin-dir-traversal.nse http-apache-server-status.nse http-phpself-xss.nse http-aspnet-debug.nse http-proxy-brute.nse http-auth-finder.nse http-put.nse http-auth.nse http-qnap-nas-info.nse http-avaya-ipoffice-users.nse http-referer-checker.nse http-awstatstotals-exec.nse http-rfi-spider.nse http-axis2-dir-traversal.nse http-robots.txt.nse http-backup-finder.nse http-robtex-reverse-ip.nse http-barracuda-dir-traversal.nse http-robtex-shared-ns.nse http-brute.nse http-security-headers.nse http-cakephp-version.nse http-server-header.nse http-chrono.nse http-shellshock.nse http-cisco-anyconnect.nse http-sitemap-generator.nse http-coldfusion-subzero.nse http-slowloris-check.nse http-comments-displayer.nse http-slowloris.nse http-config-backup.nse http-sql-injection.nse http-cookie-flags.nse http-stored-xss.nse http-cors.nse http-svn-enum.nse http-cross-domain-policy.nse http-svn-info.nse http-csrf.nse http-title.nse http-date.nse http-tplink-dir-traversal.nse http-default-accounts.nse http-trace.nse http-devframework.nse http-traceroute.nse http-dlink-backdoor.nse http-unsafe-output-escaping.nse http-dombased-xss.nse http-useragent-tester.nse http-domino-enum-passwords.nse http-userdir-enum.nse http-drupal-enum-users.nse http-vhosts.nse http-drupal-enum.nse http-virustotal.nse http-enum.nse http-vlcstreamer-ls.nse http-errors.nse http-vmware-path-vuln.nse http-exif-spider.nse http-vuln-cve2006-3392.nse http-favicon.nse http-vuln-cve2009-3960.nse http-feed.nse http-vuln-cve2010-0738.nse http-fetch.nse http-vuln-cve2010-2861.nse http-fileupload-exploiter.nse http-vuln-cve2011-3192.nse http-form-brute.nse http-vuln-cve2011-3368.nse http-form-fuzzer.nse http-vuln-cve2012-1823.nse http-frontpage-login.nse http-vuln-cve2013-0156.nse http-generator.nse http-vuln-cve2013-6786.nse http-git.nse http-vuln-cve2013-7091.nse http-gitweb-projects-enum.nse http-vuln-cve2014-2126.nse http-google-malware.nse http-vuln-cve2014-2127.nse http-grep.nse http-vuln-cve2014-2128.nse http-headers.nse http-vuln-cve2014-2129.nse http-huawei-hg5xx-vuln.nse http-vuln-cve2014-3704.nse http-icloud-findmyiphone.nse http-vuln-cve2014-8877.nse http-icloud-sendmsg.nse http-vuln-cve2015-1427.nse http-iis-short-name-brute.nse http-vuln-cve2015-1635.nse http-iis-webdav-vuln.nse http-vuln-cve2017-1001000.nse http-internal-ip-disclosure.nse http-vuln-cve2017-5638.nse http-joomla-brute.nse http-vuln-cve2017-5689.nse http-litespeed-sourcecode-download.nse http-vuln-cve2017-8917.nse http-ls.nse http-vuln-misfortune-cookie.nse http-majordomo2-dir-traversal.nse http-vuln-wnr1000-creds.nse http-malware-host.nse http-waf-detect.nse http-mcmp.nse http-waf-fingerprint.nse http-method-tamper.nse http-webdav-scan.nse http-methods.nse http-wordpress-brute.nse http-mobileversion-checker.nse http-wordpress-enum.nse http-ntlm-info.nse http-wordpress-users.nse http-open-proxy.nse http-xssed.nse http-open-redirect.nse
Puedes especificar usar cualquiera (o un grupo) de estos scripts. Además puedes instalar más scripts e incluso hacer los tuyos propios. Para elegir scripts de la categoría default (por defecto) puedes usar --script=default o añadir -sC. Las categorías son:
| Categoría de Script | Descripción |
|---|---|
auth | Scripts relacionados con la autenticación |
broadcast | Descubre hosts mandando mensajes de broadcast |
brute | Realiza auditoría de contraseñas de fuerza bruta contra logins |
default | Scripts por defecto (lo mismo que -sC) |
discovery | Recupera información accesible como bases de datos y nombres DNS |
dos | Detecta servidores vulnerables a Denegación de Servicio (DoS) |
exploit | Intenta explotar servicios vulnerables |
external | Comprueba usando un servicio de terceros como Geoplugin o Virustotal |
fuzzer | Lanza ataques de fuzzeo |
intrusive | Scripts intrusivos como fuerza bruta y explotación |
malware | Escanea en busca de backdoors |
safe | Scripts seguros que no crashearán al objetivo |
version | Devuelve versiones de servicio |
vuln | Comprueba vulnerabilidades o explota servicios vulnerables |
Si queremos lanzar un escaneo SYN contra una IP y ejecutar los scripts por defecto el comando essudo nmap -sS -sC >IP_OBJETIVO>.
pentester@TryHackMe$ sudo nmap -sS -sC 10.80.135.73 Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-10 05:08 BST Nmap scan report for ip-10-10-161-170.eu-west-1.compute.internal (10.10.161.170) Host is up (0.0011s latency). Not shown: 994 closed ports PORT STATE SERVICE 22/tcp open ssh | ssh-hostkey: | 1024 d5:80:97:a3:a8:3b:57:78:2f:0a:78:ae:ad:34:24:f4 (DSA) | 2048 aa:66:7a:45:eb:d1:8c:00:e3:12:31:d8:76:8e:ed:3a (RSA) | 256 3d:82:72:a3:07:49:2e:cb:d9:87:db:08:c6:90:56:65 (ECDSA) |_ 256 dc:f0:0c:89:70:87:65:ba:52:b1:e9:59:f7:5d:d2:6a (EdDSA) 25/tcp open smtp |_smtp-commands: debra2.thm.local, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, | ssl-cert: Subject: commonName=debra2.thm.local | Not valid before: 2021-08-10T12:10:58 |_Not valid after: 2031-08-08T12:10:58 |_ssl-date: TLS randomness does not represent time 80/tcp open http |_http-title: Welcome to nginx on Debian! 110/tcp open pop3 |_pop3-capabilities: RESP-CODES CAPA TOP SASL UIDL PIPELINING AUTH-RESP-CODE 111/tcp open rpcbind | rpcinfo: | program version port/proto service | 100000 2,3,4 111/tcp rpcbind | 100000 2,3,4 111/udp rpcbind | 100024 1 38099/tcp status |_ 100024 1 54067/udp status 143/tcp open imap |_imap-capabilities: LITERAL+ capabilities IMAP4rev1 OK Pre-login ENABLE have LOGINDISABLEDA0001 listed SASL-IR ID more post-login LOGIN-REFERRALS IDLE MAC Address: 02:A0:E7:B5:B6:C5 (Unknown) Nmap done: 1 IP address (1 host up) scanned in 2.21 seconds
También puedes especificar el script por su nombre usando --script "NOMBRE-SCRIPT" o por patrones --script "ftp*", lo que incluirá, por ejemplo, ftp-brute.
Consideremos un script benigno, como http-date que devolverá la fecha y hora del servidor.
pentester@TryHackMe$ sudo nmap -sS -n --script "http-date" 10.80.135.73 Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-10 08:04 BST Nmap scan report for 10.80.135.73 Host is up (0.0011s latency). Not shown: 994 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http |_http-date: Fri, 10 Sep 2021 07:04:26 GMT; 0s from local time. 110/tcp open pop3 111/tcp open rpcbind 143/tcp open imap MAC Address: 02:44:87:82:AC:83 (Unknown) Nmap done: 1 IP address (1 host up) scanned in 1.78 seconds
