Nmap使用教程(二)
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使用教程(二)的更多相关文章
- CRL快速开发框架系列教程二(基于Lambda表达式查询)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置
前言 前文手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置介绍了github注册.git相关设置以及hexo基本操作. 本文主要介绍一下hexo的常用参数设置. ...
- C#微信公众号开发系列教程二(新手接入指南)
http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可 ...
- 无废话ExtJs 入门教程二十一[继承:Extend]
无废话ExtJs 入门教程二十一[继承:Extend] extjs技术交流,欢迎加群(201926085) 在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性.而这些属性可以通过“继承” ...
- 无废话ExtJs 入门教程二十[数据交互:AJAX]
无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...
- 无废话ExtJs 入门教程二[Hello World]
无废话ExtJs 入门教程二[Hello World] extjs技术交流,欢迎加群(201926085) 我们在学校里学习任何一门语言都是从"Hello World"开始,这里我 ...
- Android Studio系列教程二--基本设置与运行
Android Studio系列教程二--基本设置与运行 2014 年 11 月 28 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处! 上面一篇博客,介绍了Studio的 ...
- Laravel教程 二:路由,视图,控制器工作流程
Laravel教程 二:路由,视图,控制器工作流程 此文章为原创文章,未经同意,禁止转载. View Controller 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就 ...
- Android高手进阶教程(二十八)之---Android ViewPager控件的使用(基于ViewPager的横向相册)!!!
分类: Android高手进阶 Android基础教程 2012-09-14 18:10 29759人阅读 评论(35) 收藏 举报 android相册layoutobjectclassloade ...
- NGUI系列教程二
接下来我们创建一个Label,NGUI->Open the Widget Wizard,打开widgetTool对话框,在Template中选择Label,确定AddTo右侧选项为panel,点 ...
随机推荐
- linux 共享队列
一个设备驱动, 在许多情况下, 不需要它自己的工作队列. 如果你只偶尔提交任务给队列, 简单地使用内核提供的共享的, 缺省的队列可能更有效. 如果你使用这个队列, 但是, 你 必须明白你将和别的在共享 ...
- yum安装错误:CRITICAL:yum.cli:Config Error: Error accessing file for config file:///home/linux/+
上网搜了一下然后自己总结一份 : 出现原因:yum可能没有,或者损坏 解决: 第一步:下载 wget http://yum.baseurl.org/download/3.2/yum-3.2.28 ...
- dll中全局变量在外部进行引用
在Windows中实际导出全局变量,您必须使用类似于export / import语法的语法,例如: #ifdef COMPILING_THE_DLL #define MY_DLL_EXPORT ex ...
- Jquery xhr2跨域
相关享目托管在github: https://github.com/devgis/CSharpCodes
- 2017.5.11 昨天晚上看fview直播坚果pro回放
对话1 彭林: 我以前也是产品经理,身为产品经理,你有没有感觉我们做出过什么之前不被人接受的东西,但是我们却坚持做了,并且得到的反响非常好. 朱萧木: 没有吧,我们没有做颠覆用户认知或者三观的特别 ...
- python3中lambda函数
def make_repeater(n): return lambda s:s*n twice=make_repeater(2) print(twice('wwss')) print(twice(2) ...
- .Net Core 3.0 发布为单独的可执行文件
dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true
- F#周报2019年第51&52期
新闻 介绍DataFrame 介绍System.Threading.Channels ConfigureAwait常见问题 第三次年度C#降临节 .NET会议--2020年1月14日 如何找到F#的工 ...
- jsp中点击一个图片跳转到另一个页面的方法
1.这是jsp页面中的关于图片的那段代码 <img src="images/tj1.png " id="tj1"></img> 2.跳转 ...
- centos批量创建用户并发送邮件,(修订版)
# cat user_create.sh echo -n "创建用户输入C,删除用户输入D!" read name function monitor() { if [ " ...