家乡苞谷酒 發表於 2016-12-27 22:25:34

Nmap备忘单:从探索到漏洞利用 第二章 MITM

<p><strong>这是我们的第二期NMAP备忘单(第一期在此)。基本上,我们将讨论一些高级NMAP扫描的技术,我们将进行一个中间人攻击(MITM)。现在,游戏开始了。</strong></p>
<h5>TCP SYN扫描</h5>
<p>SYN扫描是默认的且最流行的扫描选项是有一定原因的。它可以在不受防火墙限制的高速网络每秒扫描数千个端口 。同时也是相对不显眼的和隐蔽的,因为它永远不会完成TCP连接。</p>
<p>命令:NMAP&nbsp;-sS&nbsp;目标</p>
<p><img alt="图片34.png" width="624" height="249" src="https://img.jbzj.com/file_images/article/201612/2016122722132924.png" /></p>
<strong>TCP连接扫描</strong>&nbsp;
<p>当SYN扫描不可用的时候,TCP连接扫描是默认的TCP扫描类型。这是在用户不具有发送RAW数据包的特权的情况下。不是像大多数其他扫描器那样写原始数据包,NMAP要求底层的操作系统通过发出连接系统调用来建立与目标机和端口的连接。</p>
<p>命令:NMAP&nbsp;-sT&nbsp;目标</p>
<p><img alt="图片35.png" width="624" height="134" src="https://img.jbzj.com/file_images/article/201612/2016122722132925.png" /> </p>
<strong>UDP扫描</strong>
<p>虽然互联网上最流行的服务运行在TCP协议,但UDP服务也是广泛部署的。DNS,SNMP和DHCP(注册端口53,161/162,和67/68)这三种最常见的UDP服务。因为UDP扫描通常比TCP慢和更加困难,一些安全审计员忽略这些端口。这是一个错误,因为UDP服务是相当普遍,攻击者也不会忽略整个协议。</p>
<p>命令:NMAP&nbsp;-sU&nbsp;目标</p>
<p><img alt="图片36.png" width="624" height="126" src="https://img.jbzj.com/file_images/article/201612/2016122722133026.png" /></p>
<p>选项-data-length可以用来固定长度的随机有效载荷发送到每一个端口或(如果指定0值)来禁用有效载荷。如果返回一个ICMP端口不可达错误(类型3,代码3),那么端口是关闭的。其他ICMP不可达错误(类型3,编码1,2,9,10或13)标记端口过滤。有时服务会返回一个UDP包响应以证明它是开放的。如果重发后没有收到回应,端口被列为开放或者过滤。</p>
<p>命令:NMAP&nbsp;-sU&ndash;data-length=value&nbsp;目标 </p>
<p><img alt="图片37.png" width="624" height="164" src="https://img.jbzj.com/file_images/article/201612/2016122722133027.png" /></p>
<strong>SCTP&nbsp;INIT扫描</strong>
<p>SCTP是对TCP和UDP协议的相对较新的替代方案,结合TCP和UDP最具特色的部分,同时也增加了新的功能,如多宿主和多流。它主要被用于SS7&nbsp;/&nbsp;SIGTRAN相关的服务,但有可能被用于其他用途。&nbsp;SCTP&nbsp;INIT扫描SCTP相当于TCP&nbsp;SYN扫描。它可以在不受防火墙限制的高速网络每秒扫描数千个端口。像SYN扫描,扫描INIT相对不显眼的和隐蔽的,因为它永远不会完成SCTP连接。</p>
<p>命令:NMAP&nbsp;-sY&nbsp;目标</p>
<p><img alt="图片38.png" width="624" height="69" src="https://img.jbzj.com/file_images/article/201612/2016122722133028.png" /></p>
TCP&nbsp;NULL、FIN和Xmas扫描 <blockquote>
<p>&middot; NULL扫描(-sN)</p>
<p>&nbsp; 不设置任何位(TCP标志标头是0)。</p>
<p>&nbsp;&middot;&nbsp;FIN扫描(-sF)</p>
<p>&nbsp; 设置只是TCP&nbsp;FIN位。</p>
<p>&nbsp;&middot;&nbsp;Xmas扫描(-sX)</p>
<p>&nbsp; 设置FIN,PSH,URG和标志。</p>
</blockquote>
<p><img alt="图片39.png" width="624" height="320" src="https://img.jbzj.com/file_images/article/201612/2016122722133029.png" /></p>
<strong>TCP&nbsp;ACK扫描</strong>
<p>这种扫描跟其他方式不同的地方是因为它没有判断端口的开放情况。它是用来绘制出防火墙规则,对哪些端口进行了保护。</p>
<p>命令:NMAP&nbsp;-scanflags=value&nbsp;-sA&nbsp;target</p>
<p><img alt="图片40.png" width="624" height="127" src="https://img.jbzj.com/file_images/article/201612/2016122722133030.png" /> </p>
<p>该ACK扫描探测报文只具有ACK标志设置(除非您使用-scanflags)。当扫描未经过系统过滤,打开和关闭的端口都将返回一个RST包。&nbsp;NMAP然后把它们标记为未过滤的,这意味着它们是ACK包可达的。</p>
<strong>TCP窗口扫描</strong>
<p>窗口扫描跟ACK扫描是几乎一样的,除了它利用某些系统的实现细节来区分端口的,而不是当返回一个RST时总是认为端口未经过滤。</p>
<p>命令:NMAP&nbsp;-sW&nbsp;目标</p>
<p><img alt="图片41.png" width="637" height="66" src="https://img.jbzj.com/file_images/article/201612/2016122722133031.png" /></p>
<strong>TCP&nbsp;Maimon&nbsp;扫描</strong>
<p>Maimon&nbsp;扫描的名字来源于它的发现者,Uriel&nbsp;Maimon。他在Phrack杂志问题#49(1996年11月)中描述的技术。这种技术与NULL,FIN和Xmas扫描类似,唯一的不同之处在于探针是FIN/&nbsp;ACK。</p>
<p>命令:NMAP&nbsp;-sM&nbsp;目标</p>
<p><img alt="图片42.png" width="624" height="198" src="https://img.jbzj.com/file_images/article/201612/2016122722133032.png" /></p>
自定义的TCP扫描使用-scanflag选项
<p><strong>对于渗透测试,一个渗透测试人员不会使用一般的TCP扫描比如ACK、FIN等,因为这些东西可以被IDS&nbsp;/&nbsp;IPS阻断。因此他们将通过指定&ldquo;-scanflag&rdquo;选项使用一些不同的技术。这也可以用于绕过防火墙。</strong></p>
<p>该-scanflags的参数可以是一个数字标记值如9(PSH和FIN),但使用符号名称更容易。只是URG,ACK,PSH,RST,SYN和FIN的任意组合。例如,-scanflags&nbsp;URGACKPSHRSTSYNFIN所有设置,虽然扫描时不是非常有用的。</p>
<p>命令:NMAP&nbsp;&ndash;scanflags&nbsp;目标</p>
<p><img alt="图片43.png" width="624" height="227" src="https://img.jbzj.com/file_images/article/201612/2016122722133033.png" /></p>
<strong>SCTP&nbsp;COOKIE&nbsp;ECHO扫描</strong>
<p>SCTP&nbsp;COOKIE&nbsp;ECHO扫描是一种更先进的SCTP扫描。SCTP会默认丢弃开放端口返回的包含COOKIE&nbsp;ECHO数据包块,但如果端口关闭则发送中止。这种扫描方式优点是,它并不像INIT扫描一样明显。除此之外,无状态防火墙会阻断INIT块而不是COOKIE&nbsp;ECHO块。但一个优秀的IDS仍能够探测到SCTP&nbsp;COOKIE&nbsp;ECHO扫描SCTP&nbsp;COOKIE&nbsp;ECHO扫描的缺点是无法区分开放和过滤的端口。</p>
<p>命令:NMAP&nbsp;-sZ&nbsp;目标</p>
<p><img alt="图片44.png" width="624" height="246" src="https://img.jbzj.com/file_images/article/201612/2016122722133034.png" /></p>
<strong>TCP空闲扫描</strong>
<p>这种先进的扫描方法允许对目标进行一个真正的盲目TCP端口扫描(即没有数据包从你的真实IP地址发送到目标)。相反独特的侧信道攻击利用僵尸主机上可预测的IP分段ID序列生成来收集关于目标的开放端口的信息。IDS系统只会显示扫描是从您指定的僵尸机发起。这在进行MITM(中间人攻击)非常有用的。</p>
<p>命令:NMAP&nbsp;-sI&nbsp;zombie&nbsp;目标</p>
<p><img alt="图片45.png" width="624" height="85" src="https://img.jbzj.com/file_images/article/201612/2016122722133035.png" /> </p>
<p>这里简单介绍下空闲的原理:</p>
<blockquote>
<p>1、向僵尸主机发送SYN/ACK数据包,获得带有分片ID(IPID)的RST报文。&nbsp;</p>
<p>2、发送使用僵尸主机IP地址的伪数据包给目标主机。&nbsp;如果目标主机端口关闭,就会向僵尸主机响应RST报文。如果目标端口开放,目标主机向僵尸主机响应SYN/ACK报文,僵尸主机发现这个非法连接响应,并向目标主机发送RST报文,此时IPID号开始增长。&nbsp;</p>
<p>3、通过向僵尸主机发送另一个SYN/ACK报文以退出上述循环并检查僵尸主机RST报文中的IPID是否每次增长2,同时目标主机的RST每次增长1。&nbsp;重复上述步骤直到检测完所有的端口。</p>
</blockquote>
<p>接下来是进行空闲扫描的步骤:</p>
<strong>1、寻找合适的僵尸主机</strong>
<p>一个常见的方法就是在NMAP下执行Ping扫描一些网络。你可以选择NMAP提供的随机IP选项(-iR),但是这很有可能造成与Zombie主机之间的大量延迟。</p>
<p>在Zombie主机候选列表中执行一个端口扫描以及操作系统识别(-o)比简单的使用Ping命令筛选更容易找寻到合适的。只要启动了详细模式(-v),操作系统检测通常会确定IP&nbsp;ID增长方法,然后返回&ldquo;IP&nbsp;ID&nbsp;Sequence&nbsp;Generation:&nbsp;Incremental&rdquo;。如果这个类型被作为增长或是破损的低字节序增长量,那么该机是不错的僵尸主机备选。</p>
<p>还有一种方法是对运行ipidseq&nbsp;&nbsp;NSE脚本。该脚本探测一台主机的IP&nbsp;ID生成方法并进行分类,然后就像操作系统检测一样输出IP&nbsp;ID分级。</p>
<p>命令:NMAP&nbsp;--script&nbsp;ipidseq&nbsp;[ --script-args&nbsp;probeport=port]&nbsp;目标 </p>
<p><img alt="图片46.png" width="624" height="250" src="https://img.jbzj.com/file_images/article/201612/2016122722133036.png" /> </p>
<p>&nbsp;</p>
<p>我们也可以使用hping用于发现僵尸主机。</p>
<p>首先选择使用Hping3发送数据包,并观察ID号是不是逐一增加,那么该主机就是空闲的。如果ID号随意增加,那么主机实际上不是空闲的,或者主机的操作系统没有可预测的IP&nbsp;ID。 </p>
hping3&nbsp;-s&nbsp;目标
<p><img alt="图片47.png" width="624" height="299" src="https://img.jbzj.com/file_images/article/201612/2016122722133037.png" /> </p>
<p>发送伪造SYN包到你指定的目标主机上的端口。</p>
hping3&nbsp;-spoof&nbsp;僵尸主机&nbsp;-S&nbsp;p&nbsp;22&nbsp;目标
<p><img alt="图片48.png" width="635" height="44" src="https://img.jbzj.com/file_images/article/201612/2016122722133038.png" /> </p>
<p>正如你所看到的,没有任何反应,这表明数据包100%的丢失。这意味着我们并没有发现僵尸主机。同时我们将检查确认以下的步骤。</p>
<p><strong>检查PID值是否逐一增加:</strong></p>
<p>hping3&nbsp;-S&nbsp;目标</p>
<p><img alt="图片49.png" width="650" height="160" src="https://img.jbzj.com/file_images/article/201612/2016122722133039.png" /></p>
2、使用NMAP进行攻击
<p>命令:&nbsp;NMAP&nbsp;-Pn&nbsp;-p-&nbsp;-sI&nbsp;僵尸主机&nbsp;目标</p>
<p>首先我们用NMAP扫描僵尸主机的端口:</p>
<p><img alt="图片50.png" width="624" height="280" src="https://img.jbzj.com/file_images/article/201612/2016122722133040.png" /> </p>
<p>发现僵尸主机22端口是关闭着的。</p>
<p><img alt="图片51.png" width="624" height="83" src="https://img.jbzj.com/file_images/article/201612/2016122722133141.png" /> </p>
<p>我们指定利用僵尸主机的22端口进行空闲扫描,结果显而易见,无法攻击目标。</p>
<p>默认情况下,NMAP的伪造探针使用僵尸主机的80端口作为源端口。您可以通过附加一个冒号和端口号僵尸名选择一个不同的端口(例如www.baidu.com:90)。所选择的端口必须不能被攻击者或目标过滤。僵尸主机的SYN扫描会显示端口的开放状态。</p>
<p><strong>这里解释下参数的含义:</strong></p>
<blockquote>
<p>-Pn:防止NMAP的发送初始数据包到目标机器。</p>
<p>-p-:将扫描所有65535个端口。</p>
<p>-sI:用于闲置扫描和发送数据包欺骗。</p>
</blockquote>了解NMAP的内部
<p>作为一个渗透测试人员,我们必须明白NMAP空闲扫描的内部运行过程,然后用我们自己的方法来实现同样的事情。为此,我们将使用NMAP的数据包跟踪选项。</p>
<p>命令:NMAP&nbsp;-sI&nbsp;僵尸主机:113&nbsp;-Pn&nbsp;-p20-80,110-180&nbsp;-r&nbsp;- packet-trace&nbsp;-v&nbsp;目标 </p>
<p>-Pn是隐身的必要,否则ping数据包会用攻击者的真实地址发送到目标。未指定-sV选项是因为服务识别也将暴露真实地址。&nbsp;-r选项(关闭端口随机化)让这个例子运行起来更简单。</p>
<p><img alt="图片52.png" width="624" height="301" src="https://img.jbzj.com/file_images/article/201612/2016122722133142.png" />&nbsp;</p>
<p>正如我之前说的,成功的攻击需要选择一个合适的僵尸主机端口。</p>
<p><strong>这种攻击的过程:</strong></p>
<p>NMAP首先通过发送6个&nbsp;SYN&nbsp;/&nbsp;ACK数据包并分析响应,测试僵尸主机的IP&nbsp;ID序列生成。在这里R表示复位包,意味该端口不可达。有关详细信息,请在NMAP手册空闲扫描。</p>
<p>所以下面提及的C代码是空闲扫描。编译C代码并运行程序。</p>
<p>这是一个不寻常的扫描代码,可以允许完全的空闲扫描(例如发送到目标的数据包不是来自自己的真实IP地址),并也可用于穿透防火墙和路由器ACL范围。</p>
<p>由于代码过程打包在此:http://xiazai.jb51.net/201612/yuanma/nmap_MITM.txt</p>
<p>IP协议扫描</p>
<p>IP协议扫描可以让您确定哪些IP协议(TCP,ICMP,IGMP等)是目标机器的支持。这不是技术上的端口扫描,因为只是IP协议号的循环而不是TCP或UDP端口号。</p>
<p>命令:NMAP&nbsp;-sO&nbsp;目标</p>
<p><img alt="" src="https://img.jbzj.com/file_images/article/201612/2016122722133843.png" />&nbsp;</p>
FTP弹跳扫描
<p>这允许用户连接到一个FTP服务器,然后文件被发送到目标主机。NMAP会发送文件到你指定的目标主机上的端口,通过错误消息判断该端口的状态。这是绕过防火墙的好方法,因为相对于Internet主机,组织的FTP服务器经常被放置在可被内网访问的范围中。它的格式为&lt;username&gt;:&lt;password&gt;@&lt;server&gt;:&lt;port&gt;。&nbsp;&lt;server&gt;是一个脆弱的FTP服务器的名称或IP地址。</p>
<p>命令:NMAP&nbsp;&ndash;b&nbsp;ftp&nbsp;rely&nbsp;host</p>
NMAP&nbsp;-T0-b&nbsp;username:password@ftpserver.tld:21&nbsp;victim.tld
<p>这将使用用户名&ldquo;username&rdquo;,密码为&ldquo;password&rdquo;,FTP服务器&ldquo;FTP&nbsp;server.tld&rdquo;,ftp端口则是21,用于扫描的文件是服务器上的victim.tld。</p>
<p>如果FTP服务器支持匿名登录,就不用填写&ldquo;username:password@&rdquo;部分。如果FTP端口是默认的21,也可以省略不写,但如果FTP端口是21之外的必须得指明。</p>
端口规范和扫描顺序
<p>除了所有的前面讨论的扫描方法,NMAP提供选项用于指定被扫描的端口和扫描顺序是随机的或顺序的。默认情况下NMAP扫描最常见的1000个端口。</p>
<p>-p&lt;端口范围&gt;(只扫描指定的端口)</p>
<p>此选项指定要扫描的端口范围,并覆盖默认。单个端口号都行,因为是用连字符(例如1-1023)分割范围。范围的起始或结束可以被省略,NMAP会分别使用1和65535。所以你可以指定-p-,相当于从1到65535进行扫描。</p>
<p>&nbsp;NMAP&nbsp;-p1-1023&nbsp;目标</p>
<p>你可以指定用于端口扫描的协议类型,比如T代表TCP,U代表UDP,S代表SCTP,P代表IP。</p>
<p>NMAP&nbsp;-p&nbsp;U:53,111,137,T:21-25,80,139,8080&nbsp;目标</p>
-F(快速(有限的端口)扫描)
<p>指定比默认情况下更少的端口数。通常情况下的NMAP扫描每个扫描协议中最常见的1000个端口。用-F将会减少到100个。</p>
<p><strong>NMAP&nbsp;-F&nbsp;目标</strong></p>
<p><strong>-r(不要随机端口)</strong></p>
<p>默认情况下NMAP会随机扫描端口,但您可以指定-r为顺序(从最低到最高排序)端口扫描来代替。</p>
<p>NMAP&nbsp;-r&nbsp;目标</p>
<p>在接下来的部分,我将使用NMAP绕过防火墙,创建自定义利用程序。</p>
<p><strong>引用内容:</strong></p>
<p>http://www.kyuzz.org/antirez/papers/dumbscan.html</p>
<p>http://www.kyuzz.org/antirez/papers/moreipid.html</p>
<p>http://en.wikipedia.org/wiki/Idle_scan</p>
<p><strong>*参考来源:infosecinstitute,FB小编东二门陈冠希编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)</strong></p>
頁: [1]
查看完整版本: Nmap备忘单:从探索到漏洞利用 第二章 MITM