Plus de connaissances nous avons sur une cible ou un réseau, plus nous aurons d’options par la suite. Il est indispensable que l’énumération soit menée correctement.
Nous devons déterminer quels sont les services impliqués ainsi que les ports. Chaque machine a 65535 ports disponibles. La plupart sont des ports standard: exemple le port 80 pour le service HTTP.
Nous allons utiliser nmap pour faire un scan de ports. Nous cherchons les ports ouverts. La réponse obtenue sera: ouvert, fermé ou filtré (par un firewall).
Options
La commande nmap sera bien utilisée siles bonnes options sont utilisées.
Exemples:
-sS | Syn scan |
-sU | UDP scan |
-O | système d’exploitation |
-sV | version des services |
-v | verbosité |
-vv | verbosité niveau 2 |
-oA | sauvegarder les résultats dans 3 formats différents |
-oN | sauvegarde dans un format normal |
-oG | sauvegarde dans un format grepable |
-A | « aggressive mode » (services, version, système d’exploitation, traceroute) |
-T5 | vitesse du scan niveau 5 (plus facilement détectable, peut générer des erreurs) |
-p 80 | scanner le port 80 |
-p 1000-10500 | scanner du port 1000 au port 1500 |
-p- | scanner tous les ports |
–script | activation d’un script |
–script | activation d’un script de la catégorie vuln |
Il y a 3 types basiques de scan à connaître. Il en existe d’autres plus particuliers.
TCP Connect Scans | -sT |
SYN Scans | -sS |
UDP Scans | -sU |
TCP Null Scans | -sN |
TCP Fin Scans | -sF |
TCP XMas Scans | -sX |
TCP Connect Scans
Ce scan effectue le « three-way handshake » (SYN, SYN+ACK, ACK). C’est pour cette raison que l’on dit « Connect ». Si un port est fermé, le serveur enverra un paquet TCP avec un flag RST (Reset). Par contre, si un port est ouvert, le serveur répondra avec les flags SYN+ACK.
Maintenant, que se passe-t-il si le port est ouvert mais derrière un firewall ? Le firewall « drop » le paquet: le serveur ne répond pas. Nmap comprendra que le port n’est ni ouvert, ni fermé, mais filtré.
On peut faire en sorte que le serveur réponde plutôt avec un flag RST afin que le scan indique un port fermé plutôt qu’un port filtré. Exemple avec iptables:
iptables -I INPUT -p tcp --dport <port> -j REJECT --reject-with tcp-reset
root@ip-10-10-27-113:~# nmap -sT 10.10.210.140
Starting Nmap 7.60 ( https://nmap.org ) at 2022-12-20 22:46 GMT
Nmap scan report for ip-10-10-210-140.eu-west-1.compute.internal (10.10.210.140)
Host is up (0.00063s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
135/tcp open msrpc
3389/tcp open ms-wbt-server
MAC Address: 02:8F:1B:57:DA:D9 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 12.70 seconds
Voir RFC 793 pour le protocole TCP.

Syn Scans
C’est un scan semi-ouvert (ou non-connecté). En effet, le three-way handshake est presque fait. La différence est que le client renvoie un flag RST au lieu d’un flag ACK pour les ports ouverts. C’est donc un scan plus furtif car il n’y a pas de connexion.
Ce scan peut être utilisé pour contourner des IDS obsolètes. Par ailleurs, il y a moins de chance que ces scans soient journalisés. Enfin, étant donné qu’il n’y a pas de connexion, ce scan est plus rapide.
Par contre, il faut les permissions sudo pour l’utiliser. Aussi, des services instables peuvent être interrompus à cause de ces scans.
Si on fait un scan par défaut sans les permissions, le scan sera un TCP Connect Scan. Si on le fait avec les permissions, ce sera un Syn Scan.
Pour les ports fermés et filtrés, ce scan fonctionne comme le TCP Connect Scan.
root@ip-10-10-27-113:~# nmap -sS 10.10.210.140
Starting Nmap 7.60 ( https://nmap.org ) at 2022-12-20 22:48 GMT
Nmap scan report for ip-10-10-210-140.eu-west-1.compute.internal (10.10.210.140)
Host is up (0.00068s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
135/tcp open msrpc
3389/tcp open ms-wbt-server
MAC Address: 02:8F:1B:57:DA:D9 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 17.71 seconds
UDP Scans
Contrairement à TCP, les scans UDP sont stateless. Le scan UDP est plus lent et plus difficile à interpréter car nous n’avons pas d’accusé de réception en retour.
Si le serveur ne répond pas, le port peut être ouvert ou filtré. Si le port est fermé, le serveur répondra par un ICMP Packet ( port unreachable).
Etant donné que ce scan est extrêmement lent, on pourra ajouter des options pour scanner par exemple les 10 ports UDP les plus courants.
nmap -sU --top-ports 10 <cible>
root@ip-10-10-27-113:~# nmap -sS 10.10.210.140
Starting Nmap 7.60 ( https://nmap.org ) at 2022-12-20 22:48 GMT
Nmap scan report for ip-10-10-210-140.eu-west-1.compute.internal (10.10.210.140)
Host is up (0.00068s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
135/tcp open msrpc
3389/tcp open ms-wbt-server
MAC Address: 02:8F:1B:57:DA:D9 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 17.71 seconds
Null, Fin, Xmas Scans
Ces scans sont généralement utilisés lorsque les autres l’ont déjà été.
Le scan Null n’envoie aucun flag. Si un port est fermé, un flag RST est renvoyé.
root@ip-10-10-27-113:~# nmap -sN 10.10.210.140
Starting Nmap 7.60 ( https://nmap.org ) at 2022-12-20 22:50 GMT
Nmap scan report for ip-10-10-210-140.eu-west-1.compute.internal (10.10.210.140)
Host is up (0.00016s latency).
All 1000 scanned ports on ip-10-10-210-140.eu-west-1.compute.internal (10.10.210.140) are open|filtered
MAC Address: 02:8F:1B:57:DA:D9 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 21.42 seconds
Le scan FIN envoie un flag FIN. Si un port est fermé, un flag RST est renvoyé.
root@ip-10-10-27-113:~# nmap -sF 10.10.210.140
Starting Nmap 7.60 ( https://nmap.org ) at 2022-12-20 22:53 GMT
Nmap scan report for ip-10-10-210-140.eu-west-1.compute.internal (10.10.210.140)
Host is up (0.00014s latency).
All 1000 scanned ports on ip-10-10-210-140.eu-west-1.compute.internal (10.10.210.140) are open|filtered
MAC Address: 02:8F:1B:57:DA:D9 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 21.41 seconds
Le scan Xmas (pour Christmas Tree) envoie un paquet avec les flags PSH, URG et FIN. Si un port est fermé, le serveur renverra un flag RST.
root@ip-10-10-27-113:~# nmap -sX 10.10.210.140
Starting Nmap 7.60 ( https://nmap.org ) at 2022-12-20 22:55 GMT
Nmap scan report for ip-10-10-210-140.eu-west-1.compute.internal (10.10.210.140)
Host is up (0.00024s latency).
All 1000 scanned ports on ip-10-10-210-140.eu-west-1.compute.internal (10.10.210.140) are open|filtered
MAC Address: 02:8F:1B:57:DA:D9 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 21.42 seconds
Pour détecter un port ouvert, ces 3 scans fonctionnent à peu près comme un scan UDP. Si un port est ouvert, le serveur ne renverra pas de réponse. Aussi, avec les firewalls, les 3 états obtenus seront opened, closed et opened|filtered. Si un port est filtré avec l’un de ces scans, alors on aura reçu une réponse ICMP (port unreachable).
La RFC 793 nous dit que les hôtes du réseau répondent aux paquets malformés avec un flag RST pour les ports fermés, et ne répondent pas pour les ports ouverts. Mais ce n’est pas toujours le cas ! Exemple pour Microsoft Windows ou les périphériques Cisco qui renverront un flag RST que le port soit fermé ou non. Tous les ports apparaîtront fermés.
Ces scans sont en général utilisés pour contourner certains firewalls. Aujourd’hui, la plupart des IDS peuvent reconnaître ces types de scan.
Scan réseau ICMP
Nous cherchons à obtenir une carte de la structure du réseau. Pour ce faire, nous allons effectuer un « ping sweep ». Nmap envoie un paquet ICMP à chaque adresse IP potentielle. Les machines répondant au ping nous permettent de savoir quels hôtes sont actifs. Ce scan n’est pas toujours exact, mais il fournit déjà une bonne base.
root@ip-10-10-142-84:~# nmap -sn 10.10.143.0/24
Starting Nmap 7.60 ( https://nmap.org ) at 2022-12-21 16:57 GMT
Nmap scan report for ip-10-10-143-24.eu-west-1.compute.internal (10.10.143.24)
Host is up (0.00044s latency).
MAC Address: 02:B8:B3:44:98:67 (Unknown)
Nmap scan report for ip-10-10-143-38.eu-west-1.compute.internal (10.10.143.38)
Host is up (-0.100s latency).
MAC Address: 02:F3:21:3B:4D:3D (Unknown)
Nmap scan report for ip-10-10-143-61.eu-west-1.compute.internal (10.10.143.61)
Host is up (0.00039s latency).
MAC Address: 02:AD:E6:46:A5:27 (Unknown)
Nmap scan report for ip-10-10-143-77.eu-west-1.compute.internal (10.10.143.77)
Host is up (0.00025s latency).
MAC Address: 02:BA:DE:D9:7D:97 (Unknown)
Nmap scan report for ip-10-10-143-78.eu-west-1.compute.internal (10.10.143.78)
Host is up (-0.100s latency).
MAC Address: 02:63:E7:E2:CA:25 (Unknown)
Nmap scan report for ip-10-10-143-116.eu-west-1.compute.internal (10.10.143.116)
Host is up (0.00042s latency).
MAC Address: 02:F8:76:6D:0C:25 (Unknown)
Nmap scan report for ip-10-10-143-120.eu-west-1.compute.internal (10.10.143.120)
Host is up (0.00028s latency).
MAC Address: 02:16:DC:94:4A:01 (Unknown)
Nmap scan report for ip-10-10-143-142.eu-west-1.compute.internal (10.10.143.142)
Host is up (-0.100s latency).
MAC Address: 02:41:3D:F0:22:F1 (Unknown)
Nmap scan report for ip-10-10-143-161.eu-west-1.compute.internal (10.10.143.161)
Host is up (0.00036s latency).
MAC Address: 02:CA:5B:38:61:43 (Unknown)
Nmap scan report for ip-10-10-143-162.eu-west-1.compute.internal (10.10.143.162)
Host is up (0.00026s latency).
MAC Address: 02:CB:DC:C1:8C:FB (Unknown)
Nmap scan report for ip-10-10-143-201.eu-west-1.compute.internal (10.10.143.201)
Host is up (0.00030s latency).
MAC Address: 02:52:D7:ED:58:DF (Unknown)
Nmap scan report for ip-10-10-143-214.eu-west-1.compute.internal (10.10.143.214)
Host is up (-0.100s latency).
MAC Address: 02:F4:8C:CB:E8:39 (Unknown)
Nmap scan report for ip-10-10-143-218.eu-west-1.compute.internal (10.10.143.218)
Host is up (0.00040s latency).
MAC Address: 02:14:32:8A:43:4F (Unknown)
Nmap done: 256 IP addresses (13 hosts up) scanned in 2.93 seconds
Scripts
Le moteur de script Nmap (NSE) est un élément essentiel du scanner tant il multiplie les possibilités de l’outil. Les scripts sont écrits dans le langage LUA. Il s’agit de scans de vulnérabilités, automatisations d’exploits. On trouve plusieurs catégories dans la bibliothèque de scripts.
safe | n’affectera pas la cible |
intrusive | susceptible d’affecter la cible |
vuln | scan de vulnérabilités |
exploit | exploiter une vulnérabilité |
auth | bypasser l’authentification de certains services |
brute | bruteforce des identifiants de certains services |
discovery | interrogation des services en cours pour obtenir plus d’informations à propos du réseau. |
Voir https://nmap.org/book/nse-usage.html
Pour utiliser la commande, on ajoutera:
--script=<nom-du-script>
Plusieurs scripts peuvent être lancés en même temps:
--script=http-fileupload-exploiter,smb-enum-users
Certains scripts nécessitent des arguments (comme des identifiants). Dans ce cas, on ajoutera:
--script-args
Une liste des scripts peut être trouvée dans la documentation.
Les scripts ont aussi un menu d’aide.
Exemple:
root@ip-10-10-142-84:~# nmap --script-help ftp-anon
Starting Nmap 7.60 ( https://nmap.org ) at 2022-12-21 17:11 GMT
ftp-anon
Categories: default auth safe
https://nmap.org/nsedoc/scripts/ftp-anon.html
Checks if an FTP server allows anonymous logins.
If anonymous is allowed, gets a directory listing of the root directory
and highlights writeable files.
Comment trouver ces scripts ? Soit par l’URL plus-haut, soit dans le dossier /usr/share/nmap/scripts.
root@ip-10-10-142-84:/usr/share/nmap/scripts# ls
acarsd-info.nse ip-forwarding.nse
address-info.nse ip-geolocation-geoplugin.nse
afp-brute.nse ip-geolocation-ipinfodb.nse
afp-ls.nse ip-geolocation-map-bing.nse
afp-path-vuln.nse ip-geolocation-map-google.nse
afp-serverinfo.nse ip-geolocation-map-kml.nse
afp-showmount.nse ip-geolocation-maxmind.nse
ajp-auth.nse ip-https-discover.nse
ajp-brute.nse ipidseq.nse
ajp-headers.nse ipmi-brute.nse
ajp-methods.nse ipmi-cipher-zero.nse
ajp-request.nse ipmi-version.nse
allseeingeye-info.nse ipv6-multicast-mld-list.nse
amqp-info.nse ipv6-node-info.nse
asn-query.nse ipv6-ra-flood.nse
auth-owners.nse irc-botnet-channels.nse
auth-spoof.nse irc-brute.nse
backorifice-brute.nse irc-info.nse
backorifice-info.nse irc-sasl-brute.nse
bacnet-info.nse irc-unrealircd-backdoor.nse
banner.nse iscsi-brute.nse
bitcoin-getaddr.nse iscsi-info.nse
bitcoin-info.nse isns-info.nse
bitcoinrpc-info.nse jdwp-exec.nse
bittorrent-discovery.nse jdwp-info.nse
bjnp-discover.nse jdwp-inject.nse
broadcast-ataoe-discover.nse jdwp-version.nse
broadcast-avahi-dos.nse knx-gateway-discover.nse
broadcast-bjnp-discover.nse knx-gateway-info.nse
broadcast-db2-discover.nse krb5-enum-users.nse
broadcast-dhcp6-discover.nse ldap-brute.nse
broadcast-dhcp-discover.nse ldap-novell-getpass.nse
broadcast-dns-service-discovery.nse ldap-rootdse.nse
broadcast-dropbox-listener.nse ldap-search.nse
broadcast-eigrp-discovery.nse lexmark-config.nse
broadcast-igmp-discovery.nse llmnr-resolve.nse
broadcast-listener.nse lltd-discovery.nse
broadcast-ms-sql-discover.nse maxdb-info.nse
broadcast-netbios-master-browser.nse mcafee-epo-agent.nse
broadcast-networker-discover.nse membase-brute.nse
broadcast-novell-locate.nse membase-http-info.nse
broadcast-ospf2-discover.nse memcached-info.nse
broadcast-pc-anywhere.nse metasploit-info.nse
broadcast-pc-duo.nse metasploit-msgrpc-brute.nse
broadcast-pim-discovery.nse metasploit-xmlrpc-brute.nse
broadcast-ping.nse mikrotik-routeros-brute.nse
broadcast-pppoe-discover.nse mmouse-brute.nse
broadcast-rip-discover.nse mmouse-exec.nse
broadcast-ripng-discover.nse modbus-discover.nse
broadcast-sonicwall-discover.nse mongodb-brute.nse
broadcast-sybase-asa-discover.nse mongodb-databases.nse
broadcast-tellstick-discover.nse mongodb-info.nse
broadcast-upnp-info.nse mqtt-subscribe.nse
broadcast-versant-locate.nse mrinfo.nse
broadcast-wake-on-lan.nse msrpc-enum.nse
broadcast-wpad-discover.nse ms-sql-brute.nse
broadcast-wsdd-discover.nse ms-sql-config.nse
broadcast-xdmcp-discover.nse ms-sql-dac.nse
cassandra-brute.nse ms-sql-dump-hashes.nse
cassandra-info.nse ms-sql-empty-password.nse
cccam-version.nse ms-sql-hasdbaccess.nse
cics-enum.nse ms-sql-info.nse
cics-info.nse ms-sql-ntlm-info.nse
cics-user-brute.nse ms-sql-query.nse
cics-user-enum.nse ms-sql-tables.nse
citrix-brute-xml.nse ms-sql-xp-cmdshell.nse
citrix-enum-apps.nse mtrace.nse
citrix-enum-apps-xml.nse murmur-version.nse
citrix-enum-servers.nse mysql-audit.nse
citrix-enum-servers-xml.nse mysql-brute.nse
clamav-exec.nse mysql-databases.nse
clock-skew.nse mysql-dump-hashes.nse
coap-resources.nse mysql-empty-password.nse
couchdb-databases.nse mysql-enum.nse
couchdb-stats.nse mysql-info.nse
creds-summary.nse mysql-query.nse
cups-info.nse mysql-users.nse
cups-queue-info.nse mysql-variables.nse
cvs-brute.nse mysql-vuln-cve2012-2122.nse
cvs-brute-repository.nse nat-pmp-info.nse
daap-get-library.nse nat-pmp-mapport.nse
daytime.nse nbstat.nse
db2-das-info.nse ncp-enum-users.nse
dhcp-discover.nse ncp-serverinfo.nse
dict-info.nse ndmp-fs-info.nse
distcc-cve2004-2687.nse ndmp-version.nse
dns-blacklist.nse nessus-brute.nse
dns-brute.nse nessus-xmlrpc-brute.nse
dns-cache-snoop.nse netbus-auth-bypass.nse
dns-check-zone.nse netbus-brute.nse
dns-client-subnet-scan.nse netbus-info.nse
dns-fuzz.nse netbus-version.nse
dns-ip6-arpa-scan.nse nexpose-brute.nse
dns-nsec3-enum.nse nfs-ls.nse
dns-nsec-enum.nse nfs-showmount.nse
dns-nsid.nse nfs-statfs.nse
dns-random-srcport.nse nje-node-brute.nse
dns-random-txid.nse nje-pass-brute.nse
dns-recursion.nse nntp-ntlm-info.nse
dns-service-discovery.nse nping-brute.nse
dns-srv-enum.nse nrpe-enum.nse
dns-update.nse ntp-info.nse
dns-zeustracker.nse ntp-monlist.nse
dns-zone-transfer.nse omp2-brute.nse
docker-version.nse omp2-enum-targets.nse
domcon-brute.nse omron-info.nse
domcon-cmd.nse openlookup-info.nse
domino-enum-users.nse openvas-otp-brute.nse
dpap-brute.nse openwebnet-discovery.nse
drda-brute.nse oracle-brute.nse
drda-info.nse oracle-brute-stealth.nse
duplicates.nse oracle-enum-users.nse
eap-info.nse oracle-sid-brute.nse
enip-info.nse oracle-tns-version.nse
epmd-info.nse ovs-agent-version.nse
eppc-enum-processes.nse p2p-conficker.nse
fcrdns.nse path-mtu.nse
finger.nse pcanywhere-brute.nse
fingerprint-strings.nse pcworx-info.nse
firewalk.nse pgsql-brute.nse
firewall-bypass.nse pjl-ready-message.nse
flume-master-info.nse pop3-brute.nse
fox-info.nse pop3-capabilities.nse
freelancer-info.nse pop3-ntlm-info.nse
ftp-anon.nse pptp-version.nse
ftp-bounce.nse puppet-naivesigning.nse
ftp-brute.nse qconn-exec.nse
ftp-libopie.nse qscan.nse
ftp-proftpd-backdoor.nse quake1-info.nse
ftp-syst.nse quake3-info.nse
ftp-vsftpd-backdoor.nse quake3-master-getservers.nse
ftp-vuln-cve2010-4221.nse rdp-enum-encryption.nse
ganglia-info.nse rdp-vuln-ms12-020.nse
giop-info.nse realvnc-auth-bypass.nse
gkrellm-info.nse redis-brute.nse
gopher-ls.nse redis-info.nse
gpsd-info.nse resolveall.nse
hadoop-datanode-info.nse reverse-index.nse
hadoop-jobtracker-info.nse rexec-brute.nse
hadoop-namenode-info.nse rfc868-time.nse
hadoop-secondary-namenode-info.nse riak-http-info.nse
hadoop-tasktracker-info.nse rlogin-brute.nse
hbase-master-info.nse rmi-dumpregistry.nse
hbase-region-info.nse rmi-vuln-classloader.nse
hddtemp-info.nse rpcap-brute.nse
hnap-info.nse rpcap-info.nse
hostmap-bfk.nse rpc-grind.nse
hostmap-ip2hosts.nse rpcinfo.nse
hostmap-robtex.nse rsync-brute.nse
http-adobe-coldfusion-apsa1301.nse rsync-list-modules.nse
http-affiliate-id.nse rtsp-methods.nse
http-apache-negotiation.nse rtsp-url-brute.nse
http-apache-server-status.nse rusers.nse
http-aspnet-debug.nse s7-info.nse
http-auth-finder.nse samba-vuln-cve-2012-1182.nse
http-auth.nse script.db
http-avaya-ipoffice-users.nse servicetags.nse
http-awstatstotals-exec.nse shodan-api.nse
http-axis2-dir-traversal.nse sip-brute.nse
http-backup-finder.nse sip-call-spoof.nse
http-barracuda-dir-traversal.nse sip-enum-users.nse
http-brute.nse sip-methods.nse
http-cakephp-version.nse skypev2-version.nse
http-chrono.nse smb2-capabilities.nse
http-cisco-anyconnect.nse smb2-security-mode.nse
http-coldfusion-subzero.nse smb2-time.nse
http-comments-displayer.nse smb2-vuln-uptime.nse
http-config-backup.nse smb-brute.nse
http-cookie-flags.nse smb-double-pulsar-backdoor.nse
http-cors.nse smb-enum-domains.nse
http-cross-domain-policy.nse smb-enum-groups.nse
http-csrf.nse smb-enum-processes.nse
http-date.nse smb-enum-sessions.nse
http-default-accounts.nse smb-enum-shares.nse
http-devframework.nse smb-enum-users.nse
http-dlink-backdoor.nse smb-flood.nse
http-dombased-xss.nse smb-ls.nse
http-domino-enum-passwords.nse smb-mbenum.nse
http-drupal-enum.nse smb-os-discovery.nse
http-drupal-enum-users.nse smb-print-text.nse
http-enum.nse smb-protocols.nse
http-errors.nse smb-psexec.nse
http-exif-spider.nse smb-security-mode.nse
http-favicon.nse smb-server-stats.nse
http-feed.nse smb-system-info.nse
http-fetch.nse smb-vuln-conficker.nse
http-fileupload-exploiter.nse smb-vuln-cve2009-3103.nse
http-form-brute.nse smb-vuln-cve-2017-7494.nse
http-form-fuzzer.nse smb-vuln-ms06-025.nse
http-frontpage-login.nse smb-vuln-ms07-029.nse
http-generator.nse smb-vuln-ms08-067.nse
http-git.nse smb-vuln-ms10-054.nse
http-gitweb-projects-enum.nse smb-vuln-ms10-061.nse
http-google-malware.nse smb-vuln-ms17-010.nse
http-grep.nse smb-vuln-regsvc-dos.nse
http-headers.nse smtp-brute.nse
http-huawei-hg5xx-vuln.nse smtp-commands.nse
http-icloud-findmyiphone.nse smtp-enum-users.nse
http-icloud-sendmsg.nse smtp-ntlm-info.nse
http-iis-short-name-brute.nse smtp-open-relay.nse
http-iis-webdav-vuln.nse smtp-strangeport.nse
http-internal-ip-disclosure.nse smtp-vuln-cve2010-4344.nse
http-joomla-brute.nse smtp-vuln-cve2011-1720.nse
http-litespeed-sourcecode-download.nse smtp-vuln-cve2011-1764.nse
http-ls.nse sniffer-detect.nse
http-majordomo2-dir-traversal.nse snmp-brute.nse
http-malware-host.nse snmp-hh3c-logins.nse
http-mcmp.nse snmp-info.nse
http-methods.nse snmp-interfaces.nse
http-method-tamper.nse snmp-ios-config.nse
http-mobileversion-checker.nse snmp-netstat.nse
http-ntlm-info.nse snmp-processes.nse
http-open-proxy.nse snmp-sysdescr.nse
http-open-redirect.nse snmp-win32-services.nse
http-passwd.nse snmp-win32-shares.nse
http-phpmyadmin-dir-traversal.nse snmp-win32-software.nse
http-phpself-xss.nse snmp-win32-users.nse
http-php-version.nse socks-auth-info.nse
http-proxy-brute.nse socks-brute.nse
http-put.nse socks-open-proxy.nse
http-qnap-nas-info.nse ssh2-enum-algos.nse
http-referer-checker.nse ssh-auth-methods.nse
http-rfi-spider.nse ssh-brute.nse
http-robots.txt.nse ssh-hostkey.nse
http-robtex-reverse-ip.nse ssh-publickey-acceptance.nse
http-robtex-shared-ns.nse ssh-run.nse
http-security-headers.nse sshv1.nse
http-server-header.nse ssl-ccs-injection.nse
http-shellshock.nse ssl-cert-intaddr.nse
http-sitemap-generator.nse ssl-cert.nse
http-slowloris-check.nse ssl-date.nse
http-slowloris.nse ssl-dh-params.nse
http-sql-injection.nse ssl-enum-ciphers.nse
http-stored-xss.nse ssl-heartbleed.nse
http-svn-enum.nse ssl-known-key.nse
http-svn-info.nse ssl-poodle.nse
http-title.nse sslv2-drown.nse
http-tplink-dir-traversal.nse sslv2.nse
http-trace.nse sstp-discover.nse
http-traceroute.nse stun-info.nse
http-unsafe-output-escaping.nse stun-version.nse
http-useragent-tester.nse stuxnet-detect.nse
http-userdir-enum.nse supermicro-ipmi-conf.nse
http-vhosts.nse svn-brute.nse
http-virustotal.nse targets-asn.nse
http-vlcstreamer-ls.nse targets-ipv6-map4to6.nse
http-vmware-path-vuln.nse targets-ipv6-multicast-echo.nse
http-vuln-cve2006-3392.nse targets-ipv6-multicast-invalid-dst.nse
http-vuln-cve2009-3960.nse targets-ipv6-multicast-mld.nse
http-vuln-cve2010-0738.nse targets-ipv6-multicast-slaac.nse
http-vuln-cve2010-2861.nse targets-ipv6-wordlist.nse
http-vuln-cve2011-3192.nse targets-sniffer.nse
http-vuln-cve2011-3368.nse targets-traceroute.nse
http-vuln-cve2012-1823.nse targets-xml.nse
http-vuln-cve2013-0156.nse teamspeak2-version.nse
http-vuln-cve2013-6786.nse telnet-brute.nse
http-vuln-cve2013-7091.nse telnet-encryption.nse
http-vuln-cve2014-2126.nse telnet-ntlm-info.nse
http-vuln-cve2014-2127.nse tftp-enum.nse
http-vuln-cve2014-2128.nse tls-nextprotoneg.nse
http-vuln-cve2014-2129.nse tls-ticketbleed.nse
http-vuln-cve2014-3704.nse tn3270-screen.nse
http-vuln-cve2014-8877.nse tor-consensus-checker.nse
http-vuln-cve2015-1427.nse traceroute-geolocation.nse
http-vuln-cve2015-1635.nse tso-brute.nse
http-vuln-cve2017-1001000.nse tso-enum.nse
http-vuln-cve2017-5638.nse unittest.nse
http-vuln-cve2017-5689.nse unusual-port.nse
http-vuln-cve2017-8917.nse upnp-info.nse
http-vuln-misfortune-cookie.nse url-snarf.nse
http-vuln-wnr1000-creds.nse ventrilo-info.nse
http-waf-detect.nse versant-info.nse
http-waf-fingerprint.nse vmauthd-brute.nse
http-webdav-scan.nse vmware-version.nse
http-wordpress-brute.nse vnc-brute.nse
http-wordpress-enum.nse vnc-info.nse
http-wordpress-users.nse vnc-title.nse
http-xssed.nse voldemort-info.nse
iax2-brute.nse vtam-enum.nse
iax2-version.nse vuze-dht-info.nse
icap-info.nse wdb-version.nse
iec-identify.nse weblogic-t3-info.nse
ike-version.nse whois-domain.nse
imap-brute.nse whois-ip.nse
imap-capabilities.nse wsdd-discover.nse
imap-ntlm-info.nse x11-access.nse
impress-remote-discover.nse xdmcp-discover.nse
informix-brute.nse xmlrpc-methods.nse
informix-query.nse xmpp-brute.nse
informix-tables.nse xmpp-info.nse
root@ip-10-10-142-84:/usr/share/nmap/scripts# file http-vuln-cve2017-8917.nse
http-vuln-cve2017-8917.nse: HTML document, ASCII text
root@ip-10-10-142-84:/usr/share/nmap/scripts# head http-vuln-cve2017-8917.nse
local http = require "http"
local shortport = require "shortport"
local string = require "string"
local stdnse = require "stdnse"
local vulns = require "vulns"
local table = require "table"
description = [[
An SQL Injection vulnerability affecting Joomla! 3.7.x before 3.7.1 allows for
unauthenticated users to execute arbitrary SQL commands. This vulnerability was
root@ip-10-10-142-84:/usr/share/nmap/scripts#
Il est possible que certains scripts ne soient pas présents. Si tel est le cas, on fera:
sudo apt update && sudo apt install nmap
A noter que dans ce fichiers se trouve le fichier script.db: une base de données contenant les scripts. Si, par exemple, on cherche des scripts avec la catégorie « brute », on fera:
root@ip-10-10-142-84:/usr/share/nmap/scripts# grep "brute" script.db
Entry { filename = "afp-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "ajp-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "backorifice-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "cassandra-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "cics-enum.nse", categories = { "brute", "intrusive", } }
Entry { filename = "cics-user-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "cics-user-enum.nse", categories = { "brute", "intrusive", } }
Entry { filename = "citrix-brute-xml.nse", categories = { "brute", "intrusive", } }
Entry { filename = "cvs-brute-repository.nse", categories = { "brute", "intrusive", } }
Entry { filename = "cvs-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "dns-brute.nse", categories = { "discovery", "intrusive", } }
Entry { filename = "domcon-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "dpap-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "drda-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "ftp-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "http-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "http-form-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "http-iis-short-name-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "http-joomla-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "http-proxy-brute.nse", categories = { "brute", "external", "intrusive", } }
Entry { filename = "http-wordpress-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "iax2-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "imap-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "impress-remote-discover.nse", categories = { "brute", "intrusive", } }
Entry { filename = "informix-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "ipmi-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "irc-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "irc-sasl-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "iscsi-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "ldap-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "membase-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "metasploit-msgrpc-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "metasploit-xmlrpc-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "mikrotik-routeros-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "mmouse-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "mongodb-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "ms-sql-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "mysql-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "mysql-enum.nse", categories = { "brute", "intrusive", } }
Entry { filename = "nessus-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "nessus-xmlrpc-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "netbus-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "nexpose-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "nje-node-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "nje-pass-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "nping-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "omp2-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "openvas-otp-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "oracle-brute-stealth.nse", categories = { "brute", "intrusive", } }
Entry { filename = "oracle-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "oracle-sid-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "pcanywhere-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "pgsql-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "pop3-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "redis-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "rexec-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "rlogin-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "rpcap-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "rsync-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "rtsp-url-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "sip-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "smb-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "smtp-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "snmp-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "socks-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "ssh-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "svn-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "telnet-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "tso-brute.nse", categories = { "intrusive", } }
Entry { filename = "tso-enum.nse", categories = { "brute", "intrusive", } }
Entry { filename = "vmauthd-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "vnc-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "vtam-enum.nse", categories = { "brute", "intrusive", } }
Entry { filename = "xmpp-brute.nse", categories = { "brute", "intrusive", } }
Exemple d’un script de connexion sur un service FTP
root@ip-10-10-142-84:~# nmap --script=ftp-anon -p 21 10.10.143.38 -vv
Starting Nmap 7.60 ( https://nmap.org ) at 2022-12-21 17:44 GMT
NSE: Loaded 1 scripts for scanning.
NSE: Script Pre-scanning.
NSE: Starting runlevel 1 (of 1) scan.
Initiating NSE at 17:44
Completed NSE at 17:44, 0.00s elapsed
Initiating ARP Ping Scan at 17:44
Scanning 10.10.143.38 [1 port]
Completed ARP Ping Scan at 17:44, 0.22s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 17:44
Completed Parallel DNS resolution of 1 host. at 17:44, 0.00s elapsed
Initiating SYN Stealth Scan at 17:44
Scanning ip-10-10-143-38.eu-west-1.compute.internal (10.10.143.38) [1 port]
Discovered open port 21/tcp on 10.10.143.38
Completed SYN Stealth Scan at 17:44, 0.22s elapsed (1 total ports)
NSE: Script scanning 10.10.143.38.
NSE: Starting runlevel 1 (of 1) scan.
Initiating NSE at 17:44
Completed NSE at 17:44, 30.00s elapsed
Nmap scan report for ip-10-10-143-38.eu-west-1.compute.internal (10.10.143.38)
Host is up, received arp-response (0.00027s latency).
Scanned at 2022-12-21 17:44:24 GMT for 31s
PORT STATE SERVICE REASON
21/tcp open ftp syn-ack ttl 128
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_Can't get directory listing: TIMEOUT
MAC Address: 02:F3:21:3B:4D:3D (Unknown)
NSE: Script Post-scanning.
NSE: Starting runlevel 1 (of 1) scan.
Initiating NSE at 17:44
Completed NSE at 17:44, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 30.80 seconds
Raw packets sent: 3 (116B) | Rcvd: 3 (116B)
Firewall Evasion
Nous avons vu quelques techniques utiles ( Syn Scan, NULL, FIN et Xmas Scans).
Une machine Windows bloque normalement tous les paquets ICMP. Nmap peut donc considérer une machine comme étant inactive, alors qu’elle l’est !
Pour contourner cette configuration, on utilisera l’option -Pn. Cette option indique à Nmap de ne pas pinger une cible avant de la scanner. Nmap considèrera donc que la machine est active. La contrepartie est que cette option fait que le scan est beaucoup plus lent.
Aussi, si on est déjà dans le réseau local, Nmap peut également utiliser les requêtes ARP pour déterminer l’activité de l’hôte.
On trouvera une documentation sur le site d’Nmap pour le contournement de firewalls.
Voici des exemples:
-f | fragmentation de paquets afin de réduire les chances d’être détecté par un firewall ou un IDS |
–mtu <nombre> | gère le Maximum Transfert Unit (le nombre doit être un multiple de 8) |
–scan-delay <time>ms | permet d’ajouter un délai entre chaque envoi de paquet. utile pour contourner des déclencheurs de pare-feu/IDS basés sur le temps |
–badsum | génère un checksum invalide pour les paquets. Il sera normalement rejeté mais un firewall/IDS peut éventuellement répondre. Dans ce cas, cette option nous permet de savoir qu’un firewall/IDS est présent. |
Enfin, voici un mémo sur l’outil: