本博客严重参考 Nmap使用指南1.0:

https://github.com/scanfsec/penetration/blob/master/Nmap%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%971.0(%E4%B8%AA%E4%BA%BA%E7%B2%BE%E5%BF%83%E6%95%B4%E7%90%86).pdf

自己之前零星学习的各类知识点,在这个暑假想要将其系统地串在一起,形成自己学习的体系,一起来看各类文档学习趴

关于Nmap安装方式网上多如牛毛,在此不再赘述,请往下看。

Nmap (Network Mapper 网络映射器)

端口扫描基础

虽然Nmap这些年的功能越来越多,它也是从一个高效的端口扫描器开始的,并且那仍然是它的核心功能。

nmap target 扫描目标主机上超过1660个TCP端口

Nmap把端口分为六个状态:

  • open 开放的

  • closed 关闭的

  • filtered 被过滤的

  • unfiltered 未被过滤的

  • open | filtered 开放或者被过滤的

  • closed | filtered 关闭或者被过滤的

这些状态描述Nmap怎么看待它们

每个开放的端口都是攻击的入口

Nmap指令语法

nmap [<扫描类型> ... ] [<选项>] { <扫描目标说明>}

端口扫描技术

作为一个修车新手,我可能折腾几个小时来摸索怎样把基本工具(锤子,胶带,扳子等) 用于手头的任务。当我惨痛地失败,把我的老爷车拖到一个真正的技师那儿的时候 ,他总是在他的工具箱里翻来翻去,直到拽出一个完美的工具然后似乎不费吹灰之力搞定它。 端口扫描的艺术和这个类似。专家理解成打的扫描技术,选择最适合的一种 (或者组合)来完成给定的 任务。 另一方面,没有经验的用户和刚入门者总是用默认的SYN扫描解决每个问题。 既然Nmap是免费的,掌握端口扫描的唯一障碍就是知识。这当然是汽车世界所不能比的, 在那里,可能需要高超的技巧才能确定您需要一个压杆弹簧压缩机,接着您还得为它付数千美金。

Nmap支持的扫描类型大概有十几种,一般一次只使用一种,不过UDP扫描(-sU)可以和任何一种TCP扫描类型结合使用

端口扫描类型的选项格式是-s<C>,<C>通常是扫描类型的首字母

操作系统非特权用户仅能执行connect()和ftp bounce()扫描

部分扫描选项
  • -sS (TCP SYN 扫描/半开扫描)

    SYN扫描是默认的也是最受欢迎的扫描选项,优点:执行速度快,扫描痕迹浅,从来不打开一个完整的TCP连接,不依赖于任何的特定平台。

  • -sT (TCP connect()扫描)

    当SYN扫描不能用时,TCP connect()扫描就是默认的TCP扫描

    相对与SYN扫描的缺点:

    connect()扫描效率较低,因为它需要建立完整的TCP连接

    connect()扫描容易在目标机上留下记录,许多普通的UNIX系统上的服务会在syslog留下记录

  • -sU (UDP扫描)

    互联网基于UDP的服务也不少,最常见的如:DNS,SNMP,DHCP,注册端口分别为53,161/162,67/68

    UDP扫描一般比较慢,比TCP要困难

    UDP扫描可以与各种TCP扫描结合使用而同时检查两种协议

    注意:慎用UDP扫描,因为它的扫描速度受到操作系统的限制非常低,如果确实要使用可以采用优先扫描主要端口,并发扫描更多主机,从防火墙后面扫描,使用--host--timeout来跳过慢速主机等手段

  • -sN -sF -sX (TCP Null,Fin,Xmas扫描)

    这三种扫描方法利用了TCP RFC钟发掘出的一个微妙的方法来区分Open和Closed端口

    如果扫描目标系统遵循RFC793,则当端口关闭时,任何不包含SYN,RST,ACK位的报文都会导致一个RST返回,而当端口开放时,应当没有任何响应

    优势:

    能够躲过一些无状态防火墙和报文过滤路由器,甚至比SYN扫描还要隐蔽一些,但是现代的IDS产品可以发现他们

    不足:

    并非所有的系统都严格遵循RFC793,许多系统端口不管是开放还是关闭的都响应RST,结果导致所有的端口都标记为Closed

    它们不能辨别Open端口和一些特定的Filtered端口,从而返回相关信息

  • -sA (TCP ACK扫描)

    目的:

    发现防火墙规则,确定它们是有状态的还是无状态的,哪些端口是被过滤的

    不足:

    无法确定Open或者Open|Filtered端口

  • -sW(TCP窗口扫描)

    与ACK扫描的唯一区别在于它利用了特定系统的实现细节来区分端口是Open还是Closed,而不是全部打印成Unfiltered

    不足:

    不支持它的系统通常返回所有端口都是Closed

