Nmap Özeti (ESP)

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin
nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24

Parametreler

Taranacak IP’ler

  • <ip>,<net/mask>: IP’leri doğrudan belirtir
  • -iL <ips_file>: list_IPs
  • -iR <number>: Rastgele IP sayısı, olası IP’leri --exclude <Ips> veya --excludefile <file> ile hariç tutabilirsiniz.

Cihaz keşfi

Varsayılan olarak Nmap şu keşif aşamasını başlatır: -PA80 -PS443 -PE -PP

  • -sL: İnvaziv değildir, hedefleri listeleyip isimleri çözmek için DNS sorguları yapar. Örneğin www.prueba.es/24 içindeki tüm IP’lerin hedefimiz olup olmadığını anlamak için yararlıdır.
  • -Pn: Ping yok. Hepsinin aktif olduğunu biliyorsanız kullanışlıdır (değilse çok zaman kaybedebilirsiniz; ayrıca yanlış negatif üretebilir), keşif aşamasını engeller.
  • -sn : Port taraması yok. Keşif aşamasını tamamladıktan sonra port taraması yapmaz. Nispeten gizlidir ve küçük ağ taramalarına izin verir. İmtiyazlarla 80’e bir ACK (-PA), 443’e bir SYN (-PS) ve bir echo ile Timestamp isteği gönderir; imtiyaz yoksa her zaman bağlantıyı tamamlar. Hedef ağ ise sadece ARP(-PR) kullanır. Başka bir seçenekle birlikte kullanıldığında, yalnızca diğer seçeneğin paketleri gönderilir.
  • -PR: Ping ARP. Ağımızdaki bilgisayarları analiz ederken varsayılan olarak kullanılır, ping kullanmaktan daha hızlıdır. ARP paketleri kullanmak istemiyorsanız --send-ip kullanın.
  • -PS <ports>: SYN paketleri gönderir; SYN/ACK ile cevap gelirse açık (bağlantıyı sonlandırmamak için RST ile cevap verirler), RST ile cevap gelirse kapalı, cevap gelmezse ulaşılamaz. İmtiyaz yoksa otomatik olarak tam bağlantı kullanılır. Port verilmezse varsayılan 80’e atar.
  • -PA <ports>: Öncekine benzer ancak ACK ile; ikisini kombine etmek daha iyi sonuç verir.
  • -PU <ports>: Amaç tersidir, kapalı olması beklenen portlara gönderilir. Bazı firewall’lar sadece TCP bağlantılarını kontrol eder. Kapalıysa port unreachable ile cevap verir, başka bir ICMP ile ya da cevap yoksa destination unreachable olarak bırakılır.
  • -PE, -PP, -PM : ICMP PING’leri: echo reply, timestamp ve addresmask. Hedefin aktif olup olmadığını bulmak için gönderilir.
  • -PY<ports>: Varsayılan olarak 80’e SCTP INIT probe’ları gönderir; INIT-ACK (open) veya ABORT (closed) ya da hiçbiri veya ICMP unreachable (inactive) dönebilir.
  • -PO <protocols>: Başlıklarda bir protokol belirtilir, varsayılan 1(ICMP), 2(IGMP) ve 4(Encap IP). ICMP, IGMP, TCP (6) ve UDP (17) için protokol başlıkları gönderilir, geri kalanlar için sadece IP başlığı gönderilir. Amaç, başlıkların bozulması nedeniyle Protocol unreachable veya aynı protokolden cevaplar alarak up olup olmadığını anlamaktır.
  • -n: DNS yok
  • -R: DNS her zaman

