Indahax - Pierre Noguès

Twitter Facebook Linkedin email

Nmap haxor

Nmap propose beaucoup d'options, parmi ces dernières, de nombreuses sont inutiles lors d'un test d'intrusion ( fragmentation, manipulation barbare des flags TCP, attaque zombie, FTP Bounces... ). Cet article traitera les options avancées réellement utiles et les pièges a éviter lorsque l'on utilise nmap.




  • Exécuter nmap en root

A la base, on pourrait croire que la seule raison valable pour exécuter nmap en root est pour profiter du scan SYN -sS plus rapide et plus discret que le scan connect -sC. En réalité, il existe une autre option que l’on utilise très souvent avec nmap et qui nécessite des droits privilégiés pour fonctionner efficacement: le ping -sP .

Lorsque l’on effectue un ping -sP en root, nmap va envoyer un paquet TCP SYN sur le port 80, puis un paquet ICMP “echo request”. Si la cible répond à un des deux paquets, elle sera considérée online.

Cependant, si utilisateur classique effectue un -sP, seul un paquet TCP SYN sera envoyé, pas de ping ICMP. Pour peu que le firewall drop les paquets vers le port 80, et on ne détectera pas l’hôte !

Il y a encore un autre cas où le ping ICMP n'est pas effectué lors d'un scan, si l'on spécifie l'option -PU ou -PS (options indiquant les ports UDP/TCP à utiliser pour le ping) alors il faut explicitement spécifier l'option -PE pour envoyer un ping ICMP.

  • Gagner du temps lors des scans

Utiliser les options -PU/-PS/-PE plutôt qu'un scan -PN/-P0

L'option -PN effectue un scan de port en considérant que la cible est online, même si elle n'a pas répondu au ping. Le simple fait de scanner un réseau /24 sur 1000 ports en -PN peut parfois être long.

Une alternative pourrait être de pinger la cible sur une dizaine, voire une vingtaine de ports très courants, puis déclencher un scan sur les 1000 ports seulement si au moins un des ports a répondu au ping. Par exemple :

root@hacktop:~# nmap -PS21-23,25,80,135-139,443 -PU53,68,161 -sU -sS --top-ports 1000 10.0.0.0/24 --reason

Interesting ports on 10.0.0.13:
Not shown: 1991 closed ports
Reason: 996 resets and 995 port-unreaches
PORT     STATE         SERVICE      REASON
135/tcp  open          msrpc        syn-ack
139/tcp  open          netbios-ssn  syn-ack
445/tcp  open          microsoft-ds syn-ack
912/tcp  open          unknown      syn-ack
123/udp  open|filtered ntp          no-response
137/udp  open|filtered netbios-ns   no-response
138/udp  open|filtered netbios-dgm  no-response
445/udp  open|filtered microsoft-ds no-response
1900/udp open|filtered upnp         no-response
MAC Address: 11:22:33:44:55:66 (Fake Computer)

Cette commande regarde si au moins un des ports TCP 21-23,25,80,135-139,443 (-PS) ou un des ports UDP 53,68,161 (-PU) est ouvert. Si c'est le cas, alors on scan les 1000 ports TCP (-sS) et les 1000 ports UDP (-sU) les plus fréquents (--top-ports).

Personnelement je ne me sers pas de cette option en pentest car je scan systèmatique les 65536 ports sans pinger la cible (oui, on ne peut pas faire plus long). Mais cela peut toujours servir dans d'autres circonstances.

Attention à l'option -F :

Dans la version stable actuelle de nmap (4.76), l'option Fast -F n'optimise pas vraiment la vitesse du scan de ports, cette option est uniquement relative au nombre de ports scannés. Par défaut nmap scan 1650 ports, avec l'option -F vous scannerez les ports contenus dans nmap-services,soit plus de 1200 ports, ce qui ne fait pas une grosse différence.