高级扫描方式
  • -sM (TCP Maimon扫描)

    这个扫描技术除了探测报文采用FIN/ACK之外与Null,FIN,Xmas扫描完全一样

  • --scanflags (定制的TCP扫描)

    这是真正的Nmap高手使用的,不受这些现成的扫描类型束缚,可以定义任意TCP标志位来设计自己的扫描

  • -sl (ldel扫描)

    这种高级扫描方法允许进行真正的TCP端口盲扫描,由于它不适用真实IP进行扫描,所以它是一种极端隐蔽的扫描方法

  • -sO(IP协议扫描)

    从技术上讲,这不是端口扫描

    用于确认目标机器支持哪些IP协议

  • -b (FTP弹跳扫描)

    通过FTP服务器做代理对其他目标主机进行扫描的技术,这是绕过防火墙的好方法,其实这算是服务器的一个弱点,当前大部分的服务器都被修补了,本弱点利用就困难了,不过可以使用这个选项来判断服务器是否脆弱

端口说明和扫描顺序

默认情况下,Nmap用指定的协议对端口1-1024以及nmap-services文件中列出的更高的端口进行扫描

  • -p <port range>(只扫描指定的端口)

    port range 使用单个端口和用连字符表示的端口范围都可以

    可以通过再端口号上添加T: 或者U: 指定协议

    例如: -p U:53,111,137,T:21-25,80,139,8080

  • -F (快速(有限的端口)扫描):

    在Nmap的nmap-services文件中指定想要扫描的端口,这个列表中包含1200多TCP端口,比扫描所有的65535个端口要快得多

    如果使用--datadir选项指定自己的小小的nmap-services文件,则差别会很惊人了。

  • -r(不要按随机顺序扫描端口):

    默认情况下,Nmap按随机顺序扫描端口(除了处于效率的考虑部分端口前移),这种随机化通常是不错的,但是我们可以指定-r来进行顺序端口扫描

Nmap的扩展功能

服务版本探测

人们完全可以在一些奇怪的端口上运行服务

知道正在运行什么邮件和域名服务器以及它们的版本,有一个精确的版本号对了解服务器有什么漏洞有巨大帮助

nmap-service-probes数据库包含查询不同服务的探测报文和解析识别相应的匹配表达式。

  • -sV (版本探测)

    打开版本探测,也可以使用-A同时打开操作系统探测和版本探测

    • --allports(不为版本探测排除任何端口)

      指定--allports扫描所有端口

    • --version-intensity <intensity> (设置版本扫描强度)

      当进行版本扫描时,nmap发送一系列探测报文,每个报文都被赋予一个1到9之间的值,被赋予较低值的探测报文对大范围的常见服务有效,而被赋予较高值的报文一般没什么用。

      强度水平说明应该使用哪些探测报文,数值越高,服务越有可能被正确识别,当然,高强度扫描花更多的时间,强度值在0到9之间,默认是7

    • --version-light (打开轻量级模式)

      这是--version-intensity 2 的一个别名,这使得版本扫描快很多,但他识别服务的可能性也相对较小一些

    • --version-all (尝试每个探测)

      这是--version-intensity 9 的一个别名,保证对每个端口尝试每个测试报文

    • --version-trace (跟踪版本扫描活动)

      是会让Nmap打印出详细的关于正在运行的扫描的调试信息,它是使用--packet-trace所得到的信息的子集

  • -sR (RPC扫描)

    这种方法和许多端口扫描方法联合使用,对所有被发现开放的TCP/UDP端口执行SunRPC程序NULL命令,来试图确定它们是否为RPC端口,如果是,是什么程序和版本号。这作为版本扫描(-sV)的一部分自动打开。由于版本探测包括它并且全面的多,所以-sR很少被用到。

操作系统探测

Nmap最著名的功能之一就是用TCP/IP协议栈fingerprinting进行远程操作系统探测

Nmap发送一系列TCP和UDP报文到远程主机,检查响应中的每一个比特,再进行一打测试之后,Nmap把结果和数据库nmap-os-fingerprints中超过1500个已知的操作系统的fingerprints进行比较,如果有匹配,就打印出操作系统的详细信息。

  • -O (启用操作系统探测)

    也可以使用-A来同时启用操作系统和版本探测

    • --osscan-limit(针对指定的目标进行操作系统检测)

      采用这个选项,Nmap只对满足这个条件的主机进行操作系统检测,这样可以节约时间

    • --osscan-guess; --fuzzy(推测操作系统检测结果)

      当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认进行这种匹配,使用上述任一个选项使得Nmap的推测更加有效

其他选项
  • -6 (启用IPv6扫描)

    ping扫描(TCP-only),连接扫描以及版本检测都支持IPv6,除了增加-6选项之外,其他命令语法相同

  • -A(激烈模式扫描 )

    这个选项启用额外的高级和高强度选项,目前这个选项启用了操作系统探测 -O 和版本扫描 -sV

    该选项的目的是启用一个全面的扫描选项集合,不需要用户记忆大量的选项。

    这个选项仅仅启用功能,不包含可能用到的所有需要的时间选项或者细节选项

  • -V;--version (打印版本信息)

    打印Nmap版本号并退出

  • -h;--help (打印帮助摘要)

    打印一个短的帮助屏幕,列出大部分常用的命令选项,这个功能和不带参数运行Nmap是相同的。

