web安全之Nmap入门指南
Nmap是一款功能强大的网络探测和安全评估工具,它可以扫描网络中的主机和服务,并发现潜在的安全漏洞和风险。Nmap支持多种扫描技术,包括基本扫描、主机发现、端口扫描、操作系统检测、服务识别等。本文将介绍Nmap的高级扫描技术,包括TCP SYN扫描、TCP Connect扫描、UDP扫描、ACK扫描、Window扫描、IDLE扫描、FTP Bounce扫描等。
一、TCP SYN扫描
TCP SYN扫描是Nmap最常用的扫描技术之一,它利用TCP协议的三次握手过程来检测目标主机上的开放端口。TCP SYN扫描需要发送一个SYN包给目标主机的每个端口,如果目标主机返回一个SYN/ACK包,则表示该端口是开放的。如果目标主机返回一个RST包,则表示该端口是关闭的。
TCP SYN扫描的优点是快速、准确、低影响性和难以检测,因为它不会建立完整的TCP连接,只发送一个SYN包和一个RST包,不会在目标主机上留下任何痕迹。但是,TCP SYN扫描需要具有root权限,并且可能会被一些防火墙和IDS检测到。
以下是使用Nmap进行TCP SYN扫描的命令:
nmap -sS
例如,扫描192.168.1.1的开放端口:
nmap -sS 192.168.1.1
二、TCP Connect扫描
TCP Connect扫描是另一种常用的扫描技术,它使用完整的TCP连接来检测目标主机上的开放端口。TCP Connect扫描需要建立一个TCP连接到目标主机的每个端口,如果连接成功,则表示该端口是开放的。如果连接失败,则表示该端口是关闭的。
TCP Connect扫描的优点是准确、难以检测和适用于一些防火墙和IDS。但是,TCP Connect扫描需要比TCP SYN扫描更多的资源和时间,并且可能会在目标主机上留下日志和记录。
以下是使用Nmap进行TCP Connect扫描的命令:
nmap -sT
例如,扫描192.168.1.1的开放端口:
nmap -sT 192.168.1.1
三、UDP扫描
UDP扫描是一种用于检测UDP端口的扫描技术。UDP是无连接的协议,没有像TCP三次握手那样的确认机制,因此UDP扫描需要发送一个UDP包到目标主机的每个端口,如果目标主机返回一个ICMP端口不可达的消息,则表示该端口是关闭的。如果目标主机没有返回任何消息,则表示该端口是开放的或者被过滤。
UDP扫描的优点是适用于检测UDP端口和绕过一些防火墙规则。但是,UDP扫描需要较长的时间和更多的资源,并且可能会产生误报。
以下是使用Nmap进行UDP扫描的命令:
nmap -sU
例如,扫描192.168.1.1的开放UDP端口:
nmap -sU 192.168.1.1
四、ACK扫描
ACK扫描是一种利用ACK包来检测目标主机上的开放端口的扫描技术。ACK是TCP协议中的一种包类型,用于确认收到数据的信息。在ACK扫描中,Nmap发送一个ACK包给目标主机的每个端口,如果目标主机返回一个RST包,则表示该端口是关闭的。如果目标主机没有返回任何消息,则表示该端口是开放的或者被过滤。
ACK扫描的优点是适用于检测防火墙和IDS中的过滤规则和检测TCP隧道。但是,ACK扫描需要具有root权限,并且可能会被一些防火墙和IDS检测到。
以下是使用Nmap进行ACK扫描的命令:
nmap -sA
例如,扫描192.168.1.1的开放端口:
nmap -sA 192.168.1.1
五、Window扫描
Window扫描是一种利用TCP窗口大小来检测目标主机上的开放端口的扫描技术。TCP窗口大小是TCP协议中的一个参数,用于控制数据传输的速度和流量。在Window扫描中,Nmap发送一个TCP包给目标主机的每个端口,并设置一个不为零的窗口大小,如果目标主机返回一个RST包,则表示该端口是关闭的。如果目标主机返回一个SYN/ACK包,则表示该端口是开放的。
Window扫描的优点是适用于检测防火墙和IDS中的过滤规则和检测TCP窗口大小。但是,Window扫描需要具有root权限,并且可能会被一些防火墙和IDS检测到。
以下是使用Nmap进行Window扫描的命令:
nmap -sW
例如,扫描192.168.1.1的开放端口:
nmap -sW 192.168.1.1
六、IDLE扫描
IDLE扫描是一种利用目标主机上的闲置TCP连接来检测开放端口的扫描技术。在IDLE扫描中,Nmap需要找到一个可以与目标主机建立TCP连接的闲置主机,并将该连接的源IP地址设置为目标主机的IP地址。然后,Nmap发送一个TCP包给目标主机的每个端口,并在TCP包中设置一个不为零的窗口大小,如果目标主机返回一个RST包,则表示该端口是关闭的。如果目标主机返回一个SYN/ACK包,则表示该端口是开放的。
IDLE扫描的优点是低影响性和难以检测,因为它利用了闲置TCP连接和伪造的源IP地址。但是,IDLE扫描需要具有root权限,并且需要找到一个可以与目标主机建立TCP连接的闲置主机。
以下是使用Nmap进行IDLE扫描的命令:
nmap -sI
例如,使用192.168.1.100作为闲置主机,扫描192.168.1.1的开放端口:
nmap -sI 192.168.1.100 192.168.1.1
七、FTP Bounce扫描
FTP Bounce扫描是一种利用FTP服务器上的漏洞来检测目标主机上的开放端口的扫描技术。在FTP Bounce扫描中,Nmap先找到一个可用的FTP服务器,并在FTP服务器上执行PORT命令,将目标主机和端口号作为参数传递给FTP服务器。FTP服务器会尝试与目标主机建立连接,并返回连接是否成功的消息给Nmap。
FTP Bounce扫描的优点是适用于绕过一些防火墙规则和检测隐藏在FTP服务器后面的主机。但是,FTP Bounce扫描需要找到一个可用的FTP服务器,并且可能会被一些防火墙和IDS检测到。
以下是使用Nmap进行FTP Bounce扫描的命令:
nmap -b
例如,使用ftp.example.com作为FTP服务器,扫描192.168.1.1的开放端口:
nmap -b ftp.example.com 192.168.1.1
八、UDP扫描
UDP扫描是一种用于检测目标主机上开放UDP端口的扫描技术。UDP协议是无连接的协议,因此无法像TCP扫描那样简单地使用三次握手来确定端口是否开放。在UDP扫描中,Nmap发送一个UDP包给目标主机的每个端口,如果目标主机返回一个ICMP端口不可达消息,则表示该端口是关闭的。如果目标主机没有返回任何消息,则表示该端口是开放的或者被过滤。
UDP扫描的优点是适用于检测目标主机上开放的UDP端口。但是,UDP扫描需要等待超时时间,因此速度较慢,并且可能会被一些防火墙和IDS检测到。
以下是使用Nmap进行UDP扫描的命令:
nmap -sU
例如,扫描192.168.1.1的开放UDP端口:
nmap -sU 192.168.1.1
九、SCTP INIT扫描
SCTP INIT扫描是一种用于检测目标主机上开放SCTP端口的扫描技术。SCTP是一种类似于TCP的传输协议,但具有可靠性更高、多路复用和传输优先级的优点。在SCTP INIT扫描中,Nmap发送一个SCTP INIT包给目标主机的每个端口,如果目标主机返回一个SCTP INIT-ACK包,则表示该端口是开放的。如果目标主机返回一个SCTP ABORT包,则表示该端口是关闭的。
SCTP INIT扫描的优点是适用于检测目标主机上开放的SCTP端口。但是,SCTP INIT扫描需要目标主机支持SCTP协议,并且可能会被一些防火墙和IDS检测到。
以下是使用Nmap进行SCTP INIT扫描的命令:
nmap -sY
例如,扫描192.168.1.1的开放SCTP端口:
nmap -sY 192.168.1.1
总结
Nmap是一款功能强大的网络扫描工具,可以使用多种扫描技术来检测目标主机上的开放端口和服务。不同的扫描技术适用于不同的情况和需求。使用Nmap时,需要遵守法律和道德规范,并获得目标主机的授权。
图片
Nmap的高级选项和配置
Nmap是一款功能强大的网络扫描工具,具有许多高级选项和配置,可以帮助用户更精细地控制扫描过程和结果。本文将介绍Nmap的一些高级选项和配置,包括扫描模式、端口范围、主机发现、主机过滤、输出格式、脚本扫描等。
一、扫描模式
Nmap支持多种扫描模式,包括TCP扫描、UDP扫描、SYN扫描、FIN扫描、XMAS扫描、NULL扫描、ACK扫描、Window扫描、IDLE扫描、FTP Bounce扫描、SCTP INIT扫描等。每种扫描模式都有其适用的场景和优缺点。用户可以使用-nmap -s 参数来指定扫描模式,例如:
TCP扫描:nmap -sT
UDP扫描:nmap -sU
SYN扫描:nmap -sS
FIN扫描:nmap -sF
XMAS扫描:nmap -sX
NULL扫描:nmap -sN
ACK扫描:nmap -sA
Window扫描:nmap -sW
IDLE扫描:nmap -sI
FTP Bounce扫描:nmap -b
SCTP INIT扫描:nmap -sY
二、端口范围
Nmap支持多种指定端口范围的方式,包括单个端口、端口范围、逗号分隔的端口列表、端口区间、通配符等。用户可以使用-nmap -p 参数来指定端口范围,例如:
单个端口:nmap -p 80
端口范围:nmap -p 1-100
逗号分隔的端口列表:nmap -p 80,443,8080
端口区间:nmap -p 1,3,5-7
通配符:nmap -p “*”
三、主机发现
Nmap支持多种主机发现技术,包括主机存活检测、ARP扫描、ICMP扫描、TCP ACK扫描、UDP扫描等。用户可以使用-nmap -P 参数来指定主机发现技术,例如:
主机存活检测:nmap -Pn
ARP扫描:nmap -PR
ICMP扫描:nmap -PE
TCP ACK扫描:nmap -PA
UDP扫描:nmap -PU
四、主机过滤
Nmap支持多种主机过滤技术,包括主机名、IP地址、CIDR地址、正则表达式等。用户可以使用-nmap -iL 参数来指定主机列表文件,其中每行为一个主机名或IP地址。用户也可以使用-nmap -exclude 参数来指定要排除的主机。例如:
指定主机名:nmap example.com
指定IP地址:nmap 192.168.1.1
指定CIDR地址:nmap 192.168.1.0/24
指定主机列表文件:nmap -iL hosts.txt
排除主机:nmap --exclude 192.168.1.1
五、输出格式
Nmap支持多种输出格式,包括标准输出、XML输出、Grepable输出、NSE脚本输出等。用户可以使用-nmap -o 参数来指定输出格式和输出文件名,例如:
标准输出:
nmap
XML输出:
nmap -oX output.xml
Grepable输出:
nmap -oG output.gnmap
NSE脚本输出:
nmap --script
六、脚本扫描
Nmap支持使用脚本进行扫描,用户可以使用-nmap --script 参数来指定要使用的脚本。Nmap脚本可以用于漏洞扫描、服务识别、操作系统识别、漏洞利用等。例如:
漏洞扫描:
nmap --script vuln
服务识别:
nmap --script discovery
操作系统识别:
nmap --script os
漏洞利用:
nmap --script exploit
总之,Nmap是一款功能强大的网络扫描工具,具有多种高级选项和配置,可以帮助用户更精细地控制扫描过程和结果。用户可以根据需要选择适当的选项和配置,实现更高效、更准确的扫描和测试。
图片
Nmap的高级脚本和扩展
Nmap是一款功能强大的网络扫描工具,其脚本引擎是其最重要的一个组成部分。Nmap脚本引擎支持多种脚本,包括漏洞扫描、服务识别、操作系统识别、漏洞利用等。本文将介绍Nmap的高级脚本和扩展,包括Nmap Scripting Engine (NSE)、NSE脚本分类、NSE脚本语言、NSE脚本库、NSE脚本编写和调试等。
一、Nmap Scripting Engine (NSE)
NSE是Nmap脚本引擎的缩写,是Nmap的一个重要组成部分。NSE可以帮助用户更好地利用Nmap的功能,进行更加准确和深入的扫描和测试。NSE脚本可以用于漏洞扫描、服务识别、操作系统识别、漏洞利用等。NSE脚本可以通过在命令行中指定-nmap --script 参数来运行,例如:
运行所有可用的脚本:
nmap -sV -sC
运行指定的脚本:
nmap --script
二、NSE脚本分类
NSE脚本可以分为多种类型,包括:
auth:用于认证和授权测试的脚本,例如ftp-anon.nse、http-form-brute.nse等。
broadcast:用于广播和多播测试的脚本,例如snmp-brute.nse、smb-os-discovery.nse等。
brute:用于暴力破解测试的脚本,例如ftp-brute.nse、ssh-brute.nse等。
default:用于默认测试的脚本,例如http-title.nse、ssh-hostkey.nse等。
discovery:用于发现测试的脚本,例如dns-zone-transfer.nse、ssl-cert.nse等。
dos:用于拒绝服务测试的脚本,例如http-slowloris.nse、smtp-vrfy.nse等。
exploit:用于漏洞利用测试的脚本,例如http-vuln-cve2015-1635.nse、ms08-067.nse等。
external:用于与外部应用程序交互的脚本,例如mysql-brute.nse、smtp-open-relay.nse等。
fuzzer:用于模糊测试的脚本,例如dns-fuzz.nse、http-sql-injection.nse等。
intrusive:用于入侵测试的脚本,例如ftp-bounce.nse、mysql-empty-password.nse等。
malware:用于恶意软件测试的脚本,例如ssh-mitm.nse、vnc-brute.nse等。
safe:用于安全测试的脚本,例如http-robots.txt.nse、ssh2-enum-algos.nse等。
version:用于版本测试的脚本,例如http-vhosts.nse、smb-os-discovery.nse等。
三、NSE脚本语言
NSE脚本使用的是Lua语言,是一种轻量级的脚本语言。Lua语言具有简单、高效、灵活的特点,适用于嵌入式系统、游戏开发、Web开发等领域。NSE脚本使用Lua语言可以实现更加灵活和高效的扫描和测试。
四、NSE脚本库
NSE脚本库是一组预定义的NSE脚本,用于实现不同类型的扫描和测试。NSE脚本库包括:
auth:用于认证和授权测试的脚本库。
broadcast:用于广播和多播测试的脚本库。
brute:用于暴力破解测试的脚本库。
default:用于默认测试的脚本库。
discovery:用于发现测试的脚本库。
dos:用于拒绝服务测试的脚本库。
exploit:用于漏洞利用测试的脚本库。
external:用于与外部应用程序交互的脚本库。
fuzzer:用于模糊测试的脚本库。
intrusive:用于入侵测试的脚本库。
malware:用于恶意软件测试的脚本库。
safe:用于安全测试的脚本库。
version:用于版本测试的脚本库。
NSE脚本库中包含了大量的脚本,可以帮助用户快速实现不同类型的扫描和测试,提高测试效率和准确性。
五、NSE脚本编写和调试
NSE脚本编写和调试是一项复杂的工作,需要熟练掌握Lua语言和NSE脚本引擎的功能和特性。在编写和调试NSE脚本时,需要注意以下几点:
研究目标:在编写NSE脚本之前,需要研究目标系统的特点和漏洞,以确保脚本能够准确地检测和利用漏洞。
确定脚本类型:根据测试目的和目标系统的特点,确定脚本的类型和功能,例如发现测试、漏洞扫描、漏洞利用等。
编写脚本:使用Lua语言编写脚本,包括定义变量、函数、条件语句等。
调试脚本:使用调试工具调试脚本,查找和修复错误和漏洞。
测试脚本:对脚本进行测试,确保脚本能够准确地检测和利用漏洞,同时避免误报和漏报。
0条评论