
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
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 ServiceEnlever 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.
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 secondsRéférences:
man nmap (sérieux ?)