Port tarama teknikleri

  • -sS: Bağlantıyı tamamlamaz, iz bırakmaz; kullanılabiliyorsa çok iyi.(imtiyaz) Varsayılan olarak kullanılan odur.
  • -sT: Bağlantıyı tamamlar, dolayısıyla iz bırakır, ama kesinlikle kullanılabilir. Varsayılan olarak imtiyaz yoksa.
  • -sU: Daha yavaş, UDP için. Çoğunlukla: DNS(53), SNMP(161,162), DHCP(67 ve 68), (-sU53,161,162,67,68): open(reply), closed(port unreachable), filtered (başka ICMP), open/filtered (hiçbir şey). open/filtered durumunda, -sV nmap’in desteklediği sürümlerden herhangi birini tespit etmek için çok sayıda istek gönderir ve gerçek durumu algılayabilir. Süreyi oldukça uzatır.
  • -sY: SCTP protokolü bağlantıyı kuramayınca log bırakmaz, -PY gibi çalışır
  • -sN,-sX,-sF: Null, Fin, Xmas; bazı firewall’ları geçebilir ve bilgi çıkarabilir. Standarda uygun makineler SYN, RST veya ACK bitleri setli olmayan tüm istekleri RST ile cevaplamalıdır: open/filtered (hiçbir şey), closed (RST), filtered (ICMP unreachable). Windows, Cisco, BSDI ve OS/400 üzerinde güvenilmez. Unix üzerinde evet.
  • -sM: Maimon taraması: FIN ve ACK flag’leri gönderir, BSD için kullanılır, günümüzde hepsini closed olarak döndürecektir.
  • -sA, sW: ACK ve Window; firewall’ları tespit etmek için, portların filtrelenip filtrelenmediğini anlamaya yarar. -sW open/closed arasında ayrım yapar çünkü açık olanlar farklı window değeriyle cevap verir: open (RST window ≠ 0), closed (RST window = 0), filtered (ICMP unreachable veya hiçbiri). Tüm bilgisayarlar bu şekilde çalışmayabilir; hepsi closed görünüyorsa çalışmıyor demektir; birkaç açık varsa düzgün çalışıyordur; çok açık ve az closed varsa ters çalışıyor demektir.
  • -sI: Idle scan. Aktif bir firewall varsa ama belirli bir IP’ye filtre uygulamadığını bildiğimiz (veya anonimlik istediğimiz) durumlarda zombie tarayıcıyı kullanabiliriz (tüm portlar için çalışır). Olası zombie’leri bulmak için ipidseq script’i veya exploit auxiliary/scanner/ip/ipidseq kullanılabilir. Bu tarayıcı IP paketlerinin IPID numarasına dayanır.
  • --badsum: Checksum’ı yanlış gönderir; makineler paketleri atar ama firewall’lar bir şey cevaplayabilir; firewall tespiti için kullanılır.
  • -sZ: “Weird” SCTP tarayıcı; cookie echo fragment’ları göndrildiğinde açıksa atılmalı, kapalıysa ABORT ile cevaplanmalıdır. INIT’in geçemediği firewall’lardan geçebilir; kötü yanı open ile filtered’ı ayırt edememesidir.
  • -sO: IP protokol taraması. Bazen protokolün bile ayırt edilemediği hatalı ve boş başlıklar gönderir. ICMP protocol unreachable gelirse kapalı, unreachable port gelirse açık, başka hata gelirse filtered, hiç gelmezse open|filtered.
  • -b <server>: FTPhost –> Bir hostu başka birinden taramak için kullanılır; başka bir makinenin ftp’sine bağlanıp taramak istediğiniz portlara dosya göndermesini isteyerek, gelen yanıtlara göre açık olup olmadığını anlarsınız. [<user>:<password>@]<server>[:<port>] Neredeyse tüm ftp sunucuları artık bunu izin vermiyor, bu yüzden pratikte sınırlı faydası var.

Odak Analizi

-p: Taranacak portları belirtmek için kullanılır. Tüm 65.535 portu seçmek için: -p- veya -p all. Nmap’in popülerliğe dayalı dahili bir sınıflandırması vardır. Varsayılan olarak en üst 1000 portu kullanır. -F (hızlı tarama) ile en üst 100’ü analiz eder. –top-ports ile belirtilen sayıda en popüler portu (1 ile 65.535 arasında) analiz eder. Portları rastgele sırada kontrol eder; bunu önlemek için -r kullanın. Ayrıca belirli portları seçebilirsiniz: 20-30,80,443,1024- (sonuncusu 1024’ten itibaren aramak anlamına gelir). Protokollere göre portları gruplayabilirsiniz: U:53,T:21-25,80,139,S:9. Nmap’in popüler portları içinde bir aralık da seçebilirsiniz: -p [-1024] nmap-services içinde yer alanlara kadar 1024’e kadar analiz eder. –port-ratio 0 ile 1 arasında bir oran vererek en yaygın portları analiz eder.

-sV Versiyon taraması, yoğunluğu 0 ile 9 arasında ayarlanabilir, varsayılan 7’dir.

