web安全之Nmap入门指南

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条评论

还没有人评论,赶紧抢个沙发~

发表评论

说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。