Nmap学习使用指南的更多相关文章

  1. 读书笔记——商广明《Nmap渗透测试指南》

    一 Nmap基础学习 1.简介及安装 Nmap是一款由C语言编写的.开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具.软件名字Nmap是Ne ...

  2. 不老的神器:安全扫描器Nmap渗透使用指南【转】

    介绍 nmap是用来探测计算机网络上的主机和服务的一种安全扫描器.为了绘制网络拓扑图Nmap的发送特制的数据包到目标主机然后对返回数据包进行分析.Nmap是一款枚举和测试网络的强大工具. 特点 主机探 ...

  3. C,C++网络编程学习简明指南

    C,C++网络编程学习简明指南 1. 扎实的C,C++基础知识 参考资料<C程序设计>,<C++ primer>. 2. TCP/IP协议 经典书是:W.Richard Ste ...

  4. Linux学习路线指南

    转载的,感觉写的挺好的,我自己知识复制了下,忘记了转载地址,抱歉! Linux学习路线指南 很多同学接触Linux不多,对Linux平台的开发更是一无所知.而现在的趋势越来越表明,作为一个优秀的软件开 ...

  5. 2019年Unity学习资源指南[精心整理]

    前言 进入一个领域,最直接有效的方法就是,寻找相关综述性文章,首先你需要对你入门的领域有个概括性的了解,这些包括: 1.主流的学习社区与网站. 2.该领域的知名大牛与热心分享的从业者. 3.如何有效的 ...

  6. C# BS方向 该如何规划学习?【学习路线指南】

    C#学习路线指南 花费了几天时间整理了C#学习路线图,可以说是纯野生C#程序员成长路线规划,在这里分享下,希望可以帮助到想从事C#开发的同学们.本人阅历尚浅,有些知识点可能分享不正确,希望广大网友评论 ...

  7. Python 迁移学习实用指南 | iBooker·ApacheCN

    原文:Hands-On Transfer Learning with Python 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则& ...

  8. Web安全学习笔记之Nmap命令参考指南

    最近研究Nmap,命令太多,详细还是需要参考官方文档(可选中文) 本文转载 在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型.物理端口指的是物理存在的端口,如ADSL Modem.集线器. ...

  9. Web安全学习笔记之Nmap脚本使用指南

    nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端.确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统.它是网络管理员必用的软件之一,以及用以评估网络系统安全. —— 来自百 ...

随机推荐

  1. layui下拉框后台动态赋值

    前台页面: <select name="xm" id="xm" lay-verify="required" lay-filter=&q ...

  2. 安装使用Pycharm及Anaconda最全教程

    网上安装anaconda和pycharm的教程很多,然而很少有人能够很详细地讲解,特别是对于pycharm的虚拟环境相关的说明很少,我也是懵逼的用了两年多,经常发现之前pycharm安装的第三方库,明 ...

  3. 2012年游戏软件开发独立本科段01B0815自考科目教材

    代码-----------教材名----------------------------版本----------作者 03708--------中国近现代史纲要----------------高教08 ...

  4. Redis 数据结构之字符串的那些骚操作

    Redis 字符串底层用的是 sds 结构,该结构同 c 语言的字符串相比,其优点是可以节省内存分配的次数,还可以... 这样写是不是读起来很无聊?这些都是别人咀嚼过后,经过一轮两轮三轮的再次咀嚼,吐 ...

  5. nagle 算法 tcp nodelay 以及 quick ack分析

    后面详细分析 先上传 之前总结查看源码后的总结 Nagle算法的基本定义是任意时刻,最多只能有一个未被确认的小段.所谓"小段",指的是小于MSS尺寸的数据块,所谓"未被确 ...

  6. binary hacks读数笔记(file命令与magic file)

    file命令的作用是用于检验文件的类型,并打印至终端.file命令检验文件类型按以下顺序来完成: 检验文件系统(Filesystem)中支持的文件类型. 检验magic file规则. 检验文件内容的 ...

  7. vmlinux, Image ,zImage,uImage

    kernel 源码编译生成 vmlinx,vmlinux 是 elf 文件,对 vmlinux 使用 objcopy 得到 Image,Image 是纯粹的二进制文件,vmlinux 只能在OS环境下 ...

  8. spring mvc 基础知识

    spring mvc 在web.xml中的配置: 例子: <?xml version="1.0" encoding="UTF-8"?> <we ...

  9. 检查linux下服务器的带宽

    设想:公司 A 有一个名为 bsdocfs 的存储服务器,并通过名为 beckham 的客户端节点装载 NFS.公司 A 确定他们需要从 bsdocfs得到更多的带宽,因为有大量的节点需要访问 bsd ...

  10. 没找到Wkhtmltopdf,报表会被显示为html

    windows10 odoo 打印报表时提示 没找到Wkhtmltopdf,报表会被显示为html 现象 原因 没有安装Wkhtmltopdf,没有配置环境变量,odoo在电脑系统中找不到Wkhtml ...