–version-intensity Yoğunluğu ayarlar; düşükse sadece en olası probe’ları atar, hepsini değil. Bu sayede UDP tarama süresini önemli ölçüde kısaltabiliriz.

-O OS tespiti

–osscan-limit Uygun host taraması için en az bir açık ve bir kapalı porta ihtiyaç vardır. Bu koşul sağlanmazsa ve bu seçenek ayarlıysa OS tahmini denemeyecektir (zaman kazandırır).

–osscan-guess OS tespiti mükemmel olmadığında daha çok zorlamasını sağlar.

Scriptler

–script |||[,…]

Varsayılan scriptleri kullanmak için -sC veya –script=default kullanın

Available types are: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, and vuln

  • Auth: mevcut tüm authentication script’lerini çalıştırır
  • Default: temel varsayılan araç script’lerini çalıştırır
  • Discovery: hedeften veya kurbandan bilgi alır
  • External: dış kaynakları kullanan script
  • Intrusive: hedefe kurban açısından müdahaleci kabul edilen script’ler kullanır
  • Malware: kötü amaçlı kod veya backdoor’lar tarafından açılmış bağlantıları kontrol eder
  • Safe: müdahaleci olmayan script’leri çalıştırır
  • Vuln: en bilinen zafiyetleri keşfeder
  • All: mevcut tüm NSE extension script’lerini çalıştırır

Script aramak için:

nmap –script-help=“http-*” -> http- ile başlayanlar

nmap –script-help=“not intrusive” -> Hepsi, intrusive olmayanlar hariç

nmap –script-help=“default or safe” -> Her iki kategoride olanlar veya her iki kategoriden biri

nmap –script-help=“default and safe” –> Her iki kategoride de olanlar

nmap –script-help=“(default or safe or intrusive) and not http-*”

–script-args =,={=},={,}

–script-args-file

–script-help ||||all[,…]

–script-trace —> Script’in nasıl ilerlediğine dair bilgi verir

–script-updatedb

Bir script kullanmak için, sadece yazın: nmap –script Script_Name target –> Script kullanılırken hem script hem scanner çalıştırılır, bu yüzden scanner seçenekleri de eklenebilir. Yalnızca güvenli olanları çalıştırmak için “safe=1” ekleyebilirsiniz.

Zaman Kontrolü

Nmap zamanı saniye, dakika, ms cinsinden değiştirebilir: –host-timeout argümanları 900000ms, 900, 900s ve 15m aynı anlama gelir.

Nmap taranacak toplam host sayısını gruplara böler ve bu grupları bloklar halinde analiz eder; bir bloğun tümü analiz edilmeden diğer bloğa geçmez (ve kullanıcı, blok analiz edilene kadar güncelleme almaz). Bu nedenle Nmap için büyük gruplar kullanmak daha optimaldir. Varsayılan olarak class C’de 256 kullanır.

Bunu –min-hostgroup ; –max-hostgroup ile değiştirebilirsiniz (paralel tarama grup boyutlarını ayarlayın)

Paralel scanner sayısını kontrol edebilirsiniz ama genelde yapmamak daha iyidir (Nmap ağ durumuna göre otomatik kontrol içerir): –min-parallelism ; –max-parallelism

RTT timeout’u değiştirebiliriz, genelde gerekmez: –min-rtt-timeout , –max-rtt-timeout , –initial-rtt-timeout

Deneme sayısını değiştirebiliriz: –max-retries

Bir host’un tarama süresini değiştirebiliriz: –host-timeout

Her test arasındaki süreyi artırarak yavaşlatabiliriz: –scan-delay ; –max-scan-delay

Saniye başına gönderilen paket sayısını değiştirebiliriz: –min-rate ; –max-rate

Filtrelenmiş veya kapalı olduğunda birçok port uzun süre cevap verir. Sadece açık olanlarla ilgileniyorsak daha hızlı olmak için: –defeat-rst-ratelimit

Nmap’in ne kadar agresif olmasını istediğimizi tanımlamak için: -T paranoid|sneaky|polite|normal|aggressive|insane

-T (0-1)

-T0 –> Her seferinde sadece 1 port tarar ve bir sonraki için 5dk bekler

-T1 ve T2 –> Çok benzer, ancak her test arasında sırasıyla 15s ve 0.4s bekler

-T3 –> Varsayılan çalışma, paralel taramayı içerir

-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

Port erişimine izin vermezler ve paketleri analiz ederler.

