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)
assessment tracks (ARTA/GRTA/AzRTA) और Linux Hacking Expert (LHE) के लिए full HackTricks Training catalog ब्राउज़ करें।
HackTricks का समर्थन करें
- subscription plans देखें!
- जुड़ें 💬 Discord group, telegram group, follow करें @hacktricks_live X/Twitter पर, या LinkedIn page और YouTube channel देखें।
- HackTricks](https://github.com/carlospolop/hacktricks) और HackTricks Cloud github repos में PRs सबमिट करके hacking tricks साझा करें।
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: यह invasive नहीं है, यह नाम resolve करने के लिए DNS अनुरोध करके लक्ष्यों को सूचीबद्ध करता है। यह उपयोगी है यह जानने के लिए कि उदाहरण के लिए www.prueba.es/24 में सभी IPs हमारे लक्ष्यों में हैं या नहीं।-Pn: No ping. यह उपयोगी है यदि आप जानते हैं कि सभी active हैं (अन्यथा आप बहुत समय खो सकते हैं, लेकिन यह विकल्प false negatives भी दे सकता है कि वे active नहीं हैं), यह discovery चरण को रोकता है।-sn: No port scan. reconnaissance चरण पूरा करने के बाद यह पोर्ट्स स्कैन नहीं करता। यह अपेक्षाकृत stealthy है, और छोटे नेटवर्क स्कैन की अनुमति देता है। विशेषाधिकार होने पर यह 80 पर ACK (-PA), 443 पर SYN (-PS) और एक echo request और एक Timestamp request भेजता है, विशेषाधिकार नहीं होने पर यह हमेशा कनेक्शन्स पूरा करता है। यदि लक्ष्य नेटवर्क है, तो यह केवल ARP(-PR) का उपयोग करता है। यदि किसी अन्य विकल्प के साथ उपयोग किया जाए, तो केवल दूसरे विकल्प के पैकेट ड्रॉप किए जाते हैं।-PR: Ping ARP. यह हमारे नेटवर्क के कंप्यूटरों का विश्लेषण करते समय डिफ़ॉल्ट रूप से उपयोग किया जाता है, यह pings का उपयोग करने से तेज़ है। यदि आप ARP पैकेट उपयोग नहीं करना चाहते तो--send-ipका उपयोग करें।-PS <ports>: यह SYN पैकेट भेजता है; यदि यह SYN/ACK से उत्तर देता है तो वह open माना जाता है (कनेक्शन समाप्त न करने के लिए यह RST से उत्तर देता है), यदि यह RST से उत्तर देता है तो closed है और यदि उत्तर नहीं आता तो unreachable है। यदि विशेषाधिकार नहीं हैं, तो कुल कनेक्शन स्वचालित रूप से उपयोग किया जाता है। यदि कोई पोर्ट नहीं दिया गया है, तो यह डिफ़ॉल्ट रूप से 80 पर भेजता है।-PA <ports>: पिछले जैसा ही पर ACK के साथ, दोनों को मिलाकर बेहतर नतीजे मिलते हैं।-PU <ports>: उद्देश्य इसके उलट है, इन्हें उन पोर्ट्स पर भेजा जाता है जिनकी उम्मीद बंद रहने की होती है। कुछ firewalls केवल TCP कनेक्शन्स चेक करते हैं। यदि closed है तो porta unreachable से उत्तर मिलता है, यदि किसी अन्य icmp से उत्तर मिलता है या उत्तर नहीं मिलता तो destination unreachable माना जाता है।-PE, -PP, -PM: ICMP PINGS: echo reply, timestamp और addresmask। इन्हें यह पता लगाने के लिए भेजा जाता है कि लक्ष्य active है या नहीं।-PY<ports>: SCTP INIT probes भेजता है, डिफ़ॉल्ट 80 पर; INIT-ACK(open) या ABORT(closed) या कुछ नहीं या ICMP unreachable(inactive) उत्तर मिल सकते हैं।-PO <protocols>: हेडर में एक protocol निर्दिष्ट किया जाता है, डिफ़ॉल्ट 1(ICMP), 2(IGMP) और 4(Encap IP)। ICMP, IGMP, TCP (6) और UDP (17) के लिए protocol headers भेजे जाते हैं, बाकी के लिए केवल IP header भेजा जाता है। इसका उद्देश्य है कि हेडर की malformed स्थिति में Protocol unreachable या उसी protocol के responses आकर पता चले कि यह up है।-n: No DNS-R: DNS हमेशा--system-dns: OS resolver को मजबूर करता है Nmap के parallel stub resolver की जगह। उपयोगी जब/etc/hosts, split-DNS, या resolver plugins ऐसे डेटा लौटाते हैं जो Nmap की direct queries नहीं लौटातीं। यह धीमा है, और Nmap 7.96 से forward lookups पहले से parallelized हैं, इसलिए आमतौर पर केवल resolver compatibility के लिए आवश्यक होता है।--dns-servers <server[,server],...>: reverse lookups के लिए विशिष्ट DNS सर्वरों को मजबूर करता है। internal assessments में authoritative या internal resolvers को सीधे query करने के लिए उपयोगी, या-sL/reverse-DNS ट्रैफ़िक को tester के default resolvers से अलग भेजने के लिए।
पोर्ट स्कैनिंग तकनीकें
-sS: कनेक्शन पूरा नहीं करता इसलिए कोई निशान नहीं छोड़ता, यदि इस्तेमाल किया जा सके तो बहुत अच्छा।(विशेषाधिकार) यह डिफ़ॉल्ट रूप से उपयोग होने वाला है।-sT: कनेक्शन पूरा करता है, इसलिए यह निशान छोड़ता है, लेकिन यह बिना विशेषाधिकार के उपयोग किया जा सकता है।-sU: धीमा, UDP के लिए। मुख्य रूप से: DNS(53), SNMP(161,162), DHCP(67 and 68), (-sU53,161,162,67,68): open(reply), closed(port unreachable), filtered (अन्य ICMP), open/filtered (कोई उत्तर नहीं)। open/filtered के मामले में, -sV कई अनुरोध भेजता है ताकि nmap समर्थित किसी भी संस्करण का पता लगाया जा सके और वास्तविक स्थिति का पता चल सके। यह काफी समय बढ़ा देता है।-sY: SCTP protocol जो कनेक्शन स्थापित नहीं कर पाता, इसलिए कोई logs नहीं होते, -PY की तरह काम करता है-sN,-sX,-sF: Null, Fin, Xmas, ये कुछ firewalls को पार कर सकते हैं और जानकारी निकाल सकते हैं। ये इस बात पर आधारित हैं कि standard compliant मशीनों को उन अनुरोधों पर RST से जवाब देना चाहिए जिनमें SYN, RST या ACK flag नहीं हैं: 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, फ़ायरवॉल का पता लगाने के लिए उपयोग होता है, यह जानने के लिए कि पोर्ट्स filtered हैं या नहीं। -sW open/closed के बीच फर्क करता है क्योंकि open ones अलग window value के साथ RST से जवाब देते हैं: open (RST window अन्य than 0), closed (RST window = 0), filtered (ICMP unreachable या कोई उत्तर नहीं). सभी कंप्यूटर इस तरह काम नहीं करते, इसलिए यदि सब closed दिखे तो यह काम नहीं कर रहा, यदि कुछ open हों तो यह ठीक काम कर रहा, और यदि बहुत सारे open और कुछ closed हों तो यह उल्टा काम कर रहा होगा।-sI: Idle scan. उन मामलों के लिए जहाँ active firewall है पर हम जानते हैं कि वह किसी निश्चित IP पर filter नहीं करता (या जब हम anonymity चाहते हैं) हम zombie scanner का उपयोग कर सकते हैं (यह सभी पोर्ट्स के लिए काम करता है), संभावित zombies ढूँढने के लिए हम scrpit ipidseq या exploit auxiliary/scanner/ip/ipidseq का उपयोग कर सकते हैं। यह scanner IP packets के IPID नंबर पर आधारित है।--badsum: यह checksum गलत भेजता है, कंप्यूटर पैकेट्स discard कर देंगे, पर firewalls कुछ उत्तर दे सकते हैं, इसे फ़ायरवॉल डिटेक्शन के लिए उपयोग किया जाता है।-sZ: “Weird” SCTP scanner, जब cookie echo fragments के साथ probes भेजे जाते हैं तो उन्हें open होने पर drop किया जाना चाहिए या closed होने पर ABORT से उत्तर मिलना चाहिए। यह उन फ़ायरवॉल्स को पार कर सकता है जिन्हें init पार नहीं कर पाता, बुराई यह है कि यह filtered और open के बीच अंतर नहीं कर पाता।-sO: Protocol Ip scan. खराब और खाली हेडर्स भेजे जाते हैं जिनमें कभी-कभी protocol की पहचान भी नहीं होती। यदि ICMP unreachable protocol आता है तो यह closed है, यदि unreachable port आता है तो यह open है, यदि कोई अन्य error आता है तो filtered, यदि कुछ नहीं आता तो open|filtered।-b <server>: FTPhost –> यह एक होस्ट को दूसरे से स्कैन करने के लिए उपयोग होता है, यह दूसरे मशीन के ftp से कनेक्ट करके उसे उन पोर्ट्स पर फाइल्स भेजने के लिए कहकर किया जाता है जिन्हें आप दूसरे मशीन से स्कैन करना चाहते हैं, उत्तरों के अनुसार हम जान लेंगे कि वे open हैं या नहीं। [<user>:<password>@]<server>[:<port>] लगभग सभी ftp servers अब यह अनुमति नहीं देते और इसलिए इसका व्यावहारिक उपयोग कम है।
फोकस विश्लेषण
-p: स्कैन करने के लिए पोर्ट्स निर्दिष्ट करने के लिए उपयोग किया जाता है। सभी 65,335 पोर्ट्स चुनने के लिए: -p- या -p all। Nmap के पास popularity पर आधारित एक internal classification है। डिफ़ॉल्ट रूप से यह top 1000 ports का उपयोग करता है। -F (fast scan) के साथ यह top 100 को analyze करता है। –top-ports
-sV Version scanning, intensity 0 से 9 तक नियंत्रित की जा सकती है, डिफ़ॉल्ट 7 है।
–version-intensity
–version-light --version-intensity 2 का Alias। बड़े रेंज या धीमी UDP सेवाओं के खिलाफ पहली पास के लिए बहुत उपयोगी।
–version-all --version-intensity 9 का Alias। सभी probes मजबूर करता है और उपयोगी है जब कोई सेवा केवल दुर्लभ probes का उत्तर देती है।
–allports nmap-service-probes द्वारा exclude किए गए पोर्ट्स पर version detection मजबूर करता है (विशेष रूप से TCP/9100)। सावधान रहें: कुछ printers या raw socket listeners पर यह उन्हें probe डेटा प्रिंट करवा सकता है।
-O OS detection
–osscan-limit उपयुक्त host scanning के लिए कम से कम एक open और एक closed पोर्ट चाहिए। यदि यह शर्त पूरी नहीं होती और हमने यह सेट किया है, तो यह OS prediction का प्रयास नहीं करेगा (समय बचता है)
–osscan-guess जब OS detection परफेक्ट नहीं होता, तो यह इसे और मोर्चों पर आज़माता है
स्क्रिप्ट्स
–script
डिफ़ॉल्ट स्क्रिप्ट्स उपयोग करने के लिए, -sC या –script=default का उपयोग करें
Available types हैं: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, और vuln
- Auth: उपलब्ध सभी authentication scripts चलाता है
- Default: बुनियादी default tool scripts चलाता है
- Discovery: target या victim से जानकारी प्राप्त करता है
- External: external resources का उपयोग करने के लिए script
- Intrusive: victim या target पर intrusive माने जाने वाले scripts का उपयोग करता है
- Malware: malicious code या backdoors द्वारा खोले गए connections की जाँच करता है
- Safe: non-intrusive scripts चलाता है
- Vuln: सबसे जानी-मानी vulnerabilities का पता लगाता है
- All: उपलब्ध सभी NSE extension scripts को पूर्णतः चलाता है
स्क्रिप्ट्स खोजने के लिए:
nmap –script-help=“http-*” -> Those starting with http-
nmap –script-help=“not intrusive” -> All except those
nmap –script-help=“default or safe” -> Those in either or both
nmap –script-help=“default and safe” –> Those in both
nmap –script-help=“(default or safe or intrusive) and not http-*”
–script-args
–script-args-file
–script-help
–script-trace —> स्क्रिप्ट के प्रगति के बारे में जानकारी प्रदान करता है
–script-updatedb
किसी स्क्रिप्ट का उपयोग करने के लिए, बस टाइप करें: nmap –script Script_Name target –> स्क्रिप्ट का उपयोग करते समय, स्क्रिप्ट और scanner दोनों execute होंगे, इसलिए scanner विकल्प भी जोड़े जा सकते हैं। हम केवल safe ones को चलाने के लिए “safe=1” जोड़ सकते हैं।
समय नियंत्रण
Nmap समय को seconds, minutes, ms में बदल सकता है: –host-timeout arguments 900000ms, 900, 900s, और 15m सब समान काम करते हैं।
Nmap उन hosts की कुल संख्या को समूहों में बाँटता है और इन समूहों को blocks में analyze करता है, इसलिए यह अगले block पर तब तक नहीं जाता जब तक सभी का विश्लेषण नहीं हो जाता (और उपयोगकर्ता को तब तक कोई अपडेट नहीं मिलता)। इस तरह, बड़े समूह Nmap के लिए अधिक optimal होते हैं। डिफ़ॉल्ट रूप से class C में यह 256 का उपयोग करता है।
इसे बदला जा सकता है –min-hostgroup
आप parallel scanners की संख्या नियंत्रित कर सकते हैं पर बेहतर है न करें (Nmap पहले से network status के आधार पर automatic control शामिल करता है): –min-parallelism
हम RTT timeout को बदल सकते हैं, पर आमतौर पर आवश्यक नहीं होता: –min-rtt-timeout , –max-rtt-timeout , –initial-rtt-timeout
हम प्रयासों की संख्या बदल सकते हैं: –max-retries
हम एक host के स्कैन समय को बदल सकते हैं: –host-timeout
हम हर टेस्ट के बीच समय बढ़ाकर इसे धीमा कर सकते हैं: –scan-delay ; –max-scan-delay
हम packets-per-second बदल सकते हैं: –min-rate
कई पोर्ट्स filtered या closed होने पर जवाब देने में लंबा समय लेते हैं। यदि हम केवल open ones में रुचि रखते हैं, तो तेज़ी से जाने के लिए: –defeat-rst-ratelimit
यह परिभाषित करने के लिए कि हम Nmap को कितना aggressive चाहते हैं: -T paranoid|sneaky|polite|normal|aggressive|insane
-T (0-1)
-T0 –> केवल एक समय में 1 पोर्ट स्कैन करता है और अगले के लिए 5min तक प्रतीक्षा करता है
-T1 और T2 –> बहुत समान पर केवल 15s और 0.4s के बीच प्रतीक्षा करते हैं क्रमशः प्रत्येक टेस्ट के बीच
-T3 –> Default operation, इसमें parallel scanning शामिल है
-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 पैकेट्स को fragment करता है, डिफ़ॉल्ट रूप से header के बाद 8bytes में fragment करता है, उस size को निर्दिष्ट करने के लिए ..mtu का उपयोग करें (इसके साथ -f का उपयोग न करें), offset 8 का गुणक होना चाहिए। Version scanners और scripts fragmentation का समर्थन नहीं करते
-D decoy1,decoy2,ME Nmap scanners भेजता है पर origin के रूप में अन्य IP addresses दिखाता है, इस तरह यह आपको छिपाता है। यदि आप सूची में ME डालते हैं, तो Nmap आपको वहाँ रखेगा, बेहतर है कि आप अपने आगे 5 या 6 डालें ताकि आप पूरी तरह छिप जाएँ। Random IPs RND:
Random IPs का उपयोग करने के लिए: nmap -D RND:10 Target_IP
-S IP जब Nmap आपका IP पता नहीं करता तब आपको इसे देना पड़ता है। यह उन्हें यह सोचने के लिए भी काम आता है कि कोई और लक्ष्य उन्हें स्कैन कर रहा है।
-e
कई व्यवस्थापक entry ports सभी के लिए open छोड़ देते हैं ताकि सब कुछ सही ढंग से काम करे और उन्हें दूसरी समाधान खोजने की तुलना में यह आसान लगे। ये DNS ports या FTP ports हो सकते हैं… इस vulnerability को खोजने के लिए Nmap में शामिल है: –source-port
–data
–data-string
–data-length
IP packet को पूरी तरह configure करने के लिए –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 ARP द्वारा हमारे नेटवर्क में hosts खोजने के लिए
कई व्यवस्थापक एक firewall rule बनाते हैं जो किसी विशेष पोर्ट से आने वाले सभी पैकेट्स को अनुमति देता है (जैसे 20,53 और 67), हम Nmap को यह बता सकते हैं कि हमारे पैकेट्स इन पोर्ट्स से भेजे जाएँ: nmap –source-port 53 IP
आउटपुट
-oN file Normal output
-oX file XML output
-oS file Script kiddies output
-oG file Greppable output। यह अभी भी काम करता है, पर यह deprecated है; automation के लिए XML बेहतर फॉर्मैट है क्योंकि नए Nmap फीचर्स वहाँ पहले जोड़े जाते हैं। यदि आप --resume चाहते हैं तो -oN का उपयोग करते रहें, और machine parsing के लिए -oX/-oA पसंद करें।
-oA file All except -oS
–webxml XML stylesheet reference को https://nmap.org/svn/docs/nmap.xsl पर बदल देता है, जिससे XML को किसी दूसरी मशीन पर HTML के रूप में खोलना आसान हो जाता है।
–stylesheet <path|url> custom XSL stylesheet का उपयोग करें। --webxml केवल hosted official stylesheet का शॉर्टकट है।
-v level verbosity
-d level debugging
–reason host और state का कारण
–stats-every time हर उस समय यह बताता है कि यह कैसे चल रहा है
–packet-trace यह देखने के लिए कि कौन से पैकेट्स बाहर जा रहे हैं, filters specify किए जा सकते हैं जैसे: –version-trace या –script-trace
–open open, open|filtered और unfiltered दिखाता है
–resume file किसी interrupted scan को एक normal (-oN) या grepable (-oG) output फ़ाइल से resume करता है। वर्तमान workflows में आमतौर पर -oN resumability के लिए और -oX parsing के लिए रखा जाता है।
Parsing/HTML रूपांतरण वर्कफ़्लो के लिए उदाहरण:
# 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 verbosity स्तर बढ़ाएँ / घटाएँ
d / D debugging स्तर बढ़ाएँ / घटाएँ
p / P packet tracing चालू / बंद करें
? रनटाइम इंटरैक्शन हेल्प स्क्रीन दिखाएँ
Vulscan
Nmap script जो ऑफ़लाइन डेटाबेस में मिले सर्विस वर्शन को देखता है (अन्य महत्वपूर्ण स्रोतों से डाउनलोड किए गए) और संभावित कमजोरियाँ लौटाता है
यह जिन 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/ में जोड़ना होगा
उपयोग:
To use all: sudo nmap -sV –script=vulscan HOST_TO_SCAN
To use a specific DB: sudo nmap -sV –script=vulscan –script-args vulscandb=cve.csv HOST_TO_SCAN
यदि आपके पास इंटरनेट एक्सेस है, तो संस्करण-आधारित एनरिचमेंट के लिए Nmap का आधिकारिक vulners NSE script आमतौर पर सबसे तेज़ और रख-रखाव किया गया विकल्प होता है:
nmap -sV --script vulners --script-args mincvss=7.0 <IP>
This script belongs to the safe, external, and vuln categories. Because it depends on how accurate -sV was, validate hits manually when the service banner is generic or 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
In hardened or minimal Linux environments (containers, appliances), dynamically linked Nmap binaries often fail due to missing runtime loaders or shared libraries (e.g., /lib64/ld-linux-x86-64.so.2, libc.so). Building your own statically linked Nmap and bundling NSE data allows execution without installing system packages.
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 tweak, यदि मौजूद हो, तो shared libpcap target को निष्क्रिय कर देता है.
चरण 5 — बाइनरी और 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
सत्यापन और ऑप्स नोट्स
- आर्टिफैक्ट पर मौजूद फ़ाइल से सुनिश्चित करें कि यह statically linked है।
- binary के साथ NSE data रखें ताकि script parity सुनिश्चित हो सके उन होस्ट्स पर जहाँ Nmap इंस्टॉल नहीं है।
- static binary होने के बावजूद, execution AppArmor/seccomp/SELinux द्वारा रोका जा सकता है; DNS/egress अभी भी काम करने चाहिए।
- Deterministic builds, opaque “static” binaries डाउनलोड करने की तुलना में supply-chain रिस्क कम करते हैं।
One-liner (Dockerized)
बिल्ड, बंडल, और आर्टिफैक्ट जानकारी प्रिंट करें
```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>
## संदर्भ
- [प्रतिबंधित वातावरण में जॉब्स के लिए static Nmap बाइनरी का संकलन](https://www.pentestpartners.com/security-blog/compiling-static-nmap-binary-for-jobs-in-restricted-environments/)
- [Static Nmap Binary Generator (सहायक टूल)](https://github.com/0x5ubt13/static_nmap_binary_generator)
- [OpenSSL स्रोत](https://www.openssl.org/source/)
- [PCRE2 रिलीज़](https://github.com/PCRE2Project/pcre2/releases)
- [Nmap स्रोत tarballs](https://nmap.org/dist/)
- [Nmap परिवर्तन सूची](https://nmap.org/changelog.html)
- [Nmap आउटपुट फॉर्मैट्स](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;">
> assessment tracks (**ARTA/GRTA/AzRTA**) और [**Linux Hacking Expert (LHE)**](https://hacktricks-training.com/courses/lhe/) के लिए [**full HackTricks Training catalog**](https://hacktricks-training.com/courses/) ब्राउज़ करें।
>
> <details>
>
> <summary>HackTricks का समर्थन करें</summary>
>
> - [**subscription plans**](https://github.com/sponsors/carlospolop) देखें!
> - **जुड़ें** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f), [**telegram group**](https://t.me/peass), **follow करें** [**@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) देखें।
> - **HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके hacking tricks साझा करें।
>
> </details>


