Nmap提供了四大基本功能(主机发现、端口扫描、服务和版本检测、操作系统检测)和丰富的脚本库。 Nmap不仅可以应用于简单的网络信息扫描,还可以应用于高级、复杂、特定的环境:如扫描互联网上大量的主机; 绕过防火墙/IDS/IPS; 扫描网站; 扫描路由器等
Nmap简单扫描方法:
全面扫描:nmap -T4 -A ip
主机发现:nmap -T4 -sn ip
端口扫描:nmap -T4 ip
服务扫描:nmap -T4 -sV ip
操作系统扫描:nmap -T4 -O ip
上述扫描方法可以满足一般的信息采集需求。 如果想要使用Nmap探索特定场景中更详细的信息,则需要仔细设计Nmap命令行参数,以便精确控制Nmap的扫描行为。
下面列出了更实用、更先进的应用场景和技术。
1.Nmap高级选项
1.查看本地路由和接口
Nmap提供--选项来查看本地主机的接口信息和路由信息。 当无法到达目标主机或者想从多个网卡中选择特定的网卡来访问目标主机时,可以查看nmap--中提供的网络接口信息。
nmap –iflist
2.指定网口和IP地址
在Nmap中,可以指定使用哪个网络端口来发送数据,即-e选项。 接口详细信息请参考--输出结果。
例子:
nmap -e eth0 targetip
Nmap还可以明确指定要发送的源IP地址。 使用-S选项,nmap将发送具有指定源IP的探测数据包。
另外,可以使用Decoy的方法来掩盖真实的扫描地址,如-D ip1,ip2,ip3,ip4,ME,这样就会产生多个假ip来同时检测目标机器,其中ME代表本机的真实地址,这样对方的防火墙就不容易识别扫描仪的身份。
nmap -T4 -F -n -Pn -D192.168.1.100,192.168.1.101,192.168.1.102,ME 192.168.1.1
3. 定制检测包
Nmap提供了--选项,用户可以完全控制需要发送的TCP探测包的标志位。 TCP 标志可以使用数字或符号指定:URG、ACK、PSH、RST、SYN 和 FIN。
例如:
nmap -sX -T4 –scanflags URGACKPSHRSTSYNFINtargetip
该命令将所有TCP标志位设置为1,可用于某些特殊场景的检测。
另外,使用-ip-可以自定义IP报文的字段。
使用-S指定一个假IP地址,-D指定一组诱饵IP地址(ME代表真实地址)。 -e指定发送探测包的网络接口,-g(--port)指定源端口,-f指定使用IP分片发送探测包,--spoof-mac指定使用欺骗的MAC地址。 –ttl 指定生存时间。
2.Nmap扫描防火墙
防火墙在当今的网络安全中发挥着重要作用。 如果能够对防火墙系统进行详细的检测,那么绕过防火墙或者穿透防火墙就会变得更加容易。 因此,这里是使用Nmap获取基本防火墙信息的典型用法。
为了获得防火墙的全面信息,需要结合尽可能多的不同扫描方法来检测其状态。 在设计命令行参数时,可以根据网络环境微调时序参数,以加快扫描速度。
1.SYN扫描
首先,可以使用基本的SYN扫描方法来检测其端口的开放状态。
nmap -sS -T4 www.fujieace.com
扫描输出为:
All 997 ports are filtered
PORT STATE SERVICE
80/tcp open http
113/tcp closed auth
507/tcp open crs
我们可以看到SYN方法检测到3个端口是开放的,而997个端口被过滤了。 默认情况下,Nmap 仅扫描 1000 个最有可能开放的端口。 如果要扫描所有端口,命令如下:
nmap -sS -T4-p- www.fujieace.com
2.FIN扫描
然后就可以使用FIN扫描方法来检测防火墙的状态。 FIN扫描方式用于识别端口是否关闭。 如果收到RST回复,则端口关闭,否则端口处于打开状态。
nmap -sF -T4 www.fujieace.com
扫描输出为:
PORT STATE SERVICE
7/tcp open|filtered echo
9/tcp open|filtered discard
11/tcp open|filtered systat
13/tcp open|filtered daytime
23/tcp open|filtered telnet
25/tcp open|filtered smtp
37/tcp open|filtered time
79/tcp open|filtered finger
80/tcp open|filtered http
更多端口,此处省略.......
3.ACK扫描
然后使用ACK扫描来判断端口是否被过滤。 对于ACK检测数据包,未过滤的端口(无论打开还是关闭)都会回复RST数据包。
nmap -sA -T4 www.fujieace.com
扫描输出为:
Not shown: 997 unfiltered ports
PORT STATE SERVICE
135/tcp filtered msrpc
1434/tcp filtered ms-sql-m
32777/tcp filtered sometimes-rpc17
从结果中我们可以知道有997个端口没有被过滤(),有3个(135/1434/32777)被过滤了。 因此,结合ACK和FIN扫描的结果,我们可以发现很多开放的端口。 例如7号端口,从FIN得到的状态是:open,或者,从ACK得到的状态是,则该端口只能是open。
4. 扫描
当然,你也可以通过扫描的方式来获取一些端口信息,这样可以补充前面扫描分析的结果。 该扫描方法仅对某些TCPIP协议栈有效。
扫描原理与ACK类似,发送ACK包来检测目标端口,并分析回复RST包中的大小。 在 TCPIP 协议栈的某些实现中,关闭端口的 RST 大小将设置为 0; 开放端口的大小将设置为非零值。
nmap -sW -p- -T4 www.fujieace.com
输出结果:
PORT STATE SERVICE
7/tcp open echo
9/tcp open discard
11/tcp open systat
13/tcp open daytime
更多端口,此处省略......
通过各种方式获取防火墙的状态后,可以进行进一步的应用程序和版本检测以及操作系统检测。
这里不再详细说明!
这里有一篇关于使用nmap突破防火墙的文章。 推荐《如何使用Nmap绕过防火墙》!
3.扫描路由器
Nmap内部维护一个系统和设备数据库(nmap-os-db),它可以识别数千个不同的系统和设备。 因此可以用来扫描主流的路由器设备。
1.扫描Cisco路由器
nmap -p1-25,80,512-515,2001,4001,6001,9001 10.20.0.1/16
Cisco路由器在上述端口上运行通用服务。 通过枚举上述开放端口的主机,可以定位路由器设备可能的IP地址和端口状态。
2. 扫描路由器TFTP
nmap –sU –p69 –nvv target
大多数路由器都支持TFTP协议(普通文件传输协议),该协议常用于备份和恢复路由器配置文件,运行在UDP端口69上。使用上述命令可以检测路由器是否开放了TFTP。
4.扫描路由器操作系统
与一般PC扫描类似,使用-O选项扫描路由器的操作系统。 -F 用于快速扫描100个最有可能开放的端口,并根据端口扫描结果进一步进行操作系统指纹分析。
nmap -O -F -n 192.168.1.1
4. 扫描互联网
Nmap的内部设计非常强大和灵活。 它可以扫描单个主机、小型局域网,也可以扫描数千台主机,以发现用户关心的信息。 扫描大量主机需要仔细优化扫描时序等参数。
1. 发现 上的 Web 服务器
nmap -iR 100000 -sS -PS80 -p 80 -oG nmap.txt
随机生成10万个IP地址,扫描其80端口。将扫描结果以某种格式输出到nmap.txt文件中(可使用grep命令提取)。
可以使用 grep 命令从输出文件中提取感兴趣的详细信息。
2、统计互联网主机基础数据
Nmap的创始人在2008年的黑帽大会上发表演讲,谈论如何使用Nmap扫描互联网(Nmap:),资料地址:
互联网扫描的初衷是收集网络体验数据并利用它来优化Nmap的性能。 例如,根据各个端口开放概率的统计,优先扫描常用端口,以节省用户的时间。
生成随机IP地址
生成1,000,000个随机IP地址并将其保存在文件中,以便在后续扫描时作为参数输入。
nmap -iR 1200000 -sL -n | grep “not scanned” | awk ‘{print $2}’ | sort -n | uniq >! tp; head -25000000 tp >! tcp-allports-1M-IPs; rm tp
上述命令的含义:随机生成一个IP地址(-iR),并进行列表扫描(-sL,列出IP地址,不进行真正的扫描),不进行dns解析操作(-n),这将生成一个Nmap列表扫描的结果。 找到这个结果中未扫描的行(grep “not ”),打印出每行第二列的内容(awk '{print $2}',即IP地址),然后对得到的IP地址进行排序(sort -n),然后去掉重复的IP地址,将结果保存到临时文件tp中,然后取出之前的IP地址保存到tcp--1M-IPs文件中,并删除临时文件。
简而言之,这里生成了一个随机IP地址,并存储在tcp--1M-IPs文件中。
优化主机发现
nmap -sP -PE -PP -PS21,22,23,25,80,113,31339-PA80,113,443,10042 –source-port 53 -T4 -iL tcp-allports-1M-IPs
上述命令进行主机发现:使用生成的IP地址(-iL tcp--1M-IPs),指定发送数据包的源端口为53(--port 53,该端口为DNS查询端口,一般防火墙允许端口数据包),时序级别为4(-T4,检测速度比较快),通过TCP SYN包检测目标机的21、22、23、25、80、113、31339端口,并通过TCP ACK数据包检测到对方的80、113、443,端口10042,同时也发送ICMP ECHO/ICMP数据包来检测对方主机。 只要在上述检测包中得到回复,就可以证明目标主机在线。
全扫描命令
准备好必要的IP地址文件并优化主机发现参数后,我们得到最终的扫描命令:
nmap -S [srcip] -d –max-scan-delay 10 -oAlogs/tcp-allports-%T-%D -iL tcp-allports-1M-IPs –max-retries 1–randomize-hosts -p- -PS21,22,23,25,53,80,443 -T4 –min-hostgroup 256 –min-rate175 –max-rate 300
上述命令用于扫描上100万台主机所有TCP端口的开放情况。
使用包含100万个IP地址的文件(-iL tcp--1M-IPs),设置源IP地址为srcip(指定一个IP地址,并保证该IP地址在统一局域网内,否则目标回复机器收不到包),主机发现过程使用TCP SYN包来检测目标机器的21、22、23、25、53、80、443,扫描过程会随机打乱主机的顺序(--hosts ,因为文件中的IP已经排序,这里是,避免被防火墙检查出来),端口扫描过程检查所有TCP端口(-p-,端口1到65535),使用时序级别为4(-T4,速度更快),并将结果保存为XML//格式输出到文件(-oA logs/tcp--%T-%D,其中%T代表扫描时间,% D 代表扫描日期)。
-d 表示打印出调试信息。
–max-scan-delay 10 表示数据包发送最多延迟10秒,防止特殊情况下等待时间过长。
–max- 1,表示端口扫描检测包最多重传一次,防止Nmap多次重传检测包而没有收到回复,当然这也会降低检测的准确性。
–min-host-group 256 表示进行端口扫描和版本检测时同时检测的主机数量。 这里至少对256台主机进行分组扫描,以加快扫描速度。
–min-rate 175和–max-rate 300,表示发包速率在175到300之间,保证扫描速度不会太慢,目标机器不会因为速率过高而产生警报。
扫描结果
该组织的扫描得出了许多重要结论,统计了互联网上 10 个最有可能开放的 TCP 端口。
最有可能打开 10 个 UDP 端口。
5. 扫描网站
Web是互联网上应用最广泛的,越来越多的服务趋向于以Web的形式提供,因此Web安全的监管变得越来越重要。 目前安全领域有很多专门的网页扫描软件(如、、W3AF),可以提供端口扫描、漏洞扫描、漏洞利用、分析报告等多种功能。 Nmap作为开源端口扫描器,对网页扫描的支持日益强大,可以完成网页上的基本信息检测:服务器版本、支持的、是否包含典型漏洞等。 功能已经远远超越了同领域的其他开源软件,例如.
目前,Nmap主要通过Lua脚本支持Web。 NSE脚本库中有超过50个HTTP相关的脚本。
扫描示例:
nmap -sV -p 80 -T4 --script http*,default scanme.nmap.org
上面的扫描网页应用程序显示Nmap提供了网页扫描功能。 从图中我们可以看到扫描结果提供了比较丰富的信息。
首先是应用程序及其版本:2.2.14 ()
然后搜索站点的-id:这个ID可以用来识别同一所有者的不同页面。