Nmap Özeti (ESP)
Tip
AWS Hacking öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
Değerlendirme yolları (ARTA/GRTA/AzRTA) ve Linux Hacking Expert (LHE) için tam HackTricks Training kataloğuna göz atın.
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna, telegram grubuna katılın, X/Twitter üzerinde @hacktricks_live hesabını takip edin veya LinkedIn sayfasını ve YouTube kanalını kontrol edin.
- HackTricks ve HackTricks Cloud github depolarına PR göndererek hacking tricks paylaşın.
nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24
Parameters
IPs to scan
<ip>,<net/mask>: IP’leri doğrudan belirtir-iL <ips_file>: list_IPs-iR <number>: Rastgele IP sayısı, muhtemel IP’leri--exclude <Ips>veya--excludefile <file>ile hariç tutabilirsiniz.
Equipment discovery
Varsayılan olarak Nmap şu keşif aşamasını başlatır: -PA80 -PS443 -PE -PP
-sL: Müdahaleci değildir, hedefleri listeleyip isimleri çözümlemek için DNS istekleri yapar. Örneğin www.prueba.es/24 için tüm IP’lerin hedefimiz olup olmadığını bilmek için faydalıdır.-Pn: Ping yok. Hepsinin aktif olduğunu bildiğiniz durumlarda kullanışlıdır (aksi halde çok zaman kaybedebilirsiniz, fakat bu seçenek aynı zamanda yanlış negatifler üreterek cihazların aktif olmadığını söyleyebilir), keşif aşamasını engeller.-sn: Port taraması yok. Keşif aşamasını tamamladıktan sonra portları taramaz. Görece gizlidir ve küçük ağ taramaları için uygundur. Yetki ile 80 için ACK (-PA), 443 için SYN(-PS) ve echo ile Timestamp isteği gönderir; yetkisizken her zaman bağlantıları tamamlama eğilimindedir. Hedef ağ ise sadece ARP(-PR) kullanır. Başka bir seçenekle birlikte kullanılırsa sadece diğer seçeneğin paketleri atılır.-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 istemezseniz--send-ipkullanın.-PS <ports>: SYN paketleri gönderir; SYN/ACK ile cevaplanırsa açık (bağlantıyı bitirmemek için RST ile cevaplanır), RST ile cevaplanırsa kapalı, cevap yoksa ulaşılmaz demektir. Yetki yoksa tam bağlantı otomatik kullanılır. Port verilmezse varsayılan 80 kullanılır.-PA <ports>: Öncekine benzer ama ACK ile; ikisinin kombini 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 veya cevap yoksa destination unreachable olarak bırakılır.-PE, -PP, -PM: ICMP PING’leri: echo replay, timestamp ve addresmask. Hedefin aktif olup olmadığını anlamak için gönderilir.-PY<ports>: Varsayılan 80’e SCTP INIT probe’ları gönderir; INIT-ACK(open) veya ABORT(closed) veya hiçbir şey ya da ICMP unreachable(inactive) ile cevaplanabilir.-PO <protocols>: Başlıklarda bir protokol belirtilir, varsayılan 1(ICMP), 2(IGMP) ve 4(Encap IP)’dir. 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 biçimsiz olması sebebiyle Protocol unreachable veya aynı protokolden gelen cevaplarla up bilgisini almaktır.-n: DNS yok-R: DNS her zaman--system-dns: Nmap’in paralel stub resolver’ı yerine OS çözücüsünü zorlar./etc/hosts, split-DNS veya resolver eklentileri Nmap’in doğrudan sorgularının dönmediği verileri döndürdüğünde yararlıdır. Daha yavaştır ve Nmap 7.96’dan itibaren ileri arama paralelleştirildiği için genelde sadece çözücü uyumluluğu gerektiğinde kullanılır.--dns-servers <server[,server],...>: Reverse lookup’lar için belirli DNS sunucularını zorlar. İç değerlendirmelerde yetkili veya dahili çözücüleri doğrudan sorgulamak veya-sL/reverse-DNS trafiğini test edenin varsayılan çözücülerinden uzaklaştırmak için faydalıdır.
Port scanning techniques
-sS: Bağlantıyı tamamlamaz, iz bırakmaz, kullanılabilirse çok iyidir. (yetki gerektirir) Varsayılan olarak kullanılır.-sT: Bağlantıyı tamamlar, dolayısıyla iz bırakır, ama kesin kullanılabilir. Varsayılan olarak yetkisiz kullanır.-sU: Daha yavaş, UDP için. Genelde: DNS(53), SNMP(161,162), DHCP(67 ve 68), (-sU53,161,162,67,68): open(reply), closed(port unreachable), filtered (başka bir ICMP), open/filtered (hiçbir şey). open/filtered durumunda -sV nmap’in desteklediği sürümlerden herhangi birini tespit etmek için birçok istek gönderir ve gerçek durumu tespit edebilir. Süreyi çok artırır.-sY: SCTP protokolü bağlantı kuramadan başarısız olur, bu yüzden log kaydı olmaz, -PY gibi çalışır-sN,-sX,-sF: Null, Fin, Xmas; bazı firewall’ları aşabilir ve bilgi sızdırabilir. Standart uyumlu makineler SYN, RST veya ACK bayrakları olmayan taleplere RST ile cevap vermelidir: open/filtered (hiçbir şey), closed (RST), filtered (ICMP unreachable). Windows, Cisco, BSDI ve OS/400 üzerinde güvenilir değil. Unix üzerinde evet.-sM: Maimon taraması: FIN ve ACK bayrakları gönderir, BSD için kullanılır, şu anda hepsini closed olarak döndürecektir.-sA, sW: ACK ve Window, firewall’ları tespit etmek için kullanılır; portların filtrelenip filtrelenmediğini anlamaya yarar. -sW açık/kapalıyı window değeri ile ayırt eder: open (RST, window 0’dan farklı), closed (RST window = 0), filtered (ICMP unreachable veya cevap yok). Tüm bilgisayarlar bu şekilde çalışmayabilir; eğer hepsi kapalıysa çalışmıyor demektir, birkaç açık varsa doğru çalışıyor demektir, çok açık ve az kapalı ise tersini yapıyor demektir.-sI: Idle scan. Aktif bir firewall olduğunda ama belirli bir IP’ye filtreleme yapmadığını bildiğimiz durumlarda (veya sadece anonimlik istiyorsak) zombie scanner kullanabiliriz (tüm portlar için çalışır). Olası zombileri 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, ancak firewall’lar bir şey cevaplayabilir; firewall tespiti için kullanılır.-sZ: “Weird” SCTP tarayıcı; cookie echo fragment’leri ile probe gönderildiğinde açıksa düşürülmeli veya kapalıysa ABORT ile cevaplanmalıdır. INIT’in geçemediği firewall’lardan geçebilir, kötü tarafı filtered ile open’ı ayırt edememesi.-sO: IP protokol taraması. Bazen protokolün bile ayırt edilemediği hatalı ve boş başlıklar gönderir. ICMP unreachable protocol gelirse kapalı, unreachable port gelirse açık, başka hata gelirse filtered, hiçbir şey gelmezse open|filtered olur.-b <server>: FTPhost –> Bir hostu başka bir host üzerinden taramak için kullanılır; başka bir makinenin ftp’sine bağlanıp istediğiniz portlara dosya göndermesini isteyerek oradan tarama yapılır; cevaplara göre açık olup olmadığını anlarız. [<user>:<password>@]<server>[:<port>] Çoğu ftp sunucusu artık bunu yapmaya izin vermediği için pratikte çok az kullanışlıdır.
Focus Analysis
-p: Taranacak portları belirtmek için kullanılır. Tüm 65,535 portu seçmek için: -p- veya -p all. Nmap’in dahili bir popülerlik sınıflandırması vardır. Varsayılan olarak en popüler 1000 portu kullanır. -F (hızlı tarama) ile en popüler 100’ü tarar. –top-ports
-sV Versiyon taraması, yoğunluk 0 ile 9 arasında ayarlanabilir, varsayılan 7’dir.
–version-intensity
–version-light --version-intensity 2 alias’ıdır. Geniş aralıklar veya yavaş UDP servisleri için ilk geçişte çok faydalıdır.
–version-all --version-intensity 9 alias’ıdır. Tüm probe’ları zorlar; bir servis yalnızca nadir probe’lara cevap veriyorsa yararlıdır.
–allports nmap-service-probes tarafından hariç tutulan portlarda da versiyon tespiti yapmayı zorlar (özellikle TCP/9100). Dikkat: bazı yazıcılar veya raw socket listener’lar probe verilerini yazdırabilir.
-O OS detection
–osscan-limit Uygun host taraması için en az bir açık ve bir kapalı port gerekir. Bu koşul sağlanmazsa ve bunu ayarladıysak OS tahmini denemeyecektir (zaman kazandırır).
–osscan-guess OS detection mükemmel olmadığında daha fazla denemesini sağlar.
Scripts
–script
Varsayılan scriptleri kullanmak için -sC veya –script=default kullanın
Mevcut tipler: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, ve 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 kurban sistemden bilgi alır
- External: harici kaynak kullanımına yönelik script
- Intrusive: hedefe müdahaleci sayılan script’leri kullanır
- Malware: kötü amaçlı yazılım 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 açıkları 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 hariç
nmap –script-help=“default or safe” -> Her iki kategoride olanlar veya birinde olanlar
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
–script-trace —> Script’in nasıl ilerlediği hakkında bilgi verir
–script-updatedb
Bir script kullanmak için sadece yazın: nmap –script Script_Name target –> Script kullanıldığında hem script hem scanner çalışır, bu yüzden scanner seçenekleri de eklenebilir. Sadece güvenli olanları çalıştırmak için “safe=1” ekleyebiliriz.
Time Control
Nmap süreleri saniye, dakika, ms olarak değiştirebilir: –host-timeout argümanları 900000ms, 900, 900s ve 15m aynı şeyi yapar.
Nmap taranacak toplam host sayısını gruplara böler ve bu grupları bloklar halinde analiz eder; bu nedenle bir bloğu analiz edene kadar sonraki bloğa geçmez (ve kullanıcı bloğun analiz edilene kadar güncelleme almaz). Bu şekilde Nmap için büyük gruplar kullanmak daha optimaldir. Varsayılan olarak class C’de 256 kullanır.
Bunu –min-hostgroup
Paralel scanner sayısını kontrol edebilirsiniz ancak genelde kontrol etmemeniz daha iyidir (Nmap ağ durumuna göre otomatik kontrol içerir): –min-parallelism
RTT timeout’u değiştirebiliriz, ama genelde gerekli değildir: –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 paket sayısını değiştirebiliriz: –min-rate
Filtrelenmiş veya kapalı birçok port cevap vermesi uzun sürer. Sadece açık portlarla ilgileniyorsak daha hızlı gitmek için: –defeat-rst-ratelimit
Nmap’in ne kadar agresif olacağını tanımlamak için: -T paranoid|sneaky|polite|normal|aggressive|insane
-T (0-1)
-T0 –> Aynı anda 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
Portlara erişime izin vermezler ve paketleri analiz ederler.
-f Paketleri parçalar, varsayılan olarak header’dan sonra 8byte’lık parçalar halinde böler; boyutu belirtmek için ..mtu kullanın (bununla -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’lerin kaynak adresi olarak gönderir, böylece sizi gizler. Eğer listede ME koyarsanız Nmap sizi oraya yerleştirir; tamamen maskelenmek için sizin önünüzde 5 veya 6 tane koymak daha iyidir. Rastgele IP’ler RND:
Rastgele IP kullanmak için: nmap -D RND:10 Target_IP
-S IP Nmap IP’nizi yakalayamazsa bunu vermeniz gerekir. Ayrıca başka bir hedefin sizi tarıyormuş gibi göstermeye yarar.
-e
Birçok yönetici her şeyin düzgün çalışması için giriş portlarını açık bırakır ve başka çözüm bulmaktan daha kolaydır. Bunlar DNS veya FTP portları olabilir… Bu zafiyeti bulmak için Nmap: –source-port
–data
–data-string
–data-length
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 kullanımı ile 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 yapmak 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
-sP Ağımızdaki host’ları 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 gibi); Nmap’e paketlerimizi bu portlardan göndermesini söyleyebiliriz: nmap –source-port 53 IP
Outputs
-oN file Normal çıktı
-oX file XML çıktısı
-oS file Script kiddies çıktısı
-oG file Greppable çıktı. Hala çalışır, ama kullanımdan kalkmaktadır; XML otomasyon için daha iyi formattır çünkü yeni Nmap özellikleri önce oraya eklenir. --resume istiyorsanız -oN kullanmaya devam edin, makine ile parse için -oX/-oA tercih edin.
-oA file -oS hariç hepsi
–webxml XML stylesheet referansını https://nmap.org/svn/docs/nmap.xsl olarak değiştirir, böylece XML başka bir makinede HTML olarak açılması kolaylaşır.
–stylesheet <path|url> Özel XSL stylesheet kullanın. --webxml resmi barındırılan stylesheet’e kısa yoldur.
-v level ayrıntı seviyesi
-d level debug
–reason Host ve durumun nedeni
–stats-every time Bu süreyle ne durumda olduğunu bildirir
–packet-trace Hangi paketlerin çıktığını görmek için, filtreler belirtilebilir örn: –version-trace veya –script-trace
–open yalnızca open, open|filtered ve unfiltered gösterir
–resume file Kesintiye uğramış bir taramayı normal (-oN) veya grepable (-oG) çıktı dosyasından devam ettirir. Güncel iş akışlarında -oN sürdürme için ve -oX parse için tutulması yaygındır.
Parsing/HTML dönüştürme iş akışları için örnek:
# 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
Çeşitli
-6 IPv6’ya izin verir
-A -O -sV -sC –traceroute ile aynıdır
Çalışma zamanı
Nmap çalışırken seçenekleri değiştirebiliriz:
v / V Ayrıntı düzeyini artırır / azaltır
d / D Hata ayıklama düzeyini artırır / azaltır
p / P Paket izlemeyi açar / kapatır
? Çalışma zamanı etkileşimli yardım ekranını görüntüler
Vulscan
Hizmet sürümlerini çevrimdışı bir veritabanından (başka önemli kaynaklardan indirilen) kontrol eden ve olası zafiyetleri döndüren bir Nmap script’i
Kullandığı veritabanları:
- 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 klasörüne indirmek ve 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 veritabanı paketlerini indirip /usr/share/nmap/scripts/vulscan/ dizinine eklemeniz gerekir.
Kullanım:
Tümünü kullanmak için: sudo nmap -sV –script=vulscan HOST_TO_SCAN
Belirli bir DB’yi kullanmak için: sudo nmap -sV –script=vulscan –script-args vulscandb=cve.csv HOST_TO_SCAN
İnternet erişiminiz varsa, sürüm tabanlı zenginleştirme için Nmap’in resmi vulners NSE script’i genellikle en hızlı ve bakımı yapılan alternatiftir:
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.
Son Pratik Notlar (7.94+)
- Nmap 7.94’ten itibaren, UDP port taraması (
-sU) ve version detection (-sV) aynınmap-service-probespayload kaynağını kullanır. Tarama aşamasından gelen bir UDP yanıtı hemen sürüm eşleştirmeye beslenebildiği için-sU -sV --version-lightartık geniş veya paket kaybı olan aralıklara karşı iyi bir ilk geçiştir. - Nmap 7.94’ten itibaren,
-sVayrıca DTLS arkasına gizlenmiş UDP servislerini sorgulayabilir; bu, UDP protokollerini DTLS içinde saran modern yönetim/ICS cihazları için kullanışlıdır. - Nmap 7.95,
grpc,mysqlx,remotemousevetuyadahil olmak üzere büyük bir yeni service fingerprint kümesi ekledi; ayrıcahartip-infoveiec61850-mmsgibi ICS odaklı yeni NSE kapsaması da eklendi. OT veya gömülü ortamları tarıyorsanız, erken aşamada özel probe eklemektense Nmap’i güncellemek daha önemlidir. - Nmap 7.96’dan itibaren, forward DNS lookups da paralelleştirildi. Büyük hostname listeleri artık çok daha hızlı olduğundan,
--system-dnsgenellikle performans için değil uyumluluk sorunları için ayrılmalıdır.
Nmap Service taramasını x16 hızlandırma
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.
Kısıtlı ortamlar için statik Nmap derleme
Sertleştirilmiş veya minimal Linux ortamlarda (containers, appliances), dynamically linked Nmap ikili dosyaları sıklıkla runtime loader veya paylaşılan kütüphanelerin eksikliği nedeniyle başarısız olur (ör. /lib64/ld-linux-x86-64.so.2, libc.so). Kendi statically linked Nmap’inizi derlemek ve NSE verilerini ikiliyle birlikte paketlemek, sistem paketleri kurmadan çalıştırmayı sağlar.
Yüksek seviye yaklaşım
- Docker üzerinden temiz bir amd64 Ubuntu builder kullanın.
- OpenSSL ve PCRE2’yi statik kütüphaneler olarak derleyin.
- Nmap’i statik linkleyerek derleyin ve dinamik bağımlılıklardan kaçınmak için dahil edilen libpcap/libdnet’i kullanın.
- NSE scripts ve data dizinlerini ikiliyle birlikte 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ırlayın
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 (1.1.1w) derleme
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 (7.98) derleme
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
Önemli noktalar
- -static, -static-libstdc++, -static-libgcc statik bağlamayı zorlar.
- –with-libpcap=included/–with-libdnet=included kullanmak sistem paylaşılan kütüphanelerinden kaçınır.
- sed tweak, varsa paylaşılan bir libpcap hedefini devre dışı bırakır.
Adım 5 — binary ve NSE verilerini paketle
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 statik olarak bağlandığını doğrulayın.
- NSE verisini binary ile birlikte muhafaza edin; Nmap yüklü olmayan hostlarda script uyumluluğunu sağlamak için.
- Statik bir binary olsa bile yürütme AppArmor/seccomp/SELinux tarafından engellenebilir; DNS/egress hâlâ çalışmalı.
- Deterministic builds, opak “static” binary’leri indirmeye kıyasla tedarik zinciri riskini azaltır.
One-liner (Dockerized)
Artifact'i derle, paketle ve bilgi 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-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>
## References
- [Sınırlı ortamlarda görevler için statik Nmap ikili dosyası derleme](https://www.pentestpartners.com/security-blog/compiling-static-nmap-binary-for-jobs-in-restricted-environments/)
- [Static Nmap Binary Generator (yardımcı araç)](https://github.com/0x5ubt13/static_nmap_binary_generator)
- [OpenSSL kaynakları](https://www.openssl.org/source/)
- [PCRE2 sürümleri](https://github.com/PCRE2Project/pcre2/releases)
- [Nmap kaynak tarball'ları](https://nmap.org/dist/)
- [Nmap Değişiklik Günlüğü](https://nmap.org/changelog.html)
- [Nmap Çıktı Formatları](https://nmap.org/book/man-output.html)
> [!TIP]
> AWS Hacking öğ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://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> GCP Hacking öğ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://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Az Hacking öğ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://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Değerlendirme yolları (**ARTA/GRTA/AzRTA**) ve [**Linux Hacking Expert (LHE)**](https://hacktricks-training.com/courses/lhe/) için [**tam HackTricks Training kataloğuna**](https://hacktricks-training.com/courses/) göz atın.
>
> <details>
>
> <summary>HackTricks'i Destekleyin</summary>
>
> - [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
> - 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f), [**telegram grubuna**](https://t.me/peass) **katılın**, **X/Twitter üzerinde** [**@hacktricks_live**](https://twitter.com/hacktricks_live) hesabını **takip edin** veya [**LinkedIn sayfasını**](https://www.linkedin.com/company/hacktricks/) ve [**YouTube kanalını**](https://www.youtube.com/@hacktricks_LIVE) kontrol edin.
> - [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek hacking tricks paylaşın.
>
> </details>


