前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nmap学习

Nmap学习

作者头像
黑白天安全
发布2020-04-28 17:40:01
1.7K0
发布2020-04-28 17:40:01
举报

Nmap介绍: Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具。软件名字Nmap是Network Mapper的简称。Nmap最初是由Fyodor在1997年开始创建的。随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一。官网为:https://nmap.org/ 。

nmap的优点:

  • 支持扫描的方式多种多样,而且支持多种扫描目标对象
  • 开源、跨平台,方便移植。支持主流操作系统Linux、windows、Unix、MacOs
  • Nmap背后有着强大的社区团队,可以对Nmap进行版本的更新
  • 拥有命令行和图形化界面,可以自己选择使用图形化或者是命令行。图形化Nmap叫做Zenmap Nmap四种基本功能:
  • 主机发现 (Host Discovery)
  • 端口扫描 (Port Scanning)
  • 版本侦测 (Version Detection)
  • 操作系统侦测 (Operating System Detection) 这四项功能之间既相互依赖又相互独立。首先需要进行主机发现,随后确定端口状况、确定端口上运行具体的应用程序与版本信息,然后可以进行操作系统的侦擦。nmap除了这些之外,还提供了防火墙与入侵检测(IPS / IDS)的规避技巧。除此之外Nmap还有强大的脚本引擎(Nmap Scripting Language,NSE)功能。可以说脚本功能用的好,Nmap厉害之处就可以显现出来了。

安装配置Nmap:

  • windows下安装比较简单,在官网https://nmap.org/ 上下载对应的windows版本安装即可
  • Linux下安装
    • 基于yum安装:yum install nmap
    • 基于apt安装 :apt-get install nmap
    • 基于rpm安装 :自己官网找吧!
    • 默认kali、parrot是默认安装

Nmap参数介绍:

主机发现 主机发现(Host Discovery),即用于发现目标主机是否在线(Alive,处于开启状态)。 主机=发现的原理与Ping命令类似,发送探测包到目标主机,如果收到回复,那么说明目标主机是开启的。Nmap支持十多种不同的主机探测方式,比如发送ICMP ECHO/TIMESTAMP/NETMASK报文、发送TCPSYN/ACK包、发送SCTP INIT/COOKIE-ECHO包,用户可以在不同的条件下灵活选用不同的方式来探测目标机。 Nmap的用户位于源端,IP地址192.168.1.108,向目标主机192.168.1.106发送ICMP Echo Request。如果该请求报文没有被防火墙拦截掉,那么目标机会回复ICMP Echo Reply包回来。以此来确定目标主机是否在线。 默认情况下,Nmap会发送四种不同类型的数据包来探测目标主机是否在线。

代码语言:javascript
复制
-sL                                   List Scan.简单的列表扫描,仅仅是显示,扫描的IP数目,不会进行任何扫描
-sn                                   ping扫描,用于发现主机列表
-Pn                                   不进行ping扫描,在线处理所有所有主机不检测主机存活。
-PS/PA/PU/PY[portlist]                TCP SYN Ping/TCP ACK Ping/UDP Ping发现
-PE/PP/PM                             使用ICMP echo, timestamp and netmask 请求包发现主机
-PO[prococol list]                    使用IP协议包探测对方主机是否开启
-n/-R                                 不对IP进行域名反向解析/为所有的IP都进行域名的反响解析
--dns-servers <serv1[,serv2],...>     指定DNS服务器
--traceroute              追踪每个路由节点

主机发现参数实验

  • -sn在局域网内Nmap是通过ARP包来询问IP地址上的主机是否是处于活动状态,如果收到ARP回复包则说明主机在线 nmap -sn 192.168.1.0/24

在探测外网IP的时候,使用ICMP Echo包探测。如果收到对方的回复包则代表对方存活

  • -PE参数使用的是ICMP Echo来探测,一些防火墙会禁止这些数据包的。这个参数的缩写就是Ping Echo吧哈哈哈
  • -PP参数:nmap发送ICMP timestamp报文,活跃主机会响应该报文,响应报文中包含当前系统时间。该请求ICMP type值13。
  • -PM参数:nmap发送ICMP netmask报文,活跃主机会响应该报文,响应报文中包含当前地址掩码。该请求ICMP type值17。ICMP address maskPing地址掩码扫描会试图用备选的ICMP等级Ping指定主机,通常有不错的穿透防火墙的效果

端口扫描

