TCP空闲扫描

这种先进的扫描方法允许对目标进行一个真正的盲目TCP端口扫描(即没有数据包从你的真实IP地址发送到目标)。相反独特的侧信道攻击利用僵尸主机上可预测的IP分段ID序列生成来收集关于目标的开放端口的信息。IDS系统只会显示扫描是从您指定的僵尸机发起。这在进行MITM(中间人攻击)非常有用的。

nmap -sI zombie 目标               #选项-sL将显示一个列表,并执行指定的IP地址反向DNS查找。

这里简单介绍下空闲的原理:

1、向僵尸主机发送SYN/ACK数据包,获得带有分片ID(IPID)的RST报文。 

2、发送使用僵尸主机IP地址的伪数据包给目标主机。 如果目标主机端口关闭,就会向僵尸主机响应RST报文。如果目标端口开放,目标主机向僵尸主机响应SYN/ACK报文,僵尸主机发现这个非法连接响应,并向目标主机发送RST报文,此时IPID号开始增长。 

3、通过向僵尸主机发送另一个SYN/ACK报文以退出上述循环并检查僵尸主机RST报文中的IPID是否每次增长2,同时目标主机的RST每次增长1。 重复上述步骤直到检测完所有的端口。

接下来是进行空闲扫描的步骤:
1、寻找合适的僵尸主机

一个常见的方法就是在NMAP下执行Ping扫描一些网络。你可以选择NMAP提供的随机IP选项(-iR),但是这很有可能造成与Zombie主机之间的大量延迟。

在Zombie主机候选列表中执行一个端口扫描以及操作系统识别(-o)比简单的使用Ping命令筛选更容易找寻到合适的。只要启动了详细模式(-v),操作系统检测通常会确定IP ID增长方法,然后返回“IP ID Sequence Generation: Incremental”。如果这个类型被作为增长或是破损的低字节序增长量,那么该机是不错的僵尸主机备选。

还有一种方法是对运行ipidseq NSE脚本。该脚本探测一台主机的IP ID生成方法并进行分类,然后就像操作系统检测一样输出IP ID分级。

NMAP --script ipidseq [ --script-args probeport=port] 目标

我们也可以使用hping用于发现僵尸主机。

首先选择使用Hping3发送数据包,并观察ID号是不是逐一增加,那么该主机就是空闲的。如果ID号随意增加,那么主机实际上不是空闲的,或者主机的操作系统没有可预测的IP ID。

hping3 -s 目标

发送伪造SYN包到你指定的目标主机上的端口。

hping3 -spoof 僵尸主机 -S p 22 目标

正如你所看到的,没有任何反应,这表明数据包100%的丢失。这意味着我们并没有发现僵尸主机。同时我们将检查确认以下的步骤。

hping3 -S 目标                #检查PID值是否逐一增加

2、使用NMAP进行攻击

NMAP -Pn -p- -sI 僵尸主机 目标

首先我们用NMAP扫描僵尸主机的端口:

发现僵尸主机22端口是关闭着的。

我们指定利用僵尸主机的22端口进行空闲扫描,结果显而易见,无法攻击目标。

默认情况下,NMAP的伪造探针使用僵尸主机的80端口作为源端口。您可以通过附加一个冒号和端口号僵尸名选择一个不同的端口(例如www.baidu.com:90)。所选择的端口必须不能被攻击者或目标过滤。僵尸主机的SYN扫描会显示端口的开放状态。

这里解释下参数的含义:

-Pn:防止NMAP的发送初始数据包到目标机器。

-p-:将扫描所有65535个端口。

-sI:用于闲置扫描和发送数据包欺骗。

TCP空闲扫描

作为一个渗透测试人员,我们必须明白nmap TCP空闲扫描的内部运行原理,然后用我们自己的方法来实现同样的事情。为此,我们将使用NMAP的数据包跟踪选项。

