Nmap Nedir? Nasıl Kullanılır? | Nmap Cheat Sheet
Merhaba. Siber Güvenliğin neredeyse her alanında farklı amaçlarla kullanılan nmap (network mapper) aracını inceleyeceğim. Bu yazımda nmap nedir? nasıl çalışır? sorularını da yanıtlayarak nmap (network mapper) toolunu ele alacağım. Kali Linux üzerinde yüklü olarak gelen bu araç ile ağ taraması ve keşif yapabiliriz. Nmap genel olarak port scan olarak kullanım görmektedir. Aşağıda başlıklar halinde nmap komutlarını tek tek ele alarak kısaca nmap cheat sheet tadında bir yazı olacak.
1 – Nmap Nedir? Ne İşe Yarar?
Nmap, ağ taraması ve keşif yapan Kali Linux üzerinde yüklü olarak gelen güçlü bir yazılımdır. Nmap ile yapılabilecekleri sayacak olursak; açık portlar, açık portlarda çalışan servisler, işletim sistemleri, sistemlerde çalışan cihazları keşfetmek ve bu cihazlar/servisler üzerinde yer alan güvenlik açıklarını keşfetmek için nmap kullanılmaktadır. Nmap ile çeşitli komutlar kullanarak oldukça işe yarar çıktılar elde edebiliriz. Nmap, keşif aşamasında hedefe paketler yollayarak portların açık, kapalı veya filtreli olduğunu göstermektedir.
Aşağıda verdiğim linklerden inceleyip, indirebilirsiniz:
https://nmap.org/
https://github.com/nmap/nmap
2 – Nmap Nasıl Kullanılır?
Nmap, Kali Linux üzerinde kurulu olarak gelmektedir fakat başka bir sisteme yükleyip kullanmak isterseniz vermiş olduğum linklere göz atabilirsiniz. Nmap yardım sayfasına göz atmak için terminal üzerinde nmap -h veya nmap –help komutlarını çalıştırarak nasıl kullanıldığını inceleyebilirsiniz.
Yukarıdaki komutu çalıştırdığınızda çıktısı yukarıdaki gibi olmaktadır. Burada nmap ile tarama yaparken kullanılan komutlar hakkında bilgi verilmektedir.
3 – Nmap Komutları
Yazı içerisinde tüm nmap komutlarını ele alıp derinlemesine bir kullanım yapmayacağım. Zaten nmap parametrelerinin açıklamaları komut çıktısında yer almakta, ben zafiyetli bir makineyi tarayıp keşif aşamasını göstereceğim.
$ nmap --help
Nmap 7.91 ( https://nmap.org )
Usage: nmap [Scan Type(s)] [Options] {target specification}
TARGET SPECIFICATION:
Can pass hostnames, IP addresses, networks, etc.
Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
-iL <inputfilename>: Input from list of hosts/networks
-iR <num hosts>: Choose random targets
--exclude <host1[,host2][,host3],...>: Exclude hosts/networks
--excludefile <exclude_file>: Exclude list from file
HOST DISCOVERY:
-sL: List Scan - simply list targets to scan
-sn: Ping Scan - disable port scan
-Pn: Treat all hosts as online -- skip host discovery
-PS/PA/PU/PY[portlist]: TCP SYN/ACK, UDP or SCTP discovery to given ports
-PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes
-PO[protocol list]: IP Protocol Ping
-n/-R: Never do DNS resolution/Always resolve [default: sometimes]
--dns-servers <serv1[,serv2],...>: Specify custom DNS servers
--system-dns: Use OS's DNS resolver
--traceroute: Trace hop path to each host
SCAN TECHNIQUES:
-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
-sU: UDP Scan
-sN/sF/sX: TCP Null, FIN, and Xmas scans
--scanflags <flags>: Customize TCP scan flags
-sI <zombie host[:probeport]>: Idle scan
-sY/sZ: SCTP INIT/COOKIE-ECHO scans
-sO: IP protocol scan
-b <FTP relay host>: FTP bounce scan
PORT SPECIFICATION AND SCAN ORDER:
-p <port ranges>: Only scan specified ports
Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
--exclude-ports <port ranges>: Exclude the specified ports from scanning
-F: Fast mode - Scan fewer ports than the default scan
-r: Scan ports consecutively - don't randomize
--top-ports <number>: Scan <number> most common ports
--port-ratio <ratio>: Scan ports more common than <ratio>
SERVICE/VERSION DETECTION:
-sV: Probe open ports to determine service/version info
--version-intensity <level>: Set from 0 (light) to 9 (try all probes)
--version-light: Limit to most likely probes (intensity 2)
--version-all: Try every single probe (intensity 9)
--version-trace: Show detailed version scan activity (for debugging)
SCRIPT SCAN:
-sC: equivalent to --script=default
--script=<Lua scripts>: <Lua scripts> is a comma separated list of
directories, script-files or script-categories
--script-args=<n1=v1,[n2=v2,...]>: provide arguments to scripts
--script-args-file=filename: provide NSE script args in a file
--script-trace: Show all data sent and received
--script-updatedb: Update the script database.
--script-help=<Lua scripts>: Show help about scripts.
<Lua scripts> is a comma-separated list of script-files or
script-categories.
OS DETECTION:
-O: Enable OS detection
--osscan-limit: Limit OS detection to promising targets
--osscan-guess: Guess OS more aggressively
TIMING AND PERFORMANCE:
Options which take <time> are in seconds, or append 'ms' (milliseconds),
's' (seconds), 'm' (minutes), or 'h' (hours) to the value (e.g. 30m).
-T<0-5>: Set timing template (higher is faster)
--min-hostgroup/max-hostgroup <size>: Parallel host scan group sizes
--min-parallelism/max-parallelism <numprobes>: Probe parallelization
--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time>: Specifies
probe round trip time.
--max-retries <tries>: Caps number of port scan probe retransmissions.
--host-timeout <time>: Give up on target after this long
--scan-delay/--max-scan-delay <time>: Adjust delay between probes
--min-rate <number>: Send packets no slower than <number> per second
--max-rate <number>: Send packets no faster than <number> per second
FIREWALL/IDS EVASION AND SPOOFING:
-f; --mtu <val>: fragment packets (optionally w/given MTU)
-D <decoy1,decoy2[,ME],...>: Cloak a scan with decoys
-S <IP_Address>: Spoof source address
-e <iface>: Use specified interface
-g/--source-port <portnum>: Use given port number
--proxies <url1,[url2],...>: Relay connections through HTTP/SOCKS4 proxies
--data <hex string>: Append a custom payload to sent packets
--data-string <string>: Append a custom ASCII string to sent packets
--data-length <num>: Append random data to sent packets
--ip-options <options>: Send packets with specified ip options
--ttl <val>: Set IP time-to-live field
--spoof-mac <mac address/prefix/vendor name>: Spoof your MAC address
--badsum: Send packets with a bogus TCP/UDP/SCTP checksum
OUTPUT:
-oN/-oX/-oS/-oG <file>: Output scan in normal, XML, s|<rIpt kIddi3,
and Grepable format, respectively, to the given filename.
-oA <basename>: Output in the three major formats at once
-v: Increase verbosity level (use -vv or more for greater effect)
-d: Increase debugging level (use -dd or more for greater effect)
--reason: Display the reason a port is in a particular state
--open: Only show open (or possibly open) ports
--packet-trace: Show all packets sent and received
--iflist: Print host interfaces and routes (for debugging)
--append-output: Append to rather than clobber specified output files
--resume <filename>: Resume an aborted scan
--stylesheet <path/URL>: XSL stylesheet to transform XML output to HTML
--webxml: Reference stylesheet from Nmap.Org for more portable XML
--no-stylesheet: Prevent associating of XSL stylesheet w/XML output
MISC:
-6: Enable IPv6 scanning
-A: Enable OS detection, version detection, script scanning, and traceroute
--datadir <dirname>: Specify custom Nmap data file location
--send-eth/--send-ip: Send using raw ethernet frames or IP packets
--privileged: Assume that the user is fully privileged
--unprivileged: Assume the user lacks raw socket privileges
-V: Print version number
-h: Print this help summary page.
EXAMPLES:
nmap -v -A scanme.nmap.org
nmap -v -sn 192.168.0.0/16 10.0.0.0/8
nmap -v -iR 10000 -Pn -p 80
SEE THE MAN PAGE (https://nmap.org/book/man.html) FOR MORE OPTIONS AND EXAMPLES
4 – Nmap Keşif Aşaması
Bu tarama için hedef olarak Typhoon v1.02 makinesini kullanacağım.
İlk olarak makinenin ip adresini bulacağım. Makinenin ip adresini bulmak için ilk olarak kendi ip adresimi öğreniyorum (192.168.204.134) daha sonra aşağıdaki nmap komutunu kullanarak aynı hosttaki cihazların keşfini yaparak hedef makine adresini öğreneceğim.
nmap -sn 192.168.204.0/24
Bu seçenek, Nmap’e ana bilgisayar keşfinden sonra bir bağlantı noktası taraması yapmamasını ve yalnızca taramaya yanıt veren mevcut ana bilgisayarları yazdırmasını söyler. Bu genellikle “ping taraması” olarak bilinir, ancak traceroute ve NSE ana bilgisayar komut dosyalarının çalıştırılmasını da isteyebilirsiniz.
https://linux.die.net/man/1/nmap
Hedef makine ip adresini 192.168.204.135 olarak tespit ediyorum. Daha sonra aşağıdaki komut ile TCP SYN taraması (-sS) ve en çok kullanılan 10 port (–top-ports 10) için tarama yapıyorum. Tüm portları taramak için -p- parametresini ekleyebiliriz.
nmap -sS --top-ports 10 192.168.204.135
En çok kullanılan 10 portu keşfettikten sonra bu portlarda çalışan servisleri keşfederek varsa bu servislerde bulunan zafiyetleri listeleyebiliriz. Aşağıdaki komut ile yine bir TCP SYN taraması (-sS), en çok kullanılan 10 port (–top-ports 10) ve bu portlarda çalışan servisleri (-sV) keşfedeceğim. Ayrıca burada kullanılan parametreleri (nmap -sSV) olarakta birleştirebiliriz.
nmap -sS -sV --top-ports 10 192.168.204.135
Yukarıda görüldüğü gibi portlarda çalışan servisleri öğrendik. Bir sızma testinde bu servislerde bulunan zafiyetlerden yola çıkarak hedef sistem ele geçirilebilmektedir. Hedef sistemde yer alan işletim sistemi keşfi için (-O) parametresini kullanabiliriz. Aşağıdaki komut ile taramaya dahil edebiliriz.
nmap -sS -sV -O --top-ports 10 192.168.204.135
Daha sonra nmap taraması sonucu keşfettiğimiz portlarda çalışan servislerde bulunan zafiyetleri tespit etmemiz gerekiyor. Bunun için google araması ve searchsploit gibi farklı yolları kullanabiliriz. Ancak nmap içerisinde yer alan NSE scriptlerini kullanarak bu işlemi kolayca yapabiliriz.
Nmap Scripting Engine (NSE), Nmap’in en güçlü ve esnek özelliklerinden biridir. Kullanıcıların basit betikler yazmasına (ve paylaşmasına) izin verir. (Lua programlama dilini kullanarak)
Sistemi oluştururken aklımızda olan görevler arasında ağ keşfi, daha karmaşık sürüm tespiti, güvenlik açığı tespiti yer alıyor. NSE, güvenlik açığından yararlanmak için bile kullanılabilir.
Bu farklı kullanımları yansıtmak ve çalıştırılacak komut dosyalarının seçimini basitleştirmek için her komut dosyası, onu bir veya daha fazla kategoriyle ilişkilendiren bir alan içerir. Şu anda tanımlanmış kategoriler auth, varsayılandır. discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version ve vuln. Bunların tümü http://nmap.org/book/nse-usage.html#nse-categories adresinde açıklanmıştır.
https://linux.die.net/man/1/nmap
Nmap NSE scriptlerini çalıştırmak için (–script={***}) parametresi kullanılabilir. Zafiyetleri servislerin keşfi için (–script=vuln) parametresini kullanabiliriz. Aşağıdaki komutla servislerdeki zafiyetleri ve çeşitli bilgileri detaylı olarak alabiliriz.
nmap --script=vuln --top-ports 10 192.168.204.135
$ nmap --script=vuln --top-ports 10 192.168.204.135
Starting Nmap 7.91 ( https://nmap.org ) at 2021-10-02 09:18 EDT
Pre-scan script results:
| broadcast-avahi-dos:
| Discovered hosts:
| 224.0.0.251
| After NULL UDP avahi packet DoS (CVE-2011-1002).
|_ Hosts are all up (not vulnerable).
Nmap scan report for 192.168.204.135
Host is up (0.00056s latency).
PORT STATE SERVICE
21/tcp open ftp
|_sslv2-drown:
22/tcp open ssh
23/tcp closed telnet
25/tcp open smtp
| smtp-vuln-cve2010-4344:
|_ The SMTP server is not Exim: NOT VULNERABLE
| ssl-dh-params:
| VULNERABLE:
| Anonymous Diffie-Hellman Key Exchange MitM Vulnerability
| State: VULNERABLE
| Transport Layer Security (TLS) services that use anonymous
| Diffie-Hellman key exchange only provide protection against passive
| eavesdropping, and are vulnerable to active man-in-the-middle attacks
| which could completely compromise the confidentiality and integrity
| of any data exchanged over the resulting session.
| Check results:
| ANONYMOUS DH GROUP 1
| Cipher Suite: TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA
| Modulus Type: Safe prime
| Modulus Source: Unknown/Custom-generated
| Modulus Length: 512
| Generator Length: 8
| Public Key Length: 512
| References:
| https://www.ietf.org/rfc/rfc2246.txt
|
| Transport Layer Security (TLS) Protocol DHE_EXPORT Ciphers Downgrade MitM (Logjam)
| State: VULNERABLE
| IDs: BID:74733 CVE:CVE-2015-4000
| The Transport Layer Security (TLS) protocol contains a flaw that is
| triggered when handling Diffie-Hellman key exchanges defined with
| the DHE_EXPORT cipher. This may allow a man-in-the-middle attacker
| to downgrade the security of a TLS session to 512-bit export-grade
| cryptography, which is significantly weaker, allowing the attacker
| to more easily break the encryption and monitor or tamper with
| the encrypted stream.
| Disclosure date: 2015-5-19
| Check results:
| EXPORT-GRADE DH GROUP 1
| Cipher Suite: TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA
| Modulus Type: Safe prime
| Modulus Source: Unknown/Custom-generated
| Modulus Length: 512
| Generator Length: 8
| Public Key Length: 512
| References:
| https://www.securityfocus.com/bid/74733
| https://weakdh.org
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-4000
|
| Diffie-Hellman Key Exchange Insufficient Group Strength
| State: VULNERABLE
| Transport Layer Security (TLS) services that use Diffie-Hellman groups
| of insufficient strength, especially those using one of a few commonly
| shared groups, may be susceptible to passive eavesdropping attacks.
| Check results:
| WEAK DH GROUP 1
| Cipher Suite: TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
| Modulus Type: Safe prime
| Modulus Source: postfix builtin
| Modulus Length: 1024
| Generator Length: 8
| Public Key Length: 1024
| References:
|_ https://weakdh.org
| ssl-poodle:
| VULNERABLE:
| SSL POODLE information leak
| State: LIKELY VULNERABLE
| IDs: BID:70574 CVE:CVE-2014-3566
| The SSL protocol 3.0, as used in OpenSSL through 1.0.1i and other
| products, uses nondeterministic CBC padding, which makes it easier
| for man-in-the-middle attackers to obtain cleartext data via a
| padding-oracle attack, aka the "POODLE" issue.
| Disclosure date: 2014-10-14
| Check results:
| TLS_RSA_WITH_AES_128_CBC_SHA
| TLS_FALLBACK_SCSV properly implemented
| References:
| https://www.openssl.org/~bodo/ssl-poodle.pdf
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3566
| https://www.imperialviolet.org/2014/10/14/poodle.html
|_ https://www.securityfocus.com/bid/70574
|_sslv2-drown:
80/tcp open http
|_http-csrf: Couldn't find any CSRF vulnerabilities.
|_http-dombased-xss: Couldn't find any DOM based XSS.
| http-enum:
| /robots.txt: Robots file
|_ /phpmyadmin/: phpMyAdmin
| http-fileupload-exploiter:
|
| Couldn't find a file-type field.
|
|_ Couldn't find a file-type field.
| http-slowloris-check:
| VULNERABLE:
| Slowloris DOS attack
| State: LIKELY VULNERABLE
| IDs: CVE:CVE-2007-6750
| Slowloris tries to keep many connections to the target web server open and hold
| them open as long as possible. It accomplishes this by opening connections to
| the target web server and sending a partial request. By doing so, it starves
| the http server's resources causing Denial Of Service.
|
| Disclosure date: 2009-09-17
| References:
| http://ha.ckers.org/slowloris/
|_ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-6750
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
110/tcp open pop3
| ssl-dh-params:
| VULNERABLE:
| Diffie-Hellman Key Exchange Insufficient Group Strength
| State: VULNERABLE
| Transport Layer Security (TLS) services that use Diffie-Hellman groups
| of insufficient strength, especially those using one of a few commonly
| shared groups, may be susceptible to passive eavesdropping attacks.
| Check results:
| WEAK DH GROUP 1
| Cipher Suite: TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
| Modulus Type: Safe prime
| Modulus Source: Unknown/Custom-generated
| Modulus Length: 1024
| Generator Length: 8
| Public Key Length: 1024
| References:
|_ https://weakdh.org
| ssl-poodle:
| VULNERABLE:
| SSL POODLE information leak
| State: LIKELY VULNERABLE
| IDs: BID:70574 CVE:CVE-2014-3566
| The SSL protocol 3.0, as used in OpenSSL through 1.0.1i and other
| products, uses nondeterministic CBC padding, which makes it easier
| for man-in-the-middle attackers to obtain cleartext data via a
| padding-oracle attack, aka the "POODLE" issue.
| Disclosure date: 2014-10-14
| Check results:
| TLS_RSA_WITH_AES_128_CBC_SHA
| TLS_FALLBACK_SCSV properly implemented
| References:
| https://www.openssl.org/~bodo/ssl-poodle.pdf
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3566
| https://www.imperialviolet.org/2014/10/14/poodle.html
|_ https://www.securityfocus.com/bid/70574
|_sslv2-drown:
139/tcp open netbios-ssn
443/tcp closed https
445/tcp open microsoft-ds
3389/tcp closed ms-wbt-server
MAC Address: 00:0C:29:FE:24:3B (VMware)
Host script results:
|_smb-vuln-ms10-054: false
|_smb-vuln-ms10-061: false
| smb-vuln-regsvc-dos:
| VULNERABLE:
| Service regsvc in Microsoft Windows systems vulnerable to denial of service
| State: VULNERABLE
| The service regsvc in Microsoft Windows 2000 systems is vulnerable to denial of service caused by a null deference
| pointer. This script will crash the service if it is vulnerable. This vulnerability was discovered by Ron Bowes
| while working on smb-enum-sessions.
|_
Nmap done: 1 IP address (1 host up) scanned in 345.86 seconds
Yukarıda çıktıda görüldüğü gibi zafiyetlerin CVE numaraları gibi birçok bilgiyi elde ettik. Nmap taraması çıktısını XML olarak almak için (-oX) parametresini kullanabiliriz. Herhangi bir dosyaya aktarmak için ise (nmap –script=vuln 192.168.204.135 > nmapcikti.txt) komutunu kullanabiliriz. Nmap taraması yaparken çıktıyı detaylandırmak için (-v, -vv) gibi parametreler kullanılabilir.
Tek bir portu taramak için (-p) parametresini kullanabiliriz. Aşağıdaki komut ile 80 numaralı portu taradık ve üzerinde çalışan servisin keşfini yaptık.
nmap -sSV -p 80 192.168.204.135
Taramayı detaylandırmak için (-vv) parametresini kullanalım.
Görüldüğü gibi birçok bilgiyi çıktıda elde ettik. Örnek olarak searchsploit kullanarak 110 numaralı port üzerinde çalışan Dovecot isimli servis için exploit araması yapıyorum.
Nmap çok detaylı, çok güçlü ve birçok aksiyon alınabilecek bir araçtır. Daha detaylı bilgi için vermiş olduğum linkleri inceleyebilirsiniz. Başka yazılarda görüşmek üzere.