Nmap Περίληψη (ESP)
Tip
Μάθε & εξασκήσου στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθε & εξασκήσου στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθε & εξασκήσου στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Περιηγήσου στον πλήρη κατάλογο HackTricks Training για τα assessment tracks (ARTA/GRTA/AzRTA) και στο Linux Hacking Expert (LHE).
Υποστήριξε το HackTricks
- Δες τα subscription plans!
- Γίνε μέλος της 💬 Discord group, της telegram group, ακολούθησε το @hacktricks_live στο X/Twitter, ή δες τη LinkedIn page και το YouTube channel.
- Μοιράσου hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24
Παράμετροι
IPs προς σάρωση
<ip>,<net/mask>: Υποδεικνύει τις IPs απευθείας-iL <ips_file>: αρχείο με IPs-iR <number>: Αριθμός τυχαίων IPs, μπορείτε να εξαιρέσετε πιθανές IPs με--exclude <Ips>ή--excludefile <file>.
Ανακάλυψη εξοπλισμού
Εξ ορισμού το Nmap εκκινεί μια φάση ανακάλυψης που αποτελείται από: -PA80 -PS443 -PE -PP
-sL: Δεν είναι εισβολική, απαριθμεί τους στόχους κάνοντας αιτήσεις DNS για να επιλύσει ονόματα. Είναι χρήσιμη για να ξέρουμε αν π.χ. www.prueba.es/24 όλες οι IPs είναι στόχοι μας.-Pn: No ping. Χρήσιμο αν ξέρετε ότι όλοι είναι ενεργοί (σε διαφορετική περίπτωση μπορεί να χαθεί πολύς χρόνος, αλλά αυτή η επιλογή επίσης δίνει false negatives λέγοντας ότι δεν είναι ενεργοί), αποτρέπει τη φάση ανακάλυψης.-sn: No port scan. Μετά την ολοκλήρωση της φάσης αναγνώρισης, δεν σαρώνει θύρες. Είναι σχετικά διακριτικό και επιτρέπει μικρή σάρωση δικτύου. Με δικαιώματα στέλνει ένα ACK (-PA) στην 80, ένα SYN(-PS) στην 443 και ένα echo request και ένα Timestamp request, χωρίς δικαιώματα ολοκληρώνει πάντα τις συνδέσεις. Αν ο στόχος είναι το δίκτυο, χρησιμοποιεί μόνο ARP(-PR). Αν χρησιμοποιηθεί με άλλη επιλογή, μόνο τα πακέτα της άλλης επιλογής απορρίπτονται.-PR: Ping ARP. Χρησιμοποιείται από προεπιλογή όταν αναλύουμε υπολογιστές στο δίκτυό μας, είναι ταχύτερο από τη χρήση pings. Αν δεν θέλετε να χρησιμοποιήσετε ARP πακέτα, χρησιμοποιήστε--send-ip.-PS <ports>: Στέλνει SYN πακέτα — αν απαντήσει SYN/ACK θεωρείται open (απαντά με RST για να μην ολοκληρώσει τη σύνδεση), αν απαντήσει RST είναι closed και αν δεν απαντήσει είναι unreachable. Σε περίπτωση έλλειψης προνομίων, χρησιμοποιείται αυτόματα πλήρης σύνδεση. Αν δεν δοθούν ports, το στέλνει στην 80.-PA <ports>: Όπως το προηγούμενο αλλά με ACK, ο συνδυασμός τους δίνει καλύτερα αποτελέσματα.-PU <ports>: Στόχος είναι το αντίθετο, αποστέλλονται σε θύρες που αναμένεται να είναι κλειστές. Κάποια firewalls ελέγχουν μόνο TCP συνδέσεις. Αν είναι closed απαντάται με port unreachable, αν απαντηθεί με άλλο ICMP ή δεν απαντηθεί καταγράφεται ως destination unreachable.-PE, -PP, -PM: ICMP PINGS: echo reply, timestamp και addresmask. Εκτοξεύονται για να διαπιστωθεί αν ο στόχος είναι ενεργός.-PY<ports>: Στέλνει SCTP INIT probes στην 80 κατά προεπιλογή, μπορούν να απαντήσουν INIT-ACK(open) ή ABORT(closed) ή τίποτα ή ICMP unreachable(inactive).-PO <protocols>: Υποδεικνύεται ένα πρωτόκολλο στα headers, από προεπιλογή 1(ICMP), 2(IGMP) και 4(Encap IP). Για ICMP, IGMP, TCP (6) και UDP (17) πρωτόκολλα αποστέλλονται τα πρωτοκολλακά headers, για τα υπόλοιπα μόνο το IP header. Ο σκοπός είναι ότι λόγω παραμόρφωσης των headers, απαντώνται Protocol unreachable ή απαντήσεις του ίδιου πρωτοκόλλου για να ξέρουμε αν είναι up.-n: No DNS-R: DNS πάντα--system-dns: Επιβάλλει τον resolver του OS αντί του parallel stub resolver του Nmap. Χρήσιμο όταν/etc/hosts, split-DNS, ή plugins resolver επιστρέφουν δεδομένα που οι απευθείας ερωτήσεις του Nmap δεν επιστρέφουν. Είναι πιο αργό, και από το Nmap 7.96 οι forward lookups είναι ήδη παραλληλοποιημένοι, οπότε αυτό συνήθως χρειάζεται μόνο για συμβατότητα resolver.--dns-servers <server[,server],...>: Επιβάλλει συγκεκριμένους DNS servers για reverse lookups. Χρήσιμο σε εσωτερικές αξιολογήσεις για να ρωτήσετε authoritative ή internal resolvers απευθείας, ή για να μεταφέρετε την κίνηση-sL/reverse-DNS μακριά από τους default resolvers του δοκιμαστή.
Τεχνικές σάρωσης θυρών
-sS: Δεν ολοκληρώνει τη σύνδεση οπότε δεν αφήνει ίχνος, πολύ καλό αν μπορεί να χρησιμοποιηθεί. (δικαιώματα) Είναι η προεπιλεγμένη.-sT: Ολοκληρώνει τη σύνδεση, άρα αφήνει ίχνος, αλλά μπορεί να χρησιμοποιηθεί χωρίς αμφιβολία. Προεπιλογή χωρίς δικαιώματα.-sU: Πιο αργό, για UDP. Κυρίως: DNS(53), SNMP(161,162), DHCP(67 και 68), (-sU53,161,162,67,68): open(reply), closed(port unreachable), filtered (άλλο ICMP), open/filtered (τίποτα). Σε περίπτωση open/filtered, -sV στέλνει πολλές αιτήσεις για να εντοπίσει οποιαδήποτε από τις εκδόσεις που υποστηρίζει το nmap και μπορεί να ανιχνεύσει την πραγματική κατάσταση. Αυξάνει πολύ τον χρόνο.-sY: Το SCTP αποτυγχάνει να εγκαταστήσει τη σύνδεση, άρα δεν υπάρχουν logs, λειτουργεί όπως το -PY-sN,-sX,-sF: Null, Fin, Xmas, μπορούν να διαπεράσουν κάποια firewalls και να εξάγουν πληροφορία. Βασίζονται στο ότι μηχανές συμβατές με το πρότυπο θα απαντούν με RST όλα τα αιτήματα που δεν έχουν SYN, RST ή ACK flags ενεργά: open/filtered(τίποτα), closed(RST), filtered (ICMP unreachable). Αναξιόπιστες σε WIndows, CIsco, BSDI και OS/400. Σε unix ναι.-sM: Maimon scan: Στέλνει FIN και ACK flags, χρησιμοποιείται για BSD, σήμερα θα επιστρέψει όλα ως closed.-sA, sW: ACK και Window, χρησιμοποιείται για να εντοπίσει firewall, για να γνωρίζουμε αν οι θύρες είναι filtered ή όχι. Το -sW διακρίνει μεταξύ open/closed καθώς οι open απαντούν με διαφορετική τιμή window: open (RST με window διαφορετικό του 0), closed (RST window = 0), filtered (ICMP unreachable ή τίποτα). Δεν δουλεύουν όλοι οι υπολογιστές έτσι, οπότε αν είναι όλα closed, δεν λειτουργεί, αν είναι λίγα open τότε λειτουργεί καλά, και αν είναι πολλά open και λίγα closed, λειτουργεί αντίστροφα.-sI: Idle scan. Για περιπτώσεις όπου υπάρχει ενεργό firewall αλλά ξέρουμε ότι δεν φιλτράρει προς μια συγκεκριμένη IP (ή όταν θέλουμε απλώς ανωνυμία) μπορούμε να χρησιμοποιήσουμε τον zombie scanner (δουλεύει για όλες τις θύρες), για να βρούμε πιθανά zombies μπορούμε να χρησιμοποιήσουμε το script ipidseq ή το exploit auxiliary/scanner/ip/ipidseq. Αυτός ο scanner βασίζεται στον αριθμό IPID των IP πακέτων.--badsum: Στέλνει λάθος checksum, οι υπολογιστές θα απορρίψουν τα πακέτα, αλλά τα firewalls μπορεί να απαντήσουν κάτι, χρησιμοποιείται για ανίχνευση firewall.-sZ: “Weird” SCTP scanner, όταν στέλνονται probes με cookie echo fragments θα πρέπει να απορριφθούν αν είναι open ή να απαντηθούν με ABORT αν είναι closed. Μπορεί να περάσει μέσα από firewalls που το init δεν περνάει, το κακό είναι ότι δεν διακρίνει μεταξύ filtered και open.-sO: Protocol IP scan. Στέλνει κατεστραμμένα και κενά headers στα οποία μερικές φορές ούτε το πρωτόκολλο μπορεί να διακριθεί. Αν φτάσει ICMP unreachable protocol είναι closed, αν φτάσει unreachable port είναι open, αν έρθει άλλο σφάλμα, filtered, αν δεν έρθει τίποτα, open|filtered.-b <server>: FTPhost –> Χρησιμοποιείται για να σαρώσει έναν host από έναν άλλο, αυτό γίνεται συνδεόμενοι στο FTP μιας άλλης μηχανής και ζητώντας της να στείλει αρχεία προς τις θύρες που θέλουμε να σαρώσουμε από άλλη μηχανή. Σύμφωνα με τις απαντήσεις θα ξέρουμε αν είναι open ή όχι. [<user>:<password>@]<server>[:<port>] Σχεδόν όλοι οι ftp servers πλέον δεν το επιτρέπουν οπότε έχει λίγη πρακτική χρήση.
Εστίαση Ανάλυσης
-p: Χρησιμοποιείται για να καθορίσει τις θύρες για σάρωση. Για να επιλέξετε όλες τις 65,335 θύρες: -p- ή -p all. Το Nmap έχει εσωτερική ταξινόμηση με βάση τη δημοτικότητα. Από προεπιλογή χρησιμοποιεί τις κορυφαίες 1000 θύρες. Με -F (fast scan) αναλύει τις κορυφαίες 100. Με –top-ports
-sV Version scanning, η ένταση μπορεί να ρυθμιστεί από 0 έως 9, προεπιλογή είναι 7.
–version-intensity
–version-light Συνώνυμο του --version-intensity 2. Πολύ χρήσιμο για ένα πρώτο πέρασμα σε μεγάλα ranges ή αργές υπηρεσίες UDP.
–version-all Συνώνυμο του --version-intensity 9. Αναγκάζει όλα τα probes και είναι χρήσιμο όταν μια υπηρεσία απαντά μόνο σε σπάνια probes.
–allports Αναγκάζει detection έκδοσης σε θύρες εξαιρούμενες από nmap-service-probes (ειδικά TCP/9100). Προσοχή: σε μερικούς εκτυπωτές ή raw socket listeners αυτό μπορεί να τους κάνει να εκτυπώσουν τα probe δεδομένα.
-O Ανίχνευση OS
–osscan-limit Για σωστή ανάλυση host, χρειάζεται τουλάχιστον μια open και μια closed θύρα. Αν αυτή η προϋπόθεση δεν καλύπτεται και έχουμε ενεργοποιήσει αυτή την επιλογή, δεν θα επιχειρήσει πρόβλεψη OS (εξοικονομεί χρόνο)
–osscan-guess Όταν η ανίχνευση OS δεν είναι τέλεια, αυτό το κάνει να προσπαθεί περισσότερο
Scripts
–script
Για χρήση των default scripts, χρησιμοποιήστε -sC ή –script=default
Διαθέσιμοι τύποι: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, και vuln
- Auth: εκτελεί όλα τα διαθέσιμα authentication scripts
- Default: εκτελεί βασικά default tool scripts
- Discovery: ανακτά πληροφορίες από τον στόχο ή θύμα
- External: script για χρήση εξωτερικών πόρων
- Intrusive: χρησιμοποιεί scripts που θεωρούνται intrusive προς το θύμα ή στόχο
- Malware: ελέγχει για συνδέσεις ανοικτές από κακόβουλο κώδικα ή backdoors
- Safe: εκτελεί μη εισβολικά scripts
- Vuln: ανακαλύπτει τις πιο γνωστές ευπαθείς καταστάσεις
- All: εκτελεί απολύτως όλα τα διαθέσιμα NSE extension scripts
Για αναζήτηση scripts:
nmap –script-help=“http-*” -> Αυτά που αρχίζουν με http-
nmap –script-help=“not intrusive” -> Όλα εκτός από αυτά
nmap –script-help=“default or safe” -> Αυτά που είναι στο ένα ή και στα δύο
nmap –script-help=“default and safe” –> Αυτά που είναι και στα δύο
nmap –script-help=“(default or safe or intrusive) and not http-*”
–script-args
–script-args-file
–script-help
–script-trace —> Παρέχει πληροφορίες για την πρόοδο του script
–script-updatedb
Για να χρησιμοποιήσετε ένα script, απλά γράψτε: nmap –script Script_Name target –> Όταν χρησιμοποιείται το script, τόσο το script όσο και ο scanner θα εκτελεστούν, οπότε μπορούν επίσης να προστεθούν επιλογές scanner. Μπορούμε να προσθέσουμε “safe=1” για να εκτελούνται μόνο τα safe.
Έλεγχος Χρόνου
Το Nmap μπορεί να τροποποιήσει χρόνο σε seconds, minutes, ms: –host-timeout ορίσματα 900000ms, 900, 900s, και 15m κάνουν το ίδιο.
Το Nmap διαιρεί τον συνολικό αριθμό hosts προς σάρωση σε ομάδες και αναλύει αυτές τις ομάδες σε μπλοκ, οπότε δεν προχωρά στο επόμενο μπλοκ μέχρι να αναλυθούν όλα (και ο χρήστης δεν λαμβάνει ενημερώσεις μέχρι να αναλυθεί το μπλοκ). Έτσι, είναι πιο αποδοτικό για το Nmap να χρησιμοποιεί μεγάλες ομάδες. Από προεπιλογή σε class C, χρησιμοποιεί 256.
Αυτό μπορεί να αλλάξει με –min-hostgroup
Μπορείτε να ελέγξετε τον αριθμό των παράλληλων scanners αλλά είναι καλύτερα να μην το κάνετε (το Nmap ήδη ενσωματώνει αυτόματο έλεγχο βάσει της κατάστασης δικτύου): –min-parallelism
Μπορούμε να τροποποιήσουμε το RTT timeout, αλλά συνήθως δεν είναι απαραίτητο: –min-rtt-timeout , –max-rtt-timeout , –initial-rtt-timeout
Μπορούμε να τροποποιήσουμε τον αριθμό των προσπαθειών: –max-retries
Μπορούμε να τροποποιήσουμε τον χρόνο σάρωσης ενός host: –host-timeout
Μπορούμε να τροποποιήσουμε το διάστημα μεταξύ κάθε δοκιμής για να την επιβραδύνουμε: –scan-delay ; –max-scan-delay
Μπορούμε να τροποποιήσουμε τον αριθμό πακέτων ανά δευτερόλεπτο: –min-rate
Πολλές θύρες απαιτούν πολύ χρόνο να απαντήσουν όταν είναι filtered ή closed. Αν μας ενδιαφέρουν μόνο οι open, μπορούμε να επιταχύνουμε με: –defeat-rst-ratelimit
Για να ορίσουμε πόσο επιθετικό θέλουμε το Nmap: -T paranoid|sneaky|polite|normal|aggressive|insane
-T (0-1)
-T0 –> Σαρώνει μόνο 1 θύρα τη φορά και περιμένει 5 λεπτά μέχρι την επόμενη
-T1 και T2 –> Πολύ παρόμοια αλλά περιμένουν 15 και 0.4sec αντίστοιχα μεταξύ κάθε δοκιμής
-T3 –> Προεπιλεγμένη λειτουργία, περιλαμβάνει παράλληλη σάρωση
-T4 –> –max-rtt-timeout 1250ms –min-rtt-timeout 100ms –initial-rtt-timeout 500ms –max-retries 6 –max-scan-delay 10ms
-T5 –> –max-rtt-timeout 300ms –min-rtt-timeout 50ms –initial-rtt-timeout 250ms –max-retries 2 –host-timeout 15m –max-scan-delay 5ms
Firewall/IDS
Δεν επιτρέπουν πρόσβαση σε θύρες και αναλύουν πακέτα.
-f Για να τμηματοποιήσετε πακέτα, από προεπιλογή τα τμηματοποιεί σε 8bytes μετά το header, για να καθορίσετε αυτό το μέγεθος χρησιμοποιούμε ..mtu (με αυτό, μην χρησιμοποιείτε -f), το offset πρέπει να είναι πολλαπλάσιο του 8. Version scanners και scripts δεν υποστηρίζουν fragmentation
-D decoy1,decoy2,ME Το Nmap στέλνει scanners αλλά με άλλες IP διευθύνσεις ως προέλευση, έτσι σας κρύβει. Αν βάλετε ME στη λίστα, το Nmap θα σας τοποθετήσει εκεί, καλύτερα να βάλετε 5 ή 6 πριν από εσάς για να σας συγκαλύψει πλήρως. Μπορούν να δημιουργηθούν τυχαίες IPs με RND:
Για χρήση τυχαίων IPs: nmap -D RND:10 Target_IP
-S IP Όταν το Nmap δεν “πιάνει” τη δική σας IP πρέπει να τη δώσετε με αυτό. Επίσης χρησιμεύει για να τους κάνετε να νομίζουν ότι άλλος στόχος τους σαρώνει.
-e
Πολλοί admins αφήνουν entry ports ανοιχτές για να δουλεύουν όλα σωστά και τους είναι πιο εύκολο απ’ το να βρουν άλλη λύση. Αυτές μπορεί να είναι DNS ή FTP ports… για να βρούμε αυτή την ευπάθεια το Nmap ενσωματώνει: –source-port
–data
–data-string
–data-length
Για πλήρη διαμόρφωση του IP πακέτου χρησιμοποιήστε –ip-options
Αν θέλετε να δείτε τις επιλογές στα πακέτα που στέλνονται και λαμβάνονται, καθορίστε –packet-trace. Για περισσότερες πληροφορίες και παραδείγματα χρήσης IP options με Nmap, δείτε http://seclists.org/nmap-dev/2006/q3/52.
–ttl
–randomize-hosts Για να κάνετε την επίθεση λιγότερο ξεκάθαρη
–spoof-mac <MAC address, prefix, or vendor name> Για αλλαγή MAC παραδείγματα: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, και Cisco
–proxies
-sP Για ανακάλυψη hosts στο δίκτυό μας με ARP
Πολλοί admins δημιουργούν κανόνα firewall που επιτρέπει όλα τα πακέτα από μια συγκεκριμένη θύρα (όπως 20,53 και 67), μπορούμε να πούμε στο Nmap να στέλνει τα πακέτα μας από αυτές τις θύρες: nmap –source-port 53 IP
Εξαγωγές
-oN file Κανονική έξοδος
-oX file XML έξοδος
-oS file Script kiddies output
-oG file Greppable έξοδος. Ακόμη λειτουργεί, αλλά είναι deprecated; το XML είναι καλύτερο για automation γιατί νέα χαρακτηριστικά του Nmap προστίθενται πρώτα εκεί. Συνεχίστε να χρησιμοποιείτε -oN αν θέλετε --resume, και προτιμήστε -oX/-oA για μηχανική επεξεργασία.
-oA file Όλα εκτός του -oS
–webxml Αλλάζει το XML stylesheet reference σε https://nmap.org/svn/docs/nmap.xsl, κάνοντας το XML πιο εύκολο να ανοίξει ως HTML σε άλλη μηχανή.
–stylesheet <path|url> Χρησιμοποιήστε custom XSL stylesheet. Το --webxml είναι απλά ένα shortcut προς το επίσημο hosted stylesheet.
-v level verbosity
-d level debugging
–reason Λόγος για host και state
–stats-every time Κάθε αυτό το χρόνο μας δείχνει την πρόοδο
–packet-trace Για να δείτε ποια πακέτα βγαίνουν, μπορούν να καθοριστούν φίλτρα όπως: –version-trace ή –script-trace
–open δείχνει open, open|filtered και unfiltered
–resume file Επαναλαμβάνει μια διακοπείσα σάρωση από ένα normal (-oN) ή grepable (-oG) αρχείο εξόδου. Σε τρέχουσες ροές εργασίας είναι συνηθισμένο να κρατάτε -oN για δυνατότητα επανέναρξης και -oX για parsing.
Παράδειγμα για ροές εργασίας parsing/HTML conversion:
# Send only XML to stdout for tooling
nmap -sV -oX - 10.10.10.0/24
# Portable HTML-friendly XML
nmap -sV --webxml -oX scan.xml 10.10.10.10
Διάφορα
-6 Επιτρέπει IPv6
-A ισοδυναμεί με -O -sV -sC –traceroute
Κατά τη διάρκεια εκτέλεσης
Κατά την εκτέλεση του Nmap μπορούμε να αλλάξουμε επιλογές:
v / V Αύξηση / μείωση επιπέδου λεπτομέρειας
d / D Αύξηση / μείωση επιπέδου debug
p / P Ενεργοποίηση / απενεργοποίηση παρακολούθησης πακέτων
? Εμφάνιση οθόνης βοήθειας κατά την εκτέλεση
Vulscan
Nmap script που αναλύει τις εκδόσεις υπηρεσιών με βάση μια offline βάση δεδομένων (κατεβασμένη από άλλες σημαντικές) και επιστρέφει πιθανές vulnerabilities
Οι DBs που χρησιμοποιεί είναι:
- Scipvuldb.csv | http://www.scip.ch/en/?vuldb
- Cve.csv | http://cve.mitre.org
- Osvdb.csv | http://www.osvdb.org
- Securityfocus.csv | http://www.securityfocus.com/bid/
- Securitytracker.csv | http://www.securitytracker.com
- Xforce.csv | http://xforce.iss.net
- Exploitdb.csv | http://www.exploit-db.com
- Openvas.csv | http://www.openvas.org
Για να το κατεβάσετε και εγκαταστήσετε στον φάκελο του Nmap:
wget http://www.computec.ch/projekte/vulscan/download/nmap_nse_vulscan-2.0.tar.gz && tar -czvf nmap_nse_vulscan-2.0.tar.gz vulscan/ && sudo cp -r vulscan/ /usr/share/nmap/scripts/
Επίσης θα χρειαστεί να κατεβάσετε τα πακέτα DB και να τα προσθέσετε στο /usr/share/nmap/scripts/vulscan/
Χρήση:
Για να χρησιμοποιήσετε όλα: sudo nmap -sV –script=vulscan HOST_TO_SCAN
Για να χρησιμοποιήσετε μια συγκεκριμένη DB: sudo nmap -sV –script=vulscan –script-args vulscandb=cve.csv HOST_TO_SCAN
Αν έχετε πρόσβαση στο Internet, το επίσημο NSE script του Nmap vulners είναι συνήθως η πιο γρήγορη και συντηρημένη εναλλακτική για εμπλουτισμό βάσει έκδοσης:
nmap -sV --script vulners --script-args mincvss=7.0 <IP>
This script ανήκει στις κατηγορίες safe, external, και vuln. Επειδή εξαρτάται από το πόσο ακριβές ήταν το -sV, validate τα hits χειροκίνητα όταν το service banner είναι generic ή proxied.
Recent Practical Notes (7.94+)
- Since Nmap 7.94, UDP port scan (
-sU) and version detection (-sV) use the samenmap-service-probespayload source. A UDP response from the scan phase can immediately feed version matching, so-sU -sV --version-lightis now a good first pass against large or lossy ranges. - Since Nmap 7.94,
-sVcan also probe UDP services hidden behind DTLS, which is useful for modern management/ICS gear that wraps UDP protocols in DTLS. - Nmap 7.95 added a large batch of new service fingerprints, including
grpc,mysqlx,remotemouse, andtuya, plus new ICS-focused NSE coverage such ashartip-infoandiec61850-mms. If you are scanning OT or embedded estates, updating Nmap matters more than adding custom probes too early. - Since Nmap 7.96, forward DNS lookups are parallelized too. Large hostname lists are much faster now, so
--system-dnsshould usually be reserved for compatibility issues instead of performance.
Speed Up Nmap Service scan x16
According to this post you can speed up the nmap service analysis by modifying all the totalwaitms values in /usr/share/nmap/nmap-service-probes to 300 and tcpwrappedms to 200.
Moreover, probes which do not have a specifically defined servicewaitms use a default value of 5000. Therefore, we can either add values to each of the probes, or we can compile nmap ourselves and change the default value in service_scan.h.
If you don’t want to change the values of totalwaitms and tcpwrappedms at all in the /usr/share/nmap/nmap-service-probes file, you can edit the parsing code such that these values in the nmap-service-probes file are completely ignored.
Build a static Nmap for restricted environments
Σε hardened ή minimal Linux περιβάλλοντα (containers, appliances), dynamically linked Nmap binaries συχνά αποτυγχάνουν λόγω ελλείποντων runtime loaders ή shared libraries (π.χ., /lib64/ld-linux-x86-64.so.2, libc.so). Το να χτίσετε ένα statically linked Nmap και να πακετάρετε τα NSE δεδομένα επιτρέπει εκτέλεση χωρίς εγκατάσταση συστημικών πακέτων.
High-level approach
- Use a clean amd64 Ubuntu builder via Docker.
- Build OpenSSL and PCRE2 as static libraries.
- Build Nmap linking statically and using the included libpcap/libdnet to avoid dynamic deps.
- Bundle NSE scripts and data directories with the binary.
Discover target architecture (example)
uname -a
# If building from macOS/ARM/etc., pin the builder arch:
docker run --rm --platform=linux/amd64 -v "$(pwd)":/out -w /tmp ubuntu:22.04 bash -lc 'echo ok'
Βήμα 1 — Προετοιμάστε την αλυσίδα εργαλείων
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
apt-get update && apt-get install -y --no-install-recommends \
build-essential ca-certificates curl bzip2 xz-utils pkg-config perl python3 file git \
automake autoconf libtool m4 zlib1g-dev
Βήμα 2 — Κατασκευή στατικού OpenSSL (1.1.1w)
OSSL="1.1.1w"
curl -fsSLO "https://www.openssl.org/source/openssl-$OSSL.tar.gz"
tar xzf "openssl-$OSSL.tar.gz" && cd "openssl-$OSSL"
./Configure no-shared no-zlib linux-x86_64 -static --prefix=/opt/ossl
make -j"$(nproc)" && make install_sw
cd /tmp
Βήμα 3 — Κατασκευή στατικής PCRE2 (10.43)
PCRE2=10.43
curl -fsSLO "https://github.com/PCRE2Project/pcre2/releases/download/pcre2-$PCRE2/pcre2-$PCRE2.tar.bz2"
tar xjf "pcre2-$PCRE2.tar.bz2" && cd "pcre2-$PCRE2"
./configure --disable-shared --enable-static --prefix=/opt/pcre2
make -j"$(nproc)" && make install
cd /tmp
Βήμα 4 — Κατασκευή στατικού Nmap (7.98)
NMAP=7.98
curl -fsSLO "https://nmap.org/dist/nmap-$NMAP.tar.bz2"
tar xjf "nmap-$NMAP.tar.bz2" && cd "nmap-$NMAP"
export CPPFLAGS="-I/opt/ossl/include -I/opt/pcre2/include"
export LDFLAGS="-L/opt/ossl/lib -L/opt/pcre2/lib -static -static-libstdc++ -static-libgcc"
export LIBS="-lpcre2-8 -ldl -lpthread -lz"
./configure \
--with-openssl=/opt/ossl \
--with-libpcre=/opt/pcre2 \
--with-libpcap=included \
--with-libdnet=included \
--without-zenmap --without-ndiff --without-nmap-update
# Avoid building shared libpcap by accident
sed -i -e "s/^shared: /shared: #/" libpcap/Makefile || true
make -j1 V=1 nmap
strip nmap
Κύρια σημεία
- -static, -static-libstdc++, -static-libgcc επιβάλλουν στατική σύνδεση.
- Η χρήση –with-libpcap=included/–with-libdnet=included αποφεύγει τις system-shared libs.
- Μια τροποποίηση με sed εξουδετερώνει έναν shared libpcap target αν υπάρχει.
Βήμα 5 — Συσκευασία binary και δεδομένων NSE
mkdir -p /out/nmap-bundle/nmap-data
cp nmap /out/nmap-bundle/nmap-linux-amd64-static
cp -r scripts nselib /out/nmap-bundle/nmap-data/
cp nse_main.lua nmap-services nmap-protocols nmap-service-probes \
nmap-mac-prefixes nmap-os-db nmap-payloads nmap-rpc \
/out/nmap-bundle/nmap-data/ 2>/dev/null || true
tar -C /out -czf /out/nmap-linux-amd64-static-bundle.tar.gz nmap-bundle
Verification and ops notes
- Χρησιμοποιήστε το file στο artifact για να επιβεβαιώσετε ότι είναι statically linked.
- Κρατήστε τα δεδομένα NSE μαζί με το binary για να εξασφαλίσετε συμβατότητα των scripts σε hosts χωρίς εγκατεστημένο Nmap.
- Ακόμη και με static binary, η εκτέλεση μπορεί να μπλοκαριστεί από AppArmor/seccomp/SELinux; DNS/egress πρέπει να λειτουργεί.
- Οι deterministic builds μειώνουν τον κίνδυνο στην supply-chain σε σχέση με το να κατεβάζετε αδιαφανή “static” binaries.
One-liner (Dockerized)
Build, bundle, και εκτύπωση πληροφοριών του artifact
```bash docker run --rm --platform=linux/amd64 -v "$(pwd)":/out -w /tmp ubuntu:22.04 bash -lc ' set -euo pipefail export DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends \ build-essential ca-certificates curl bzip2 xz-utils pkg-config perl python3 file git \ automake autoconf libtool m4 zlib1g-devOSSL=“1.1.1w”; curl -fsSLO “https://www.openssl.org/source/openssl-$OSSL.tar.gz”
&& tar xzf “openssl-$OSSL.tar.gz” && cd “openssl-$OSSL”
&& ./Configure no-shared no-zlib linux-x86_64 -static –prefix=/opt/ossl
&& make -j“$(nproc)“ && make install_sw && cd /tmp
PCRE2=10.43; curl -fsSLO “https://github.com/PCRE2Project/pcre2/releases/download/pcre2-$PCRE2/pcre2-$PCRE2.tar.bz2”
&& tar xjf “pcre2-$PCRE2.tar.bz2” && cd “pcre2-$PCRE2”
&& ./configure –disable-shared –enable-static –prefix=/opt/pcre2
&& make -j“$(nproc)“ && make install && cd /tmp
NMAP=7.98; curl -fsSLO “https://nmap.org/dist/nmap-$NMAP.tar.bz2”
&& tar xjf “nmap-$NMAP.tar.bz2” && cd “nmap-$NMAP”
&& export CPPFLAGS=“-I/opt/ossl/include -I/opt/pcre2/include”
&& export LDFLAGS=“-L/opt/ossl/lib -L/opt/pcre2/lib -static -static-libstdc++ -static-libgcc”
&& export LIBS=“-lpcre2-8 -ldl -lpthread -lz”
&& ./configure –with-openssl=/opt/ossl –with-libpcre=/opt/pcre2 –with-libpcap=included –with-libdnet=included –without-zenmap –without-ndiff –without-nmap-update
&& sed -i -e “s/^shared: /shared: #/” libpcap/Makefile || true
&& make -j1 V=1 nmap && strip nmap
mkdir -p /out/nmap-bundle/nmap-data
&& cp nmap /out/nmap-bundle/nmap-linux-amd64-static
&& cp -r scripts nselib /out/nmap-bundle/nmap-data/
&& cp nse_main.lua nmap-services nmap-protocols nmap-service-probes nmap-mac-prefixes nmap-os-db nmap-payloads nmap-rpc /out/nmap-bundle/nmap-data/ 2>/dev/null || true
&& tar -C /out -czf /out/nmap-linux-amd64-static-bundle.tar.gz nmap-bundle
&& echo “===== OUTPUT =====”; ls -lah /out; echo “===== FILE TYPE =====”; file /out/nmap-bundle/nmap-linux-amd64-static || true
’
</details>
## Αναφορές
- [Compiling static Nmap binary for jobs in restricted environments](https://www.pentestpartners.com/security-blog/compiling-static-nmap-binary-for-jobs-in-restricted-environments/)
- [Static Nmap Binary Generator (helper tool)](https://github.com/0x5ubt13/static_nmap_binary_generator)
- [OpenSSL sources](https://www.openssl.org/source/)
- [PCRE2 releases](https://github.com/PCRE2Project/pcre2/releases)
- [Nmap source tarballs](https://nmap.org/dist/)
- [Nmap Change Log](https://nmap.org/changelog.html)
- [Nmap Output Formats](https://nmap.org/book/man-output.html)
> [!TIP]
> Μάθε & εξασκήσου στο AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Μάθε & εξασκήσου στο GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Μάθε & εξασκήσου στο Az Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Περιηγήσου στον [**πλήρη κατάλογο HackTricks Training**](https://hacktricks-training.com/courses/) για τα assessment tracks (**ARTA/GRTA/AzRTA**) και στο [**Linux Hacking Expert (LHE)**](https://hacktricks-training.com/courses/lhe/).
>
> <details>
>
> <summary>Υποστήριξε το HackTricks</summary>
>
> - Δες τα [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Γίνε μέλος** της 💬 [**Discord group**](https://discord.gg/hRep4RUj7f), της [**telegram group**](https://t.me/peass), **ακολούθησε** το [**@hacktricks_live**](https://twitter.com/hacktricks_live) στο **X/Twitter**, ή δες τη [**LinkedIn page**](https://www.linkedin.com/company/hacktricks/) και το [**YouTube channel**](https://www.youtube.com/@hacktricks_LIVE).
> - **Μοιράσου hacking tricks υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>