nmap -sI 僵尸主机:113 -Pn -p20-80,110-180 -r - packet-trace -v 目标                #-Pn是隐身的必要,否则ping数据包会用攻击者的真实地址发送到目标。未指定-sV选项是因为服务识别也将暴露真实地址。 -r选项(关闭端口随机化)让这个例子运行起来更简单。

nmap首先通过发送6个 SYN / ACK数据包并分析响应,测试僵尸主机的IP ID序列生成。在这里R表示复位包,意味该端口不可达。

正如我之前说的,成功的攻击需要选择一个合适的僵尸主机端口。

TCP空闲扫描原理:

众所周知,空闲扫描允许完全盲端口扫描。 攻击者实际上可以扫描目标,而无需从自己的IP地址向目标发送单个数据包! 取而代之的是,旁道攻击可以使扫描从无辜的“僵尸主机”反弹。 入侵检测系统(IDS)的报告会将无辜的僵尸指为攻击者。 除了非常隐秘之外,此扫描类型还允许发现机器之间基于IP的信任关系。

尽管空闲扫描比到目前为止讨论的任何技术都复杂,但可以归纳出如下基本特点:

  确定TCP端口是否打开的一种方法是将SYN(会话建立)数据包发送到该端口。 如果端口打开,则目标计算机将以SYN / ACK(会话请求确认)数据包进行响应,如果端口是关闭的,则将以RST(重置)数据包进行响应。 这是前面讨论的SYN扫描的基础。

  收到未经请求的SYN / ACK数据包的计算机将以RST响应。 未经请求的RST将被忽略。

  Internet上的每个IP数据包都有一个片段标识号(IP ID)。 由于许多操作系统只是为它们发送的每个数据包增加该数字,因此探测IPID可以告诉攻击者自上次探测以来已发送了多少个数据包。

通过组合这些特征,可以在伪造您的身份的同时扫描目标网络,以使它看起来像是无辜的僵尸机器进行的扫描。

空闲扫描步骤

从根本上说,空闲扫描包括三个步骤,每个端口都重复进行以下操作:

 探测僵尸主机的IP ID并记录下来。

 伪造来自僵尸主机的SYN数据包,并将其发送到目标上的所要探测的端口。 根据端口状态,目标的反应可能会或着不会导致僵尸主机的SYN数据包的IP ID增加。

 再次探测僵尸主机的IP ID。 然后,通过将此新IP ID与步骤1中记录的IP ID进行比较,来确定目标端口状态。

在此过程之后,僵尸主机的IP ID应该增加一到两个。增加1表示僵尸主机除了向攻击者的探测回复外没有发送任何数据包。缺少发送的数据包意味着端口未打开(目标必须向僵尸发送了RST数据包,该数据包被忽略,或者什么都没有发送)。增加两个表示僵尸在两个探测器之间发送了一个数据包。这个额外的数据包通常意味着端口是开放的(目标可能会响应伪造的SYN数据包而向僵尸主机发送SYN / ACK数据包,从而导致了僵尸主机发送了RST数据包)。大于2的增量通常表示恶意僵尸主机。它可能没有可预测的IP ID号,或者可能参与了与空闲扫描无关的通信。

即使已关闭的端口的情况与过滤的端口稍有不同,但攻击者在两种情况下的测量结果相同,即IP ID增加1。因此,空闲扫描无法区分关闭并过滤端口。 Nmap记录IP ID增加1时,表示端口已关闭或者已过滤。

对于那些想要了解更多细节的人,以下三个图准确显示了在打开,关闭和过滤端口的三种情况下发生的情况。