端口扫描是Nmap最基本最核心的功能,用于确定目标主机的TCP/UDP端口的开放情况。 默认情况下,Nmap会扫描1000个最有可能开放的TCP端口。 Nmap通过探测将端口划分为6个状态:

  • open:端口是开放的。
  • closed:端口是关闭的。
  • filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
  • unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
  • open|filtered:端口是开放的或被屏蔽。
  • closed|filtered :端口是关闭的或被屏蔽 -sT TCP connect()扫描,这种扫描会给对方留下扫描日志,动静太大了! -sS TCP SYN扫描(半开扫描),执行速度快,在没有入侵防火墙的网络上可以快速扫描数千个端口 -sA/sW/sM ACK/TCP窗口扫描/TCP Maimon扫描 -sU UDP扫描 -sN/sF/sX TCP NullFINand Xmas扫描 --scanflags 自定义TCP包中的flags -sI zombie host[:probeport] Idlescan -sY/sZ SCTP INIT/COOKIE-ECHO 扫描 -sO 使用IP protocol 扫描确定目标机支持的协议类型 -b “FTP relay host” 使用FTP bounce scan

-sS(TCP SYN 扫描) 这个是Nmap默认的扫描方式,也是最受欢迎的一个参数,该方式接收到SYN到目标端口,如果收到SYN/ACK回复的话则表明该端口处于开发状态;如果收到RST包的话说明该端口是关闭状态;如果没有收到回复的话说明该端口可能被屏蔽了。该方法不建立完整的TCP连接,相对隐蔽,效率高

这里从返回结果可以看到443端口处于开发状态,这里数据包就抓取到了SYN/ACK返回包

但是如果没有收到回复的话,就可以判断为是处于过滤状态。有去无回,这样就不能判断端口是处于开放还是关闭状态

如果对方端口返回RST包的话就是关闭状态了!

-sU(UDP 扫描) UDP扫描用于判断UDP端口的情况,向目标主机的UDP端口发送探测包,如果收到回复ICMP port unreachable就说明该端口是关闭的;如果没有收到回复,那说明该UDP端口可能是开放的或者屏蔽的。因此,通过反向排除法的方式来判断哪些UDP端口是可能处于开放状态的。

指定端口和扫描顺序

代码语言:javascript
复制
-p                      特定的端口 -p80,443 或者 -p1-65535
-p U:PORT               扫描udp的某个端口, -p U:53
-F                      快速扫描模式,比默认的扫描端口还少
-r                      不随机扫描端口,默认是随机扫描的
--top-ports "number"    扫描开放概率最高的number个端口,出现的概率需要参考nmap-services文件,ubuntu中该文件位于/usr/share/nmap.nmap默认扫前1000个
--port-ratio "ratio"    扫描指定频率以上的端口

服务版本识别

代码语言:javascript
复制
-sV                             开放版本探测,可以直接使用-A同时打开操作系统探测和版本探测
--version-intensity "level"     设置版本扫描强度,强度水平说明了应该使用哪些探测报文。数值越高服务越有可能被正确识别。默认是7
--version-light                 打开轻量级模式,为--version-intensity 2的别名
--version-all                   尝试所有探测,为--version-intensity 9的别名
--version-trace                 显示出详细的版本侦测过程信息

OS识别

代码语言:javascript
复制
-O              启用操作系统检测,-A来同时启用操作系统检测和版本检测
--osscan-limit  针对指定的目标进行操作系统检测(至少需确知该主机分别有一个open和closed的端口)
--osscan-guess  推测操作系统检测结果,当Nmap无法确定所检测的操作系统时会尽可能地提供最相近的匹配Nmap默认进行这种匹配

防火墙/IDS躲避和哄骗

代码语言:javascript
复制
-f; --mtu value                 指定使用分片、指定数据包的MTU.
-D decoy1,decoy2,ME             使用诱饵隐蔽扫描
-S IP-ADDRESS                   源地址欺骗
-e interface                    使用指定的接口
-g/ --source-port PROTNUM       使用指定源端口
--proxies url1,[url2],...       使用HTTP或者SOCKS4的代理

--data-length NUM               填充随机数据让数据包长度达到NUM
--ip-options OPTIONS            使用指定的IP选项来发送数据包
--ttl VALUE                     设置IP time-to-live域
--spoof-mac ADDR/PREFIX/VEBDOR  MAC地址伪装
--badsum                        使用错误的checksum来发送数据包

NSE脚本引擎

NSE脚本引擎(Nmap Scripting Engine)是nmap最强大,最灵活的功能之一,允许用户自己编写脚本来执行自动化的操作或者扩展nmap的功能。 nmap的脚本库的路径: Linux:/usr/share/nmap/scripts 或 /xx/nmap/scripts/ ,该目录下的文件都是nse脚本 windows:在你nmap文件夹的script目录中 NSE使用Lua脚本语言,并且默认提供了丰富的脚本库,目前已经包含了14个类别的350多个脚本。NSE的设计初衷主要考虑以下几个方面

  • 网络发现(Network Discovery)
  • 更加复杂的版本侦测(例如 skype 软件)
  • 漏洞侦测(Vulnerability Detection)
  • 后门侦测(Backdoor Detection)
  • 漏洞利用(Vulnerability Exploitation) Nmap脚本支持的类型
  • 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 nmap官方脚本文档: https://nmap.org/nsedoc/