-f Paketleri parçalar, varsayılan olarak header’dan sonra 8byte’lık parçalar oluşturur; bu boyutu belirtmek için ..mtu kullanın (bu durumda -f kullanmayın), offset 8’in katı olmalıdır. Version scanner’lar ve script’ler fragmentation’ı desteklemez

-D decoy1,decoy2,ME Nmap taramaları başka IP’ler kaynaklıymış gibi gönderir, böylece sizi gizler. Eğer listede ME yazarsanız Nmap sizi o noktaya yerleştirir; tamamen maskelenmek için önünüze 5 veya 6 tane koymak iyidir. Rastgele IP’ler RND: ile üretilebilir. TCP version detector’larla bağlantı olmadan çalışmazlar. Bir ağ içindeyseniz, aksi halde tek aktif sizmişsiniz gibi kolayca fark edileceği için aktif IP’leri kullanmak istersiniz.

Rastgele IP’ler kullanmak için: nmap -D RND:10 Target_IP

-S IP Nmap IP’nizi yakalayamazsa vermeniz gerekir. Ayrıca başka bir hedefmiş gibi göstermek için de kullanılır.

-e Arayüz seçmek için

Birçok yönetici, her şeyin düzgün çalışması için giriş portlarını herkese açık bırakır ve bu onlar için başka çözüm bulmaktan daha kolaydır. Bunlar DNS veya FTP portları olabilir… Bu açıklığı bulmak için Nmap şunları içerir: –source-port ; -g Eşdeğerdirler

–data Onaltılık metin göndermek için: –data 0xdeadbeef ve –data \xCA\xFE\x09

–data-string Normal metin göndermek için: –data-string “Scan conducted by Security Ops, extension 7192”

–data-length Nmap sadece header’ları gönderiyorsa, buna ek olarak belirli sayıdaki byte’ı (rastgele oluşturulacak) eklemeyi sağlar

IP paketini tamamen yapılandırmak için –ip-options kullanın

Gönderilen ve alınan paketlerdeki seçenekleri görmek isterseniz, –packet-trace belirtin. IP options ile Nmap kullanımıyla ilgili daha fazla bilgi ve örnek için bkz. http://seclists.org/nmap-dev/2006/q3/52.

–ttl

–randomize-hosts Saldırıyı daha az belirgin hale getirmek için

–spoof-mac <MAC address, prefix, or vendor name> MAC değiştirmek için örnekler: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, ve Cisco

–proxies Proxy kullanmak için; bazen bir proxy Nmap’in istediği kadar açık bağlantıyı korumaz, bu yüzden paralellik değiştirilmelidir: –max-parallelism

-sP Ağımızdaki hostları ARP ile keşfetmek için

Birçok yönetici belirli bir porttan gelen tüm paketlere izin veren bir firewall kuralı oluşturur (ör. 20,53 ve 67). Nmap’e paketlerimizi bu portlardan göndermesini söyleyebiliriz: nmap –source-port 53 IP

Çıktılar

-oN file Normal çıktı

-oX file XML çıktısı

-oS file Script kiddies çıktısı

-oG file Greppable çıktı

-oA file -oS hariç hepsi

-v level ayrıntı düzeyi (verbosity)

-d level hata ayıklama (debugging)

–reason Host ve durumun nedeni

–stats-every time Belirtilen sürede bir nasıl gittiğini bildirir

–packet-trace Hangi paketlerin çıktığını görmek için, filtreler belirtilebilir: –version-trace veya –script-trace

–open açık, open|filtered ve unfiltered gösterir

–resume file Özet çıktısı

Diğer

-6 IPv6’ya izin verir

-A -O -sV -sC –traceroute ile aynı

Çalışma zamanı

Nmap çalışırken seçenekleri değiştirebiliriz:

v / V Ayrıntı seviyesini artır / azalt

d / D Debug seviyesini artır / azalt

p / P Packet tracing aç / kapa

? Çalışma zamanı etkileşimli yardım ekranını yazdır

Vulscan

Versiyonlardan elde edilen servis bilgilerini offline bir veritabanında (başka önemli kaynaklardan indirilmiş) arayan Nmap script’idir ve olası zafiyetleri döndürür