Nmap使用教程(二)的更多相关文章

  1. CRL快速开发框架系列教程二(基于Lambda表达式查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  2. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置

    前言 前文手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置介绍了github注册.git相关设置以及hexo基本操作. 本文主要介绍一下hexo的常用参数设置. ...

  3. C#微信公众号开发系列教程二(新手接入指南)

    http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可 ...

  4. 无废话ExtJs 入门教程二十一[继承:Extend]

    无废话ExtJs 入门教程二十一[继承:Extend] extjs技术交流,欢迎加群(201926085) 在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性.而这些属性可以通过“继承” ...

  5. 无废话ExtJs 入门教程二十[数据交互:AJAX]

    无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...

  6. 无废话ExtJs 入门教程二[Hello World]

    无废话ExtJs 入门教程二[Hello World] extjs技术交流,欢迎加群(201926085) 我们在学校里学习任何一门语言都是从"Hello World"开始,这里我 ...

  7. Android Studio系列教程二--基本设置与运行

    Android Studio系列教程二--基本设置与运行 2014 年 11 月 28 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处! 上面一篇博客,介绍了Studio的 ...

  8. Laravel教程 二:路由,视图,控制器工作流程

    Laravel教程 二:路由,视图,控制器工作流程 此文章为原创文章,未经同意,禁止转载. View Controller 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就 ...

  9. Android高手进阶教程(二十八)之---Android ViewPager控件的使用(基于ViewPager的横向相册)!!!

      分类: Android高手进阶 Android基础教程 2012-09-14 18:10 29759人阅读 评论(35) 收藏 举报 android相册layoutobjectclassloade ...

  10. NGUI系列教程二

    接下来我们创建一个Label,NGUI->Open the Widget Wizard,打开widgetTool对话框,在Template中选择Label,确定AddTo右侧选项为panel,点 ...

随机推荐

  1. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(13)之会员登录注册

    源码下载地址:http://www.yealuo.com/Sccnn/Detail?KeyValue=c891ffae-7441-4afb-9a75-c5fe000e3d1c 会员中心,是我们与用户交 ...

  2. @RequestBody、@ResponseBody注解是如何将输入输出转换成json的

    @RequestBody.@ResponseBody注解,可以直接将输入解析成Json.将输出解析成Json,但HTTP 请求和响应是基于文本的,意味着浏览器和服务器通过交换原始文本进行通信,而这里其 ...

  3. video实现有声音自动播放

    video实现自动播放有声音 需求:老板见人家可以的,我们的也要可以!!! 前端:自动播放,简单... 要实现:鼠标移入视频播放同时有声音,移出让你暂停,,,,, 问题集合 1- 自动播放实现没有声音 ...

  4. 【Linux】一个定时任务小脚本

    需要一个定时任务,每隔固定时间停止,等待几分钟,然后在启动,每5分钟一个循环. 简要写了一下,如下,未来在优化: 3,8,13,18,23,28,33,38,43,48,53,58 * * * * s ...

  5. [Vue源码]一起来学Vue模板编译原理(二)-AST生成Render字符串

    本文我们一起通过学习Vue模板编译原理(二)-AST生成Render字符串来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学V ...

  6. 004 ceph存储池

    介绍:前面已经使用deploy和ansble部署了ceph集群,现在对集群的池进行简单介绍和简单操作 一.部分概念 池是ceph存储集群的逻辑分区,用于存储对象 对象存储到池中时,使用CRUSH规则将 ...

  7. centos服务器cpu百分之百,top查询不到之“-bash”

    把这条注释掉. [root@aaaa ~]# cat /etc/ld.so.preload #/usr/local/lib/libproc.so[root@aaaa ~]# 然后在top

  8. MementoPattern(备忘录模式)-----Java/.Net

    备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象.备忘录模式属于行为型模式.

  9. mumu模拟器手Q自动化配置

    { "platformName": "Android", "platformVersion": "6.0.1", &qu ...

  10. 洛谷P1776 宝物筛选 题解 多重背包

    题目链接:https://www.luogu.com.cn/problem/P1776 题目大意: 这道题目是一道 多重背包 的模板题. 首先告诉你 n 件物品和背包的容量 V ,然后分别告诉你 n ...