脚本常用实例

扫描服务器的常见漏洞

代码语言:javascript
复制
nmap --script=vuln 192.168.8.135

默认脚本扫描

代码语言:javascript
复制
nmap --script=default 192.168.8.135 或者 nmap -sC 192.168.8.135

利用DNS进行子域名暴力破解

代码语言:javascript
复制
 nmap --script=dns-brute www.freebuf.com

暴力破解mssql数据库

代码语言:javascript
复制
nmap -p 1433 --script ms-sql-brute --script-args userdb=E://pass//user.txt,passdb=E://pass//pass.txt 192.168.1.109

检测单个漏洞

代码语言:javascript
复制
nmap --script smb-vuln-ms17-010  192.168.1.109
操作实例

普通单个目标扫描

代码语言:javascript
复制
nmap 192.168.1.106

多个目标扫描

代码语言:javascript
复制
nmap 192.168.1.106 192.168.1.108

指定端口扫描

代码语言:javascript
复制
nmap -p 80,3389,443,445,22,21 192.168.1.106

扫描一个子网,并且排除某个主机

代码语言:javascript
复制
nmap 192.168.1.0/24 -exclude 192.168.1.108

类ping扫描

代码语言:javascript
复制
nmap -sP 192.168.1.1-255

版本检测 本检测是用来扫描目标主机和端口上运行的软件的版本.它不同于其它的扫描技术它不是用来扫描目标主机上开放的端口不过它需要从开放的端口获取信息来判断软件的版本.使用版本检测扫描之前需要先用TCPSYN扫描开放了哪些端口。

代码语言:javascript
复制
nmap -sV 192.168.1.106

操作系统扫描 远程检测操作系统和软件Nmap的OS检测技术在渗透测试中用来了解远程主机的操作系统和软件是非常有用的通过获取的信息你可以知道已知的漏洞。Nmap有一个名为的nmap-OS-DB数据库该数据库包含超过2600操作系统的信息。Nmap把TCP和UDP数据包发送到目标机器上然后检查结果和数据库对照。

代码语言:javascript
复制
nmap -sO 192.168.1.106

具有OS和版本检测的扫描-A

代码语言:javascript
复制
nmap -A192.168.1.106

详细描述输出扫描 扫描的过程很无聊,这个参数是可以在扫描过程中显示扫描的结果,刷刷刷。-v和-vv扫描几乎是一样都都是列出了详细的扫描过程。

Zenmap的使用

Zenmap提供了10个模板,分别是:

  • Intense scan :nmap -T4 -A -v 192.168.0.0/24
    • 该选项扫描速度最快,可以检测操作系统和版本
  • Intense scan plus UDP :nmap -sS -sU -T4 -A -v 192.168.0.0/24
    • UDP扫描
  • Intense scan,all TCP ports :nmap -p 1-65536 -T4 -A -v 192.168.0.0/24
    • 对目标所有端口进行扫描,速度比较慢。
  • Intense scan,no ping :nmap -T4 -A -v -Pn 192.168.0.0/24
    • 不进行PING扫描
  • Ping scan :nmap -sn 192.168.0.0/24
    • PING扫描,速度快,容易被防火墙屏蔽,导致无扫描结果
  • Quick scan :nmap -T4 -F 192.168.0.0/24
    • 快速的扫描
  • Quick scan plus :nmap -sV -T4 -O -F --version-light 192.168.0.0/24
    • 快速加强模式
  • Quick traceroute :nmap -sn --traceroute 192.168.0.0/24
    • 路由追踪
  • Regular scan nmap 192.168.0.0/24
    • 普通扫描
  • Slow comprehensive scan : nmap -sS -sU -T4 -A -v -PE -PP -PS80,443,-PA3389,PU40125 -PY -g 53 --script (default or discovery and safe) 192.168.0.0/24
    • 慢速全面扫描

查看拓扑可以看到路由追踪的效果

点击端口/主机可以查看获取的端口信息和服务信息

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑白天实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Nmap参数介绍:
  • 端口扫描
  • 指定端口和扫描顺序
  • 服务版本识别
  • OS识别
  • 防火墙/IDS躲避和哄骗
  • NSE脚本引擎
    • 脚本常用实例
      • 操作实例
      • Zenmap的使用
      相关产品与服务
      主机安全
      主机安全(Cloud Workload Protection,CWP)基于腾讯安全积累的海量威胁数据,利用机器学习为用户提供资产管理、木马文件查杀、黑客入侵防御、漏洞风险预警及安全基线等安全防护服务,帮助企业构建服务器安全防护体系。现支持用户非腾讯云服务器统一进行安全防护,轻松共享腾讯云端安全情报,让私有数据中心拥有云上同等级别的安全体验。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档