Utilisez plutôt la commande --top-ports 100 qui scannera les 100 ports les plus courants. (A noter que dans la version beta actuelle 4.85, l'option -F est égale à un --top-ports 100 ).

Pour avoir une idée des ports les plus fréquents selon nmap :

pierz@hacktop:~$ sort -r -k3 /usr/local/share/nmap/nmap-services  | egrep -v '^#' | grep tcp  | head
http                80/tcp  0.484143        # World Wide Web HTTP
telnet              23/tcp  0.221265
https               443/tcp 0.208669        # secure http (SSL)
ftp                  21/tcp  0.197667        # File Transfer [Control]
ssh                  22/tcp  0.182286        # Secure Shell Login
smtp                25/tcp  0.131314        # Simple Mail Transfer
ms-term-serv    3389/tcp        0.083904        # Microsoft Remote Display Protocol
pop3               110/tcp 0.077142        # PostOffice V.3
microsoft-ds     445/tcp 0.056944        # SMB directly over IP
netbios-ssn      139/tcp 0.050809        # NETBIOS Session Service
Enlever la résolution des noms :

L'option -n permet d'éviter de faire des requêtes DNS PTR, on peut gagner beaucoup de temps si on effectue un simple ping sur une plage d'adresse d'ip, par exemple sur une plage /24 :

root@hacktop:~# nmap -sP 10.0.0.0/24

Starting Nmap 4.85BETA3 ( http://nmap.org ) at 2009-03-15 13:30 CET
Host 10.0.0.1 appears to be up.
Host 10.0.0.10 appears to be up.
MAC Address: 11:22:33:44:55:66 (VMware)
Host 10.0.0.13 appears to be up.
MAC Address: 11:22:33:44:55:67 (FakeComputer)
Nmap done: 256 IP addresses (3 hosts up) scanned in 28.44 seconds
root@hacktop:~# nmap -n -sP 10.0.0.0/24

Starting Nmap 4.85BETA3 ( http://nmap.org ) at 2009-03-15 13:33 CET
Host 10.0.0.1 appears to be up.
Host 10.0.0.10 appears to be up.
MAC Address: 11:22:33:44:55:66 (VMware)
Host 10.0.0.13 appears to be up.
MAC Address: 11:22:33:44:55:67 (Fake Computer)
Nmap done: 256 IP addresses (3 hosts up) scanned in 2.44 seconds.
Attention à l'option - -host-timeout :

L'option - -host-timeout, cette option ne règle pas le timeout d'un paquet, mais le temps maximum à passer sur un hôte lors d'un scan.

Régler finement le timeout :

Il est intéressant de régler le timeout de nmap, en particulier lors des scans effectués en -PN ou -P0. Il y a de nombreuses options pour régler finement tous ces paramètres, mais je ne vous conseille pas d'y toucher directement (et c'est aussi ce que recommande le man).

Je vous recommande plutôt de vous limiter à l'option -T . Elle permet de choisir un template parmi 5 qui règle l'ensemble des options concernant la vitesse du scan.

Par défaut nmap effectue un scan -T3, si on utilise ce template, les options suivantes seront réglées de cette façon :

  • Le timeout d'un paquet est fixé entre 100ms et 10000ms. ( ce qui peut être long).
  • Les paquets qui timeouts sont renvoyés entre 1 et 10 fois.

On peut utiliser un template "aggressive" -T4 pour des ips externes (sauf si l'on travaille dans un endroit où l'on a une connexion pourrie):

  • Le timeout d'un paquet est fixé entre 500ms et 1250ms.
  • Les paquets sont rejoués entre 1 et 6 fois.

Et on effectuera plutôt un scan -T5 sur un réseau local de bonne qualité ( pas du wifi foireux par exemple ) :

  • Le timeout d'un paquet est fixé entre 50ms et 300ms.
  • Les paquets sont rejoués au maximum 2 fois.
  • On ne passe pas plus de 15 minutes sur un hôte.
Ne pas confondre scan agressif -A et template agressif (-T aggressive ou -T5) :

L'option scan agressif -A effectue de nombreuses opérations qui peuvent faire perdre du temps, en plus d'effectuer une détection d'OS (-O) et des services (-sV), elle lance un traceroute ainsi que des scripts d'attaque et des scans de failles (je reviendrai là-dessus plus tard).

En plus de faire perdre du temps, ces scripts peuvent avoir des effets non désirés ou être trop intrusifs en fonction du contexte.

  • Autres options intéressantes

L'option --resume permet de reprendre un scan interrompu avec CTRL+C si ce dernier a été sauvegardé au format nmap -oN ou greppable -oG (ou encore -oA).

La seule option utile au niveau de l'IDS evasion est celle qui permet de définir le port source -g. On peut l'utiliser afin de contourner certains firewalls mal configurés, on utilisera le port 20 en scan TCP (FTP actif) ou le port 53 (DNS) lors d'un scan UDP -sU.

Il est possible d'effectuer des requêtes DNS PTR via l'option -sL. Cette option permet de faire de la reconnaissance en repérant des hôtes possibles sur une plage d'adresse ip, sans leur envoyer un seul paquet.

Un détail, si vous avez envie de comprendre pourquoi nmap a déterminé si un port était OPEN/FILTRED/CLOSE/... , vous pouvez ajouter l'option --reason .

  • Les scripts

Attention, les fonctionnalités suivantes sont intéressantes mais reste peu fiables. Mieux vaut utiliser des outils spécialisés dans la détection de faille (nessus) ou de bruteforce (hydra) pour effectuer ce genre d'attaque.

Grâce aux scripts, nmap peut : récupérer plus d'informations relatives aux ports scannés, effectuer un scan de failles ou encore réaliser des attaques. On peut exécuter les scripts par défaut en utilisant l'option -sC (le scan agressif -A exécute également ces scripts).

Parmi ces attaques on a du bruteforce classique comme telnet, http basic, ftp... Ils peuvent également vérifier si clefs SSH sont vulnérables (debian-opensll ), lister les users,groups,... via SMB sur un windows (null sessions) , tenter un transfert de zone..., bref, plein de choses diverses et variées.

Les scripts sont stockés dans le dossier script du répertoire d'installation de nmap (/usr/local/share/nmap/script par défaut). Jeter un coup d'oeil sur le site pour comprendre comment ça marche.

Voici un petit aperçu :
root@hacktop:/usr/local/share/nmap/scripts# nmap --top-ports 50 --script all localhost

Starting Nmap 4.85BETA3 ( http://nmap.org ) at 2009-03-15 17:53 CET
Interesting ports on localhost (127.0.0.1):
Not shown: 47 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
|_ banner: SSH-2.0-OpenSSH_5.1p1 Debian-3ubuntu1x0Dx0A
|  ssh-hostkey: 1024 be:ff:7f:5f:af:bb:bb:f8:4a:ed:3d:ca:af:01:d6:9a (DSA)
|_ 2048 d3:7b:77:12:57:11:d3:11:ac:fa:1c:80:a3:6f:44:f1 (RSA)
23/tcp open  telnet
|_ banner: xFFxFDx18xFFxFD xFFxFD#xFFxFD'
|_ telnet-brute: telnet - telnet
80/tcp open  http
|_ html-title: Index of /
root@hacktop:/usr/local/share/nmap/scripts# nmap  --script all 10.0.0.10,13

Starting Nmap 4.85BETA3 ( http://nmap.org ) at 2009-03-15 18:09 CET
Interesting ports on 10.0.0.10:
Not shown: 984 closed ports
PORT     STATE SERVICE
53/tcp   open  domain
88/tcp   open  kerberos-sec
135/tcp  open  msrpc
139/tcp  open  netbios-ssn
389/tcp  open  ldap
445/tcp  open  microsoft-ds
464/tcp  open  kpasswd5
593/tcp  open  http-rpc-epmap
|_ banner: ncacn_http/1.0
636/tcp  open  ldapssl
1025/tcp open  NFS-or-IIS
1026/tcp open  LSA-or-nterm
1028/tcp open  unknown
|_ banner: ncacn_http/1.0
1040/tcp open  netsaint
1048/tcp open  unknown
3268/tcp open  globalcatLDAP
3269/tcp open  globalcatLDAPssl
MAC Address: 11:22:33:44:55:66 (VMware)

Host script results:
|_ nbstat: NetBIOS name: INDAHAX-DC, NetBIOS user: , NetBIOS MAC: 11:22:33:44:55:66
|  smb-os-discovery: Windows Server 2003 3790
|  LAN Manager: Windows Server 2003 5.2
|  Name: INDAHAXINDAHAX-DC
|_ System time: 2009-03-15 18:09:58 UTC+1
|  smb-security-mode: User-level authentication
|  SMB Security: Challenge/response passwords supported
|_ SMB Security: Message signing required

Interesting ports on 10.0.0.13:
Not shown: 996 closed ports
PORT    STATE SERVICE
135/tcp open  msrpc
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds
912/tcp open  unknown
|_ banner: 220 VMware Authentication Daemon Version 1.0, ServerDaemonPr...
MAC Address: 11:22:33:44:55:67 (Fake Computer)

Host script results:
|_ sniffer-detect: Likely in promiscuous mode (tests: "111___1_")
|  smb-security-mode: User-level authentication
|  SMB Security: Challenge/response passwords supported
|_ SMB Security: Message signing not supported
|  smb-os-discovery: Windows XP
|  LAN Manager: Windows 2000 LAN Manager
|  Name: WORKGROUPPIERRE-WG
|_ System time: 2009-03-15 18:09:56 UTC+1
|_ nbstat: NetBIOS name: PIERRE-666, NetBIOS user: , NetBIOS MAC: 11:22:33:44:55:67

Nmap done: 2 IP addresses (2 hosts up) scanned in 36.32 seconds
Références:

man nmap (sérieux ?)