> For the complete documentation index, see [llms.txt](https://hacking-3.gitbook.io/barre/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-3.gitbook.io/barre/apuntes/red-team/tools/nmap.md).

# Nmap

<figure><img src="/files/6xOJ4BJiDXwjIw73DPgB" alt=""><figcaption></figcaption></figure>

## Comando rápido

```bash
sudo nmap -sSCV -n -Pn --min-rate 4500 -vvv -p- --open IP
```

```bash
sudo nmap -p- --open -sS -sC -sV --min-rate 5000 -vvv -n -Pn IP 
```

## Host discovery

```bash
nmap -sn
```

* Opción que dice que no escanee los puertos después del host discover. *Esta opción manda TCP al puerto 80 y 443, si no hay servicios corriendo dará (0 host up).*

```bash
sudo nmap -sn
```

* *Si lo haces con "sudo" hace uso del protocolo ARP, que sirve para asociar IP con MAC, también la opción son "sudo" es menos intrusiva.*

```bash
nmap -PS
```

* Escanea puertos y host *Para comprobar si el host esta up hace petición por el puerto 80, si no hay nada aparece (0 host up), para cambiar el "host port 80" se pone (-PS443 "todo junto").*

## Escaneo de puertos

```bash
sudo -sS
```

* Hace petición a cada uno de los puertos (65536). *Con "-p" puedes indicar los puertos, también es necesario "sudo", además de que deja el 3 Way Hand Shake a medias.*

```bash
-sT
```

* Exactamente igual que "-sS", tan solo que funciona sin "sudo" y hace el 3 Way Hand Shake completo.&#x20;

```bash
-sU
```

* Busca servicios con el protocolo UDP.&#x20;

## Escaneo de versiones

```bash
-sV 
```

Te dice la version del protocolo.&#x20;

## Escaneo de vulnerabilidades

```bash
sudo nmap --script=vuln IP 
```

## Identificar OS

```bash
-o
```

* Es la opción de nmap que muestra el SO.&#x20;
* *También se puede saber mandando un "ping IP" y viendo en  ttl -> 64 Linux | 128 Windows*&#x20;

## Scripts de nmap

```bash
--script = NombreDelScript
```

* Se encuentran en -> /usr/share/nmap/scripts&#x20;
* Aquí hay muchos scripts interesantes de escaneo y explotación.&#x20;

## Comandos de informe

```bash
-v / -vvv
```

* mas info *cuantos más "v" más info.*

```bash
--reason
```

* Razón por la que esta cerrado/abierto y como lo a identificado.&#x20;

```bash
-oX archivo
```

```bash
-oN archivo
```

* Exporta a un fichero *Hay más formas de exportar, estos son solo ejemplos.*

```bash
--stylesheet = "url"
```

* Para que se vea bonito el fichero a exportar.&#x20;

## Estados de los puertos

* `Open`: Acepta TCP, UDP o SCTP.&#x20;
* `Close`: Accesible pero no hay nada.&#x20;
* `Filtered`: Nmap no puede determinar si esta open o close ya que no le es accesible, posiblemente por "Firewall".&#x20;
* `Unfiltered`: Es accesible pero no sabe si esta open o close.&#x20;

## Escaneo agresivo

Escaneo con el parámetro -A

```bash
nmap -A -p- --min-rate 5000 -vvv -n -Pn <IP> -oG resultado
```

Equivale a:

```bash
nmap -sV -sC -O <IP>
```

Versión, scripts por defecto y sistema operativo

## Ampliación de Comandos

<table><thead><tr><th width="60.2833251953125">No.</th><th>Command</th><th>Explanation</th></tr></thead><tbody><tr><td>1</td><td>nmap -sP 192.168.1.0/24</td><td>Scan the network to discover active<br>devices.</td></tr><tr><td>2</td><td>nmap -sn 192.168.1.0/24</td><td>Ping scan to discover live hosts without<br>port scanning.</td></tr><tr><td>3</td><td>nmap -sV 192.168.1.1</td><td>Detect the versions of services running on<br>open ports.</td></tr><tr><td>4</td><td>nmap -sS 192.168.1.1</td><td>Perform a TCP SYN scan to detect open<br>ports on the device.</td></tr><tr><td>5</td><td>nmap -O 192.168.1.1</td><td>Determine the operating system used on<br>the device</td></tr><tr><td>6</td><td>nmap -A 192.168.1.1</td><td>Comprehensive scan including open ports,<br>service versions, and OS detection.</td></tr><tr><td>7</td><td>nmap -Pn 192.168.1.1</td><td>Scan devices even if they do not respond<br>to Ping requests.</td></tr><tr><td>8</td><td>nmap -sU 192.168.1.1 </td><td>Scan for open UDP ports.</td></tr><tr><td>9</td><td>nmap -p- 192.168.1.1</td><td>Scan all ports (1-65535) instead of just<br>default ports.</td></tr><tr><td>10</td><td>nmap --script vuln 192.168.1.1</td><td>Use scripts to check for vulnerabilities.</td></tr><tr><td>11</td><td>nmap --script smb-enum-shares -p 445<br>192.168.1.1</td><td>Enumerate SMB shares using Nmap script.</td></tr><tr><td>12</td><td>nmap --script http-enum -p 80 192.168.1.1</td><td>Enumerate web server directories using<br>Nmap script.</td></tr><tr><td>13</td><td>nmap --script smb-vuln-ms17-010 192.168.1.1</td><td>Check for MS17-010 (EternalBlue)<br>vulnerability.</td></tr><tr><td>14</td><td>nmap --script smb-vuln-cve-2017-7494<br>192.168.1.1</td><td>Check for CVE-2017-7494 (SambaCry)<br>vulnerability.</td></tr><tr><td>15</td><td>nmap --script smb-vuln-ms08-067 192.168.1.1</td><td>Check for MS08-067 vulnerability.</td></tr><tr><td>16</td><td>nmap --script smb-vuln-ms10-061 192.168.1.1</td><td>Check for MS10-061 (Print Spooler)<br>vulnerability.</td></tr><tr><td>17</td><td>nmap --script smb-vuln-regsvc-dos<br>192.168.1.1</td><td>Check for registry service DoS<br>vulnerability.</td></tr><tr><td>18</td><td>nmap --script http-sql-injection --scriptargs='http-sql-injection.args' -p 80 192.168.1.1</td><td>Check for SQL injection vulnerabilities<br>using Nmap script.</td></tr><tr><td>19</td><td>nmap -sL 192.168.1.0/24</td><td>List all IPs in the subnet without scanning<br>them.</td></tr><tr><td>20</td><td>nmap -p80 --script http-methods 192.168.1.1</td><td>Discover allowed HTTP methods on a web<br>server.</td></tr><tr><td>21</td><td>nmap -p80 --script http-title 192.168.1.1</td><td>Retrieve the title of the webpage</td></tr><tr><td>22</td><td>nmap -p80 --script http-headers 192.168.1.1</td><td>Retrieve HTTP headers from the server.</td></tr><tr><td>23</td><td>nmap -p80 --script http-enum 192.168.1.1</td><td>Enumerate common web applications on<br>the server.</td></tr><tr><td>24</td><td>nmap -p80 --script http-auth 192.168.1.1</td><td>Test for HTTP authentication methods.</td></tr><tr><td>25</td><td>nmap -sX 192.168.1.1</td><td>Xmas scan to detect open ports.</td></tr><tr><td>26</td><td>nmap -sA 192.168.1.1</td><td>ACK scan to map firewall rulesets</td></tr><tr><td>27</td><td>nmap -sW 192.168.1.1</td><td>Window scan to detect open ports based<br>on TCP window size</td></tr><tr><td>28</td><td>nmap -sM 192.168.1.1</td><td>Maimon scan to detect open ports using<br>FIN/ACK flag combination.</td></tr><tr><td>29</td><td>nmap -p80 --script http-userdir-enum<br>192.168.1.1</td><td>Enumerate user directories on a web<br>server</td></tr><tr><td>30</td><td>nmap -p80 --script http-passwd 192.168.1.1</td><td>Check for /etc/passwd file on web server</td></tr><tr><td>31</td><td>nmap -p80 --script http-robots.txt 192.168.1.1</td><td>Retrieve and analyze the robots.txt file.</td></tr><tr><td>32</td><td>nmap --script ssh-brute -p 22 192.168.1.1</td><td>Brute-force SSH login using Nmap script.</td></tr><tr><td>33</td><td>nmap --script ftp-anon 192.168.1.1</td><td>Check for anonymous FTP login.</td></tr><tr><td>34</td><td>nmap --script ftp-vsftpd-backdoor 192.168.1.1</td><td>Check for vsftpd backdoor vulnerability.</td></tr><tr><td>35</td><td>nmap --script http-sql-injection --scriptargs='http-sql-injection.args' -p 80 192.168.1.1</td><td>Check for SQL injection vulnerabilities<br>using Nmap script</td></tr><tr><td>36</td><td>nmap --script http-phpself-xss 192.168.1.1</td><td>Check for PHP_SELF XSS vulnerabilities.</td></tr><tr><td>37</td><td>nmap --script dns-brute 192.168.1.1</td><td>Perform DNS brute-force enumeration.</td></tr><tr><td>38</td><td>nmap -p 22 --script ssh-hostkey 192.168.1.1</td><td>Retrieve SSH host keys.</td></tr><tr><td>39</td><td>nmap -p 53 --script dns-recursion 192.168.1.1</td><td>Check for DNS recursion</td></tr><tr><td>40</td><td>nmap --traceroute 192.168.1.1</td><td>Perform a traceroute along with the scan.</td></tr></tbody></table>