Kullandığı DB’ler:

  1. Scipvuldb.csv | http://www.scip.ch/en/?vuldb
  2. Cve.csv | http://cve.mitre.org
  3. Osvdb.csv | http://www.osvdb.org
  4. Securityfocus.csv | http://www.securityfocus.com/bid/
  5. Securitytracker.csv | http://www.securitytracker.com
  6. Xforce.csv | http://xforce.iss.net
  7. Exploitdb.csv | http://www.exploit-db.com
  8. Openvas.csv | http://www.openvas.org

İndirmek ve Nmap klasörüne kurmak için:

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/

Ayrıca DB paketlerini indirip /usr/share/nmap/scripts/vulscan/ içine eklemeniz gerekir.

Kullanım:

Tümünü kullanmak için: sudo nmap -sV –script=vulscan HOST_TO_SCAN

Belirli bir DB kullanmak için: sudo nmap -sV –script=vulscan –script-args vulscandb=cve.csv HOST_TO_SCAN

Nmap Service taramasını x16 hızlandırma

bu gönderiye göre nmap servis analizini hızlandırmak için /usr/share/nmap/nmap-service-probes içindeki tüm totalwaitms değerlerini 300 ve tcpwrappedms değerini 200 yapabilirsiniz.

Ayrıca, özel bir servicewaitms tanımlanmamış probe’lar için varsayılan değer 5000’dür. Bu nedenle ya her probe’a değer ekleyebiliriz, ya da nmap’i derleyip varsayılan değeri service_scan.h içinde değiştirebiliriz.

Eğer /usr/share/nmap/nmap-service-probes dosyasındaki totalwaitms ve tcpwrappedms değerlerini hiç değiştirmek istemezseniz, bu değerlerin dosyada tamamen göz ardı edilmesini sağlamak için parsing kodunu düzenleyebilirsiniz.

Kısıtlı ortamlarda statik Nmap derlemek

Hardened veya minimal Linux ortamlarında (container’lar, appliance’lar), dinamik bağlı Nmap ikili dosyaları genellikle eksik runtime loader veya paylaşılan kütüphanelar (ör. /lib64/ld-linux-x86-64.so.2, libc.so) nedeniyle çalışmaz. Kendi statik bağlı Nmap’inizi derleyip NSE verilerini paketlerseniz, sistem paketleri kurmadan çalıştırabilirsiniz.

Yüksek seviyeli yaklaşım

  • Temiz bir amd64 Ubuntu builder kullanın (Docker üzerinden).
  • OpenSSL ve PCRE2’yi static kütüphane olarak derleyin.
  • Nmap’i statik linkleyerek ve dinamik bağımlılıkları önlemek için dahil edilmiş libpcap/libdnet’i kullanarak derleyin.
  • Binary ile birlikte NSE script’leri ve veri dizinlerini paketleyin.

Hedef mimariyi keşfetme (örnek)

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'

Adım 1 — Araç zincirini hazırla

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

Adım 2 — Statik OpenSSL’i derleyin (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

Adım 3 — Statik PCRE2 (10.43) derleme

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

Adım 4 — Statik Nmap’i derleyin (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

Key points

  • -static, -static-libstdc++, -static-libgcc statik bağlamayı zorlar.
  • –with-libpcap=included/–with-libdnet=included kullanımı sistem paylaşılan kütüphanelerden kaçınır.
  • sed tweak, mevcutsa paylaşılan libpcap hedefini devre dışı bırakır.

Step 5 — İkili ve NSE verilerini paketleme

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

Doğrulama ve operasyon notları

  • artifact üzerinde file kullanarak statically linked olduğunu doğrulayın.
  • Nmap yüklü olmayan hostlarda script uyumluluğunu sağlamak için NSE verilerini binary ile birlikte tutun.
  • Even with a static binary, yürütme AppArmor/seccomp/SELinux tarafından engellenebilir; DNS/egress hâlâ çalışıyor olmalıdır.
  • Deterministik derlemeler, opak “static” binary’lerin indirilmesine kıyasla tedarik zinciri riskini azaltır.

One-liner (Dockerized)

Derle, paketle ve artifact bilgilerini yazdır ```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-dev

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

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>

## Referanslar

- [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/)


> [!TIP]
> AWS Hacking'i öğrenin ve pratik yapın:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> GCP Hacking'i öğrenin ve pratik yapın: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Azure Hacking'i öğrenin ve pratik yapın: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>HackTricks'i Destekleyin</summary>
>
> - [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
> - **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** bizi **takip edin** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
>
> </details>