adone
- 关注
1.1是什么扫描器
Nmap(Network Mapper)是一款开源免费的针对大型网络的端口扫描工具,nmap可以检测目标主机是否在线、主机端口开放情况、检测主机运行的服务类型及版本信息、检测操作系统与设备类型等信息。本文主要给网络安全初级学习者介绍nmap工具基本使用。
1.2有什么用
Nmap的设计目标是快速地扫描大型网络,当然用它扫描单个主机。Nmap以新颖的方式使用原始IP报文来发现网络上有哪些主机,这些主机提供什么类型的服务以及服务版本,这些服务运行在什么操作系统上,它们使用什么类型的报文过滤器/防火墙,以及一堆其它功能。Nmap除了用于探测主机存活以及主机端口运行的服务等安全审计活动,还有许多系统和网络管理员用它来做一些日常的维护工作,比如监控主机和服务的运行情况,查看网络状态信息。
Npcap 独立于主机协议(如 TCP/IP)接收和发送数据包。这意味着它无法阻止、过滤或操纵同一台机器上其他程序生成的流量:它只是“嗅探”在线路上传输的数据包。因此,它没有为流量整形器、QoS 调度器和个人防火墙等应用程序提供适当的支持。
安全审计常用的场景:
1.2.1高危端口扫描:
高危端口并不是指使用的端口号是危险的,而是指端口对应的服务暴露给外网会导致网络安全风险。
端口类型 | 协议 | 默认端口号 |
高危端口-服务 | TCP | 20-23,69,135,137-139,161-162,177,389,445,513,636,830,2081,3389,4899,5900,5901,6000-6063 |
高危端口-DB | TCP | 1433-1435,1521-1530,2181,3306,5000,5432,5984,6379,6800,7306,8635,9200,9300,11211,25308,26800,27017-27019,50000-50050 |
高危端口-App | TCP | 2375,8088 |
部分高危端口介绍:
20:FTP服务数据连接端口。
21:FTP服务控制连接端口。
22:SSH服务端口,用于远程登录与数据传输
23:Telnet服务端口,明文传输账号密码。
69:TFTP服务端口。
135:RPC服务端口,永恒之蓝。
137:NetBIOS名称服务,永恒之蓝。
138:共享服务端口,永恒之蓝。
139:NetBIOS/SMB服务端口,永恒之蓝。
445:文件共享端口,永恒之蓝。
高危端口137 138 139 445:
这几个端口都是为共享而开的,非法入侵者通过139、445这个端口进入的连接,能够获得NetBIOS/SMB服务权限,这是IPC$入侵的主要通道。139端口基于SMB协议提供共享服务,445端口基于CIFS协议提供共享服务;非法入侵者通过向137端口发送连接请求,可能获得目标主机的相关名称信息,例如目标主机的计算机名称、注册该目标主机的用户信息以及目标主机是否是作为文件服务器或主域控制器来使用;138端口的主要作用是提供NetBIOS环境下的计算机名浏览功能,非法入侵者与主机的138端口建立连接请求就能轻松获得目标主机所处的局域网名称以及目标主机的计算机名称。
3389:RDP(远程桌面)的默认端口,攻击者可以利用这个端口,远程控制服务器,控制后可以进行一些系统操作比如文件的导入导出。
3306,1521,1433,6379:分别是mysql、oracle、mssql、redis服务的默认端口,数据库服务常因配置不当存在未授权访问问题,导致一些数据泄露的风险。
2375端口:Docker Remote API默认端口,是一个取代远程命令行界面(Rcli)的Rest API。通过docker client和http请求可以访问这个API,通过这个接口可以新建container,删除已有container,甚至获取宿主机的shell。
8088端口:基于MML协议,远程补丁端口,网管连接OMU进行远程补丁升级使用.
1.2.2渗透测试扫描:
安全审计人员在进行安全审计和渗透测试之前,会使用端口扫描工具进行主机发现和端口及服务探测。Nmap作为一个轻便的工具,能够快速探测测试目标主机存活状态,对外开放了哪些端口和服务。针对这些开放的端口和服务进行渗透测试,根据获得的服务类型和版本信息尝试使用相应的漏洞缺陷进行渗透验证。
1.3 怎么用
1.3.1工具安装
(1)nmap官方下载路径:https://nmap.org/download.html
(2)按照操作系统类型下载相应软件安装。
(3)Windows软件执行.exe软件安装。
打开软件安装包后点击I Agree(我同意)按钮
点击Next>(下一步)按钮
7.点击Browse...按钮选择软件要安装的地方,然后点击Install(安装)按钮
PS:接下来要安装完Npcap,Nmap才会继续安装
npcap是一个网络数据包抓包工具,是WinPcap的改进版;支持Windows平台的回环数据包采集和发送。npcap 是Nmap自带的一个数据包处理工具,Nmap底层就是使用这个包进行收发包的。
1.3.2 Nmap扫描器使用
1. nmap命令使用方法
namp [ 扫描类型 ] [ 通用选项 ] [ 扫描目标 ]
- 扫描类型:
-sT:TCP connect()扫描,这是最基本的TCP扫描方式。connect()是一种系统调用,由操作系统提供,用来打开一个连接。如果目标端口有程序监听, connect()就会成功返回,否则这个端口是不可达的。这项技术最大的优点是,你勿需root权限。任何UNIX用户都可以自由使用这个系统调用。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。
-sS:TCP同步扫描(TCP SYN),因为不必全部打开一个TCP连接,所以这项技术通常称为半开扫描(half-open)。你可以发出一个TCP同步包(SYN),然后等待回应。如果对方返回SYN|ACK(响应)包就表示目标端口正在监听;如果返回RST数据包,就表示目标端口没有监听程序;如果收到一个SYN|ACK包,源主机就会马上发出一个RST(复位)数据包断开和目标主机的连接,这实际上有我们的操作系统内核自动完成的。这项技术最大的好处是,很少有系统能够把这记入系统日志。不过,你需要root权限来定制SYN数据包。
-sU:UDP扫描,发送0字节UDP包,快速扫描Windows的UDP端口如果你想知道在某台主机上提供哪些UDP(用户数据报协议,RFC768)服务,可以使用这种扫描方法。nmap首先向目标主机的每个端口发出一个0字节的UDP包,如果我们收到端口不可达的ICMP消息,端口就是关闭的,否则我们就假设它是打开的。
-sP:ping扫描,有时你只是想知道此时网络上哪些主机正在运行。通过向你指定的网络内的每个IP地址发送ICMP echo请求数据包,nmap就可以完成这项任务。注意,nmap在任何情况下都会进行ping扫描,只有目标主机处于运行状态,才会进行后续的扫描。如果你只是想知道目标主机是否运行,而不想进行其它扫描,才会用到这个选项。
-sA:ACK扫描 TCP ACK扫描,当防火墙开启时,查看防火墙有未过虑某端口,这项高级的扫描方法通常用来穿过防火墙的规则集。通常情况下,这有助于确定一个防火墙是功能比较完善的或者是一个简单的包过滤程序,只是阻塞进入的SYN包。这种扫描是向特定的端口发送ACK包(使用随机的应答/序列号)。如果返回一个RST包,这个端口就标记为unfiltered状态。如果什么都没有返回,或者返回一个不可达ICMP消息,这个端口就归入filtered类。注意,nmap通常不输出unfiltered的端口,所以在输出中通常不显示所有被探测的端口。显然,这种扫描方式不能找出处于打开状态的端口。
-sW:滑动窗口扫描,这项高级扫描技术非常类似于ACK扫描,除了它有时可以检测到处于打开状态的端口,因为滑动窗口的大小是不规则的,有些操作系统可以报告其大小。
-sR:RPC扫描,和其他不同的端口扫描方法结合使用。
-sV: 探测端口服务版
-b:FTP反弹攻击(FTP Bounce attack) 外网用户通过FTP渗透内网
- 通用选项
-P0:nmap扫描前不Ping目标主机。在扫描之前,不必ping主机。有些网络的防火墙不允许ICMP echo请求穿过,使用这个选项可以对这些网络进行扫描。
-PT:nmap扫描前使用TCP ACK包确定主机是否在运行(-PT默认80。扫描之前,使用TCP ping确定哪些主机正在运行。nmap不是通过发送ICMP echo请求包然后等待响应来实现这种功能,而是向目标网络(或者单一主机)发出TCP ACK包然后等待回应。如果主机正在运行就会返回RST包。只有在目标网络/主机阻塞了ping包,而仍旧允许你对其进行扫描时,这个选项才有效。对于非 root用户,我们使用connect()系统调用来实现这项功能。使用-PT 来设定目标端口。默认的端口号是80,因为这个端口通常不会被过滤。
-PS: nmap使用TCP SYN包进行扫描。对于root用户,这个选项让nmap使用SYN包而不是ACK包来对目标主机进行扫描。如果主机正在运行就返回一个RST包(或者一个SYN/ACK包)。
-PI:nmap进行Ping扫描。设置这个选项,让nmap使用真正的ping(ICMP echo请求)来扫描目标主机是否正在运行。使用这个选项让nmap发现正在运行的主机的同时,nmap也会对你的直接子网广播地址进行观察。直接子网广播地址一些外部可达的IP地址,把外部的包转换为一个内向的IP广播包,向一个计算机子网发送。这些IP广播包应该删除,因为会造成拒绝服务攻击(例如 smurf)。
-PB:结合-PT和-PI功能,这是默认的ping扫描选项。它使用ACK(-PT)和ICMP(-PI)两种扫描类型并行扫描。如果防火墙能够过滤其中一种包,使用这种方法,你就能够穿过防火墙。
-O:Nmap扫描TCP/IP指纹特征,确定目标主机系统类型。
-I:反向标志扫描,扫描监听端口的用户
-f:分片发送SYN、FIN、Xmas、和Null扫描的数据包
-v:冗余模式扫描,可以得到扫描详细信息
-oN: 扫描结果重定向到文件
-resume:使被中断的扫描可以继续
-iL:-iL,扫描目录文件列表
-p:-p 指定端口或扫描端口列表及范围,默认扫描1-1024端口和/usr/share/nmap/nmap-services文件中指定端口。-p例:23;20-30,139,60000-这个选项让你选择要进行扫描的端口号的范围。例如,-p 23表示:只扫描目标主机的23号端口。-p 20-30,139,60000-表示:扫描20到30号端口,139号端口以及所有大于60000的端口。
常用命令归纳如下表:
参考:https://www.cnblogs.com/lidong20179210/p/8590463.html
2. 常用扫描命令
- 针对单个ip进行扫描并且扫描默认的一些端口 如:(https)443
命令:
nmap [ip]
结果示例:
135/tcp open msrpc 139/tcp open netbios-ssn 445/tcp open microsoft-ds 3306/tcp open mysql 5357/tcp open wsdapi |
以上命令等价于:
nmap -sS -p [ip]
ps:nmap默认端口扫描方式,执行半开扫描,不完成TCP握手流程。只向目标端口发送一个SYN报文,然后等待响应。可以在基础上添加 -p就可以指定扫描端口,不指定则是默认端口扫描1000个比较常用的端口。
- 全端口快速扫描
nmap -p1-65535 [ip]
ps:当出现Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
则使用-Pn跳过ping探测,直接扫描
Nmap -Pn -p1-65535 [ip]
- -sn表示进行主机发现扫描(ping扫描),不进行端口扫描;
nmap -sn [ip]
等效于:
nmap -sP [ip]
Host is up表示目标主机在线,
- 扫描文件中所有ip
nmap -p1-65535 -iL test.txt
- 快速扫描
nmap -T4 -F test.txt
-F:快速扫描,扫描端口有限,100个端口。
-T4: 设置时间模块,针对TCP端口禁止动态扫描延迟超过10ms
- 版本侦测
nmap -sV --version-intensity 7 [ip]
参数 -sV 进行版本扫描,可以探测到目标主机上2222端口运行的是SSH服务
--version-intensity <level>: 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。
--version-light: 指定使用轻量侦测方式 (intensity 2)
--version-all: 尝试使用所有的probes进行侦测 (intensity 9)
--version-trace: 显示出详细的版本侦测过程信息
- 其他高阶用法:
(1)--script=<Lua scripts>: <Lua scripts>使用某个或某类脚本进行扫描,支持通配符描述.
nmap -sV -F --script=vuln [ip]
Nmap有一个NSE脚本库,脚本默认存放在下图目录下
nmap脚本主要分为以下几类,在扫描时可根据需要设置--script=类别这种方式进行比较笼统的扫描:
auth: 负责处理鉴权证书(绕开鉴权)的脚本
broadcast: 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务
brute: 提供暴力破解方式,针对常见的应用如http/snmp等
default: 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力
discovery: 对网络进行更多的信息,如SMB枚举、SNMP查询等
dos: 用于进行拒绝服务攻击
exploit: 利用已知的漏洞入侵系统
external: 利用第三方的数据库或资源,例如进行whois解析
fuzzer: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞 intrusive: 入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
malware: 探测目标机是否感染了病毒、开启了后门等信息
safe: 此类与intrusive相反,属于安全性脚本
version: 负责增强服务与版本扫描(Version Detection)功能的脚本
vuln: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067
(2)大量IP端口扫描:
快速批量扫描ip.txt中的地址,返回服务版本,SYN扫描,不需要ping,只查询开放的端口。
命令:
Nmap -sV -sS -Pn --open -p1-65535 -iL ip.txt -oA res.xml
大规模扫描场景,需要进行并行扫描,使用参数的相关参数:
选项 | 解释 |
--min-hostgroup | 并行扫描最小数量,扫描数量不会小于这个数 |
--max-hostgroup | 并行扫描最大数量,扫描数量不会大于这个数 |
--min-parallelism | 调整探测报文的并行度 |
--max-parallelism | 调整探测报文的并行度 |
--min-rtt-timeout | 调整探测报文超时 |
--max-rtt-timeout | 调整探测报文超时 |
--initial-rtt-timeout | 调整探测报文超时 |
--host-timeout | 放弃低速目标主机 |
--scan-delay | 调整探测报文的时间间隔 |
--max-scan-delay | 调整探测报文的时间间隔 |
命令:
nmap –sV –sS –Pn –min-parallelism 1024 --host-timeout 180000 --min-hostgroup 30 -iL ip.txt -oX result.xml
nmap -sS -Pn -p 80 -n --open --min-hostgroup 1024 --min-parallelism 10 --host-timeout 30 -T4 -v -oG results-all.txt -iL ipduan.txt
-oG:输出为比较人性化的格式,一条记录一行,后期好处理
参考:https://zhuanlan.zhihu.com/p/322254897
1.3.3扫描结果分析
端口扫描返回结果:
PORT | STATE | SERVICE | VERSION |
80/tcp | open | http | Apache httpd |
443/tcp | open | ssl/http | Apache httpd |
Nmap扫描端口状态及描述如下:
端口状态 | 描述 |
open | 目标端口开启,意味着目标机器上的应用程序正在该端口监听连接/报文。 |
closed | 目标端口关闭。 |
filtered | 通常被防火墙拦截或过滤器或者其它网络障碍阻止了该端口被访问,无法判断目标端口开启与否。 |
unfiltered | 目标端口可以访问,但无法判断开启与否。 |
open | filtered | 无法确定端口是开启还是filtered。 |
closed | filtered | 无法确定端口是关闭还是filtered。 |
SERVICE和VERSION:分别表示该端口运行的服务以及服务产品版本。
如果使用了—script脚本库扫描,则端口状态信息下面会显示该端口存在哪些漏洞或脚本执行的结果:
Nmap -sS –script=vuln www.xxx.com
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)