(内部资料)
大学霸
www.daxueba.net
·2·
Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 www.daxueba.net——大学霸
Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 前 言
Kali Linux是业内最知名的安全渗透测试专用操作系统。它的前身就是业界知名的BackTrack操作系统。BackTrack在2013年停止更新,转为Kali Linux。Kali Linux集成了海量渗透测试、网络扫描、攻击等专用工具。通过系统更新,用户可以快速获取最新的各类工具。所以,Kali Linux是专业人员的不二选择。
网络扫描是一门操作性极强的学科。通过实施网络扫描,用户能够发现目标主机上各种服务分配的端口、开放的服务、服务软件及版本等信息。网络扫描的基本流程如下所示:
(1)发现目标主机 (2)端口扫描 (3)指纹信息扫描 (4)漏洞扫描 (5)实施渗透攻击
本教程就是按照该流程,使用Kali Linux中的各种工具实施渗透测试。在本书中使用到的工具包括Scapy、Nmap、Amap、Dmitry、p0f、Nessus、Burp Suite等。
1.学习所需的系统和软件
Kali Linux操作系统
Scapy:是用Python编写的一个功能强大的交互式数据包处理程序,可用来发送、嗅探、解析和伪造网络数据包。
ARPing:是一个ARP级别的ping工具,可以用来直接ping MAC地址。 Nmap:是Linux下的网络扫描和嗅探工具包。
NetDiscover:用来扫描局域网内MAC地址对应的IP地址。
Metasploit:是一款开源的安全漏洞检测工具。该工具主要的功能,就是有大量的辅助模块可以用于各种扫描并进行信息收集。
ICMP ping:使用Ping命令,可以检查网络的连通性和活动状态。
Fping:可以用来法送ICMP Echo request包到一个单独的目标地址,来判断该主机是否活动。 Hping3:是一个命令行下使用的TCP/IP数据包组装/分析工具。 Dmitry:可以用来实现对一个目标系统进行TCP扫描。 Netcat:是一个网络套接字连接和管理工具。
Nmap NSE:可以用于增强主机发现、端口扫描、版本侦测、操作系统侦测等功能。
Amap:是一个应用程序映射工具,可以用来通过远程端口读取正在运行的网络服务的标志。 xProbe2:是一款远程主机操作系统探查工具。 p0f:是一款用于识别远程操作系统的工具。
onesixtyone:是一个简单的SNMP分析工具。使用该工具,可以请求指定地址的系统描述值。 snmpwalk:可以收集使用SNMP社区字符串设备的大量信息。 Nessus:是一个最强大并广泛使用的漏洞扫描工具,可以自动扫描所有识别出服务的各种漏洞。 SSLScan:该工具可以用来评估远程Web服务器上SSL/TLS的支持。 SSLyze:是一款使用Python实现的SSL扫描工具,它可以扫描出SSL中一些经典的配置错误。
·2· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 Burp Suite:是用于攻击Web应用程序的集成平台。
sqlmap:是一个开放源码的渗透测试工具。它可以自动探测和利用SQL注入漏洞,来接管数据
库服务器。 2.学习建议
大家学习之前,可以致信到xxxxxxxxx,获取相关的资料和软件。如果大家在学习过程遇到问题,也可以将问题发送到该邮箱。我们尽可能给大家解决。
目 录
第1章 网络扫描概述 ................................................................................................ 错误!未定义书签。
1.1 什么是网络扫描 ........................................................................................... 错误!未定义书签。
1.1.1 网络构成 ............................................................................................ 错误!未定义书签。 1.1.2 网络扫描流程 .................................................................................... 错误!未定义书签。 1.1.3 法律边界 ............................................................................................ 错误!未定义书签。 1.2 本书网络环境 ............................................................................................... 错误!未定义书签。 1.3 安装Kali Linux操作系统 ............................................................................ 错误!未定义书签。
1.3.1 安装Kali Linux .................................................................................. 错误!未定义书签。 1.3.2 安装VMware tools ............................................................................ 错误!未定义书签。 1.4 安装Metasploitable2操作系统 .................................................................... 错误!未定义书签。 1.5 安装其他所需的工具 ................................................................................... 错误!未定义书签。
1.5.1 安装及配置Nessus ............................................................................ 错误!未定义书签。 1.5.2 使用及配置SSH工具 ....................................................................... 错误!未定义书签。 1.5.3 配置Burp Suite工具 ......................................................................... 错误!未定义书签。 1.5.4 使用文本编辑器(VIM和Nano) .................................................. 错误!未定义书签。
第2章 扫描发现 ....................................................................................................................................... 2
2.1 OSI模型 ....................................................................................................................................... 1 2.2 实施第二层扫描发现 .................................................................................................................. 2
2.2.1 使用Scapy工具 ............................................................................................................... 2 2.2.2 使用ARPing工具 ............................................................................................................ 8 2.2.3 使用Nmap工具 ............................................................................................................. 11 2.2.4 使用NetDiscover工具 ................................................................................................... 14 2.2.5 使用Metasploit工具 ...................................................................................................... 15 2.3 实施第三层扫描发现 ................................................................................................................ 17
2.3.1 使用ICMP Ping工具 ..................................................................................................... 17 2.3.2 使用Scapy工具 ............................................................................................................. 20 2.3.3 使用Nmap工具 ............................................................................................................. 25 2.3.4 使用Fping工具 .............................................................................................................. 27 2.3.5 使用Hping3工具 ........................................................................................................... 29 2.4 实施第四层扫描发现 ................................................................................................................ 32
www.daxueba.net——大学霸
Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 ·3·
2.4.1 使用Scapy工具 ............................................................................................................. 32 2.4.2 使用Nmap工具 ............................................................................................................. 43 2.4.3 使用Hping3工具 ........................................................................................................... 45
第3章 端口扫描 ........................................................................................................ 错误!未定义书签。
3.1 UDP端口扫描 .............................................................................................. 错误!未定义书签。
3.1.1 使用Scapy实施UDP端口扫描 ....................................................... 错误!未定义书签。 3.1.2 使用Nmap实施UDP端口扫描 ....................................................... 错误!未定义书签。 3.1.3 使用Metasploit实施UDP端口扫描 ............................................... 错误!未定义书签。 3.2 隐蔽扫描 ....................................................................................................... 错误!未定义书签。
3.2.1 使用Scapy实施隐蔽扫描................................................................. 错误!未定义书签。 3.2.2 使用Nmap实施隐蔽扫描................................................................. 错误!未定义书签。 3.2.3 使用Metasploit实施隐蔽扫描 ......................................................... 错误!未定义书签。 3.2.4 使用Hping3实施隐蔽扫描 .............................................................. 错误!未定义书签。 3.3 TCP全连接扫描 ........................................................................................... 错误!未定义书签。
3.3.1 使用Scapy实施TCP全连接扫描 ................................................... 错误!未定义书签。 3.3.2 使用Nmap实施TCP全连接扫描 ................................................... 错误!未定义书签。 3.3.3 使用Metasploit实施TCP全连接扫描 ............................................ 错误!未定义书签。 3.3.4 使用Dmitry实施TCP全连接扫描 .................................................. 错误!未定义书签。 3.4 使用Netcat实施TCP端口扫描 .................................................................. 错误!未定义书签。 第4章 指纹识别 ........................................................................................................ 错误!未定义书签。
4.1 获取标志 ....................................................................................................... 错误!未定义书签。
4.1.1 使用Netcat获取标志 ........................................................................ 错误!未定义书签。 4.1.2 使用Python套接字模块获取标志 ................................................... 错误!未定义书签。 4.1.3 使用Dmitry获取标志 ....................................................................... 错误!未定义书签。 4.1.4 使用Nmap NSE获取标志 ................................................................ 错误!未定义书签。 4.1.5 使用Amap获取标志 ........................................................................ 错误!未定义书签。 4.2 服务指纹识别 ............................................................................................... 错误!未定义书签。
4.2.1 使用Nmap工具实施服务指纹识别 ................................................. 错误!未定义书签。 4.2.2 使用Amap工具实施服务指纹识别 ................................................. 错误!未定义书签。 4.3 操作系统指纹识别 ....................................................................................... 错误!未定义书签。
4.3.1 使用Scapy实施操作系统指纹识别 ................................................. 错误!未定义书签。 4.3.2 使用Nmap实施操作系统指纹识别 ................................................. 错误!未定义书签。 4.3.3 使用xProbe2实施操作系统指纹识别 ............................................. 错误!未定义书签。 4.3.4 使用p0f实施操作系统指纹识别 ..................................................... 错误!未定义书签。 4.4 SNMP服务分析 ........................................................................................... 错误!未定义书签。
4.4.1 安装及配置SNMP服务 ................................................................... 错误!未定义书签。 4.4.2 使用Onesixtyoue实施SNMP服务分析 ......................................... 错误!未定义书签。 4.4.3 使用SNMPwalk实施SNMP服务分析 ........................................... 错误!未定义书签。 4.5 防火墙指纹识别 ........................................................................................... 错误!未定义书签。
4.5.1 使用Scapy实施防火墙指纹识别 ..................................................... 错误!未定义书签。 4.5.2 使用Nmap实施防火墙指纹识别 ..................................................... 错误!未定义书签。
www.daxueba.net——大学霸
·4· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 4.5.3 使用Metasploit框架实施防火墙指纹识别 ..................................... 错误!未定义书签。
第5章 漏洞扫描 ........................................................................................................ 错误!未定义书签。
5.1 使用Nmap脚本引擎 ................................................................................... 错误!未定义书签。 5.2 使用MSF辅助模块 ..................................................................................... 错误!未定义书签。 5.3 使用Nessus实施漏洞扫描 .......................................................................... 错误!未定义书签。
5.3.2 创建扫描策略 .................................................................................... 错误!未定义书签。 5.3.3 实施漏洞扫描 .................................................................................... 错误!未定义书签。 5.3.4 使用Nessuscmd实施命令行扫描 .................................................... 错误!未定义书签。 5.4 验证漏洞 ....................................................................................................... 错误!未定义书签。
5.4.1 HTTP交互 ......................................................................................... 错误!未定义书签。 5.4.2 使用ICMP交互 ................................................................................ 错误!未定义书签。
第6章 拒绝服务(DoS) ......................................................................................... 错误!未定义书签。
6.1 缓存溢出 ....................................................................................................... 错误!未定义书签。
6.1.1 识别缓存溢出 .................................................................................... 错误!未定义书签。 6.1.2 远程FTP服务缓存溢出DoS ........................................................... 错误!未定义书签。 6.2 拒绝服务(DoS)攻击 ................................................................................ 错误!未定义书签。
6.2.1 Smurf攻击 ......................................................................................... 错误!未定义书签。 6.2.2 DNS放大攻击 ................................................................................... 错误!未定义书签。 6.2.3 SNMP放大攻击 ................................................................................ 错误!未定义书签。 6.2.4 NTP放大攻击 .................................................................................... 错误!未定义书签。 6.2.5 SYN洪水(SYN flood)攻击 .......................................................... 错误!未定义书签。 6.2.6 Sock Stress攻击 ................................................................................. 错误!未定义书签。 6.3 实施拒绝服务(DoS)攻击 ........................................................................ 错误!未定义书签。
6.3.1 使用Nmap NSE工具 ........................................................................ 错误!未定义书签。 6.3.2 使用Metasploit框架 ......................................................................... 错误!未定义书签。
第7章 Web扫描及攻击 ............................................................................................ 错误!未定义书签。
7.1 使用Nikto实施Web应用程序扫描 ........................................................... 错误!未定义书签。 7.2 SSL/TLS扫描 ............................................................................................... 错误!未定义书签。
7.2.1 使用SSLScan工具 ............................................................................ 错误!未定义书签。 7.2.2 使用SSLyze工具 .............................................................................. 错误!未定义书签。 7.3 使用Burp Suite工具 .................................................................................... 错误!未定义书签。
7.3.1 定义Web应用目标 ........................................................................... 错误!未定义书签。 7.3.2 使用Spider工具 ................................................................................ 错误!未定义书签。 7.3.3 使用Engagement工具 ...................................................................... 错误!未定义书签。 7.3.4 使用Proxy工具 ................................................................................. 错误!未定义书签。 7.3.5 使用Scanner工具 ............................................................................. 错误!未定义书签。 7.3.6 使用Intruder工具 ............................................................................. 错误!未定义书签。 7.3.7 使用Burp Suite Comparer工具 ........................................................ 错误!未定义书签。 7.3.8 使用Repeater工具 ............................................................................ 错误!未定义书签。 7.3.9 使用Decoder工具 ............................................................................. 错误!未定义书签。 7.3.10 使用Sequencer工具 ........................................................................ 错误!未定义书签。
www.daxueba.net——大学霸
Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 ·5·
7.4 SQL注入 .................................................................................................................................. 254
7.4.1 GET method SQL注入 ...................................................................... 错误!未定义书签。 7.4.2 捕获一个请求并实施SQL注入 ....................................................... 错误!未定义书签。
www.daxueba.net——大学霸
Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有
第2章 扫描发现
扫描发现是识别一个网络中活跃主机的过程。通过扫描发现,可以找出一个局域网中所有活动的主机。本章将介绍使用各种工具,对OSI模型的第二、三、四层进行扫描发现。 2.1 OSI模型 OSI模型,即开放式通信系统互联参考模型(Open System Interconnection,OSI/RM,Open Systems Interconnection Reference Model)。OSI是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互联为网络的标准框架,简称OSI。 OSI将计算机网络体系结构划分为七层,从下往上依次是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,如图2.1所示。 应用层表示层会话层传输层网络层数据链路层物理层 图2.1 OSI参考模型
以上就是OSI七层参考模型。其中,第四层完成数据传送服务,上面三层面向用户。对于每一层,至少制定了两项标准——服务定义和协议规范。服务定义指出了该层所提供的服务的准确定义,协议规范详细描述了该协议的动作和各种有关规程,以保证服务的提供。OSI七层模型中各层的功能及定义的协议,如表2-1所示。
表2-1 OSI参考模型各层功能及协议
www.daxueba.net——大学霸
Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 OSI模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 层描述 把数据转换为传输介质上的电子流或模拟脉冲,并且监视数据的传输 提供与网络适配器相连的接口,维护子网的逻辑链接 支持逻辑寻址与路由选择 为网络提供错误控制和数据流控制 在计算机的通信应用程序之间建立会话 把数据转换为标准格式,管理数据加密与压缩 为应用程序提供网络接口,支持文件传输、通信等功能的网络应用 ·2·
常见协议 HTTP、FTP、Telnet、SMTP、DNS ASCII、JPEG、PDF、PNG、DOCX NetBIOS、PPTP、RPC、SOCKS TCP、UDP IPv4、IPv6、ICMP、IPSec ARP 2.2 实施第二层扫描发现
OSI模型的第二层就是数据链路层。在该层工作的协议主要是ARP协议。本节将介绍使用各种工具, 基于ARP协议实施扫描发现。
2.2.1 使用Scapy工具
Scapy是Python写的一个功能强大的交互式数据包处理程序,可用来发送、嗅探、解析和伪造网络数据包,常常被用到网络攻击和测试中。下面将介绍使用Scapy工具实施第二层扫描发现。
1.Scapy的基本使用
启动Scapy工具。执行命令如下所示:
root@Kali:~# scapy
INFO: Can't import python gnuplot wrapper . Won't be able to plot. WARNING: No route found for IPv6 destination :: (no default route?) Welcome to Scapy (2.2.0) >>>
输出信息显示了启动Scapy后的欢迎信息。其中,>>>提示符表示成功登录Scapy的交互界面。此时就可以在该交互界面下,执行任何的命令。
【实例2-1】例如,发送一个ARP请求包,执行命令如下所示:
>>> ARP().display() ###[ ARP ]### hwtype= 0x1 ptype= 0x800 hwlen= 6 plen= 4 op= who-has hwsrc= 50:e5:49:eb:46:8d psrc= 192.168.6.102 hwdst= 00:00:00:00:00:00 pdst= 0.0.0.0
#表明ARP实现在何种类型的网络上,这里0x1,表示Ethernet网 #表示解析协议(上层协议),即IP #MAC地址长度,此处为6个字节 #IP地址长度,此处为4个字节
#ARP数据包类型,此处表示这是一个请求 #源MAC地址 #源IP地址
#目标MAC地址(待填充) #目标IP地址
以上输出信息中,显示了当前系统中的硬件信息,如MAC类型、IP协议类型、MAC地址长度、IP地址长度等信息。在输出信息中的IP地址和MAC地址,都是运行Scapy后通过关联主机自动配置的。如果一台主机不存在或者关机状态时,Scapy将无法关联主机的MAC地址。
2.设置请求变量
用户可以通过设置变量,指定请求的IP地址。
www.daxueba.net——大学霸
·3· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 【实例2-2】向目标地址为192.168.6.101的主机发送ARP请求,执行命令如下所示:
>>> arp_request=ARP() >>> arp_request.pdst=\"192.168.6.101\" >>> arp_request.display() ###[ ARP ]### hwtype= 0x1 ptype= 0x800 hwlen= 6 plen= 4 op= who-has hwsrc= 50:e5:49:eb:46:8d psrc= 192.168.6.102 hwdst= 00:00:00:00:00:00 pdst= 192.168.6.101 >>>
#定义了一个名为arp_request的变量 #请求的目标地址为192.168.6.101 #显示ARP请求包信息
#硬件类型,此处为Ethernet网 #协议类型,此处为IP #MAC地址长度 #IP地址长度
#ARP数据包类型,此处为请求包 #源MAC地址 #源IP地址
#目标MAC地址 #目标IP地址
输出的信息表示,主机192.168.6.102向主机192.168.6.101发送了一个ARP请求。 3.常见函数使用
display()函数也可以应用于创建ARP对象,用来验证已经更新配置的值。sr1()函数可以用来发送ARP请求包,并且可以返回响应。但是sr1()函数,只能接收一个响应包。
【实例2-3】例如,使用sr1()函数发送一个请求,并收到响应,执行命令如下所示:
>>> sr1(arp_request)
#使用sr1()函数发送ARP请求包
Begin emission:
*Finished to send 1 packets.
Received 1 packets, got 1 answers, remaining 0 packets
从输出信息中,可以看到成功发送了一个包,并得到一个响应包。其中,输出的详细信息是ARP响应包。从响应的包信息中可以看到包的源MAC地址、源IP地址、目标MAC地址、目标IP地址等。 【实例2-4】用户也可以使用ARP()函数指定请求的目标地址,实现与sr1()函数相同的功能。执行命令如下所示: >>> sr1(ARP(pdst=\"192.168.6.101\")) Begin emission: Finished to send 1 packets. * Received 1 packets, got 1 answers, remaining 0 packets 从输出的信息中,可以看到和执行sr1()函数输出的结果一样。在Scapy中,响应ARP包的类型为is-at。根据该包的信息可以看到,目标主机192.168.6.101的MAC地址为00:19:21:3f:c3:e5。 如果用户向一台正在启动或关机状态(或不存在)的主机发送ARP包时,用户将接收不到任何响应。但是sr1()函数会继续分析传入的流量,这时候可以按下Ctrl+C强制停止。另外,用户也可以指定timeout参数,来解决这个问题。当Scapy用在Python脚本中,使用timeouts将非常重要的。只要用户设置了timeout参数,在指定的时间内(单位为秒)不管是否接收到响应,将会停止运行的函数。 www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 【实例2-5】下面看一个使用timeout参数的例子。如下所示: >>> arp_request.pdst = \"192.168.6.107\" >>> sr1(arp_request,timeout=1) ·4· #指定目标主机地址为192.168.6.107 #使用sr1()函数发送ARP包,并设置1秒后自动停止发送 Begin emission: ...WARNING: MAC address to reach destination not found. Using broadcast. #该警告信息表示找不到目标主机 的MAC地址 Finished to send 1 packets. ........... Received 12 packets, got 0 answers, remaining 1 packets 从以上输出信息中,可以看到发送了一个包,接收到12个包。但是,响应包数为0。这里响应的包数为0,表示主机192.168.6.107不存在,或者关机状态。所以,无法接收到该响应包。此时,也可以为响应接收包设置一个变量。然后通过调用变量,处理响应包。执行命令如下所示: >>> response=sr1(arp_request,timeout=1) #设置一个名为response的变量 Begin emission: Finished to send 1 packets. * Received 1 packets, got 1 answers, remaining 0 packets 从输出的信息中,可以看到收到一个响应包。此时,查看响应包信息,如下所示: >>> response.display() ###[ ARP ]### hwtype= 0x1 ptype= 0x800 hwlen= 6 plen= 4 op= is-at hwsrc= 00:23:8b:c4:05:bf psrc= 192.168.6.107 hwdst= 50:e5:49:eb:46:8d pdst= 192.168.6.102 ###[ Padding ]### load= '\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00' >>> 从输出的信息中,可以看到该包是主机192.168.6.107发送给主机192.168.6.102的ARP响应包。从以上信息中,还可以看到主机192.168.6.107的MAC地址,是00:23:8b:c4:05:bf。 4.自动执行Scapy Scapy也可以用来作为一个库,使用在Python脚本语言内。编写好一个Python脚本后,通过运行该脚本可以有效地使重复的任务自动在Scapy中执行。Python和Scapy可以尽可能的依次查询本地子网中的主机,并且发送ARP请求。下面来看一个Python脚本例子,使用该脚本可以实现扫描OSI第二层发现一系列连续的主机。 下面将创建一个文件名为arp_disc.py的Python脚本文件,内容如下所示: root@Kali:~# vi arp_disc.py #!/usr/bin/python import logging import subprocess logging.getLogger(\"scapy.runtime\").setLevel(logging.ERROR) from scapy.all import * if len(sys.argv) != 2: www.daxueba.net——大学霸 ·5· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 print \"Usage - ./arp_disc.py [interface]\" print \"Example - ./arp_disc.py eth0\" print \"Example will perform an ARP scan of the local subnet to which eth0 is assigned\" sys.exit() interface = str(sys.argv[1]) ip = subprocess.check_output(\"ifconfig \" + interface + \" | grep 'inet addr' | cut -d ':' -f 2 | cut -d ' ' -f 1\shell=True).strip() prefix = ip.split('.')[0] + '.' + ip.split('.')[1] + '.' + ip.split('.')[2] + '.' for addr in range(0,254): answer=sr1(ARP(pdst=prefix+str(addr)),timeout=1,verbose=0) if answer == None: pass else: print prefix+str(addr) 以上就是arp_disc.py脚本的内容。编写好该脚本后,还不能够运行使用。因为,该脚本文件没有执行权限。此时,为该文件添加执行权限后就可以指定接口进行扫描了。执行命令如下所示: root@Kali:~# chmod +x arp_disc.py 注意:在编写Python脚本时,一定在注意每行命令前面的空格。如果没有空格,执行脚本时会提示缩进错误。每个命令前面都是使用Tab键缩进的,而不是空格键。 如果在初次使用时,可以查看该脚本的语法格式。执行命令如下所示: root@Kali:~# ./arp_disc.py Usage - ./arp_disc.py [interface] Example - ./arp_disc.py eth0 Example will perform an ARP scan of the local subnet to which eth0 is assigned 从输出的信息中,可以看到显示了arp_disc.py脚本的使用方法,并且举了一个例子。 【实例2-6】例如实施eth0接口的第二层扫描发现,执行命令如下所示: root@Kali:~# ./arp_disc.py eth0 192.168.6.1 192.168.6.101 192.168.6.104 192.168.6.107 192.168.6.109 192.168.6.113 输出的结果,表示当前网络中运行的所有主机的IP地址。当运行arp_disc.py脚本后,同时也可以运行Wireshark工具进行抓包。开启Wireshark工具后,将看到运行arp_disc.py脚本请求的每个地址,如图2.2所示。 www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 ·6· 图2.1 捕获的ARP包 从该界面可以看到,向整个局域网中所有主机发送的ARP包。如果主机是活动状态,则可以收到ARP响应包。如果主机处于关机或不存在时,将接收不到任何响应包。在图2.1中显示的数据包,可以看到主机192.168.6.1是处于活动状态,所有响应了主机192.168.6.102的请求。从响应包信息中,可以看到主机192.168.6.1的MAC地址为14:e6:e4:ac:fb:20。 为了用户在以后方便分析,可以将arp_disc.py脚本的输出重定向到一个文本文件中。例如,将./arp_disc.py eth0命令的输出重定向到名为output.txt文件中,执行命令如下所示: root@Kali:~# ./arp_disc.py eth0 > output.txt 执行以上命令后,没有任何输出结果。但是,此时将会生成output.txt文件。在该文件中保存了arp_disc.py脚本的运行结果,如下所示: root@Kali:~# ls output.txt output.txt root@Kali:~# cat output.txt 192.168.6.1 192.168.6.101 192.168.6.104 192.168.6.107 192.168.6.109 192.168.6.113 #显示output.txt文件 #查看output.txt文件内容 从以上输出信息中,可以看到output.txt文件中保存的内容和在终端执行arp_disc.py脚本的输出结果一样。 用户也可以修改arp_disc.py脚本,通过一个文本文件指定扫描范围。 【实例2-7】创建一个名为iplist.txt文本文件,然后输入发现本局域网中活跃的主机地址及随便输入一些同网段的主机地址。用户可以使用VI或Nano编辑器,创建iplist.txt文件。如下所示: root@Kali:~# vi iplist.txt root@Kali:~# nano iplist.txt 通过以上任意方法创建并写入文本内容后,可以使用cat命令查看其文本内容。如下所示: root@Kali:~# cat iplist.txt 192.168.6.1 192.168.6.101 192.168.6.103 192.168.6.104 192.168.6.107 www.daxueba.net——大学霸 ·7· 192.168.6.109 192.168.6.113 192.168.6.254 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 输出的信息就是iplist.txt文本文件中的地址列表。接下来就需要创建一个脚本文件,将文本文件作为输入。用户也可以直接修改前面的脚本文件。这里创建一个新的名为arp.disc.py的脚本文件,内容如下所示: root@Kali:~# vi arp.disc.py #!/usr/bin/python import logging logging.getLogger(\"scapy.runtime\").setLevel(logging.ERROR) from scapy.all import * if len(sys.argv) != 2: print \"Usage - ./arp.disc.py [filename]\" print \"Example - ./arp.disc.py iplist.txt\" print \"Example will perform an ARP scan of the IP addresses listed in iplist.txt\" sys.exit() filename = str(sys.argv[1]) file = open(filename,'r') for addr in file: answer = sr1(ARP(pdst=addr.strip()),timeout=1,verbose=0) if answer == None: pass else: print addr.strip() 以上就是arp.disc.py脚本文件的内容。接下来给该脚本文件添加执行权限,执行命令如下所示: root@Kali:~# chmod +x arp_disc.py 执行以上命令后,就可以运行arp_disc.py脚本文件。 【实例2-8】不指定任何参数运行该脚本,如下所示: root@Kali:~# ./arp.disc.py Usage - ./arp.disc.py [filename] Example - ./arp.disc.py iplist.txt Example will perform an ARP scan of the IP addresses listed in iplist.txt 输出信息显示了arp_disc.py脚本的使用方法。从输出的信息中,可以看到运行该脚本时需要指定一个文件。 root@Kali:~# ./arp.disc.py iplist.txt 192.168.6.1 192.168.6.101 192.168.6.104 192.168.6.107 192.168.6.109 192.168.6.113 以上输出的信息,表示这些IP地址的主机响应了ARP请求。这些IP地址代表在该局域网中,这些主机是活跃的。同样的,用户也可以将以上脚本文件的标准输出重定向到一个文件中。如下所示: root@Kali:~# ./arp.disc.py iplist.txt > output1.txt root@Kali:~# ls output1.txt output1.txt root@Kali:~# cat output1.txt 192.168.6.1 www.daxueba.net——大学霸 #重定向到output.txt文件中 #查看是否生成output1.txt文件 #查看文件内容 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 192.168.6.101 192.168.6.104 192.168.6.107 192.168.6.109 192.168.6.113 ·8· 以上输出的结果,表示运行./arp.disc.py iplist.txt命令后的显示结果。 2.2.2 使用ARPing工具 Arping是一个ARP级别的ping工具,可以用来直接ping MAC地址,以及找出哪些IP地址被哪些电脑所使用了。使用该工具,可以有效地用于第二层扫描发现。本节将介绍使用ARPing工具实施第二层扫描发现。 1.ARPing的基本使用 【实例2-9】使用ARPing工具,ping主机192.168.6.101,并使用-c参数指定只发一个包。执行命令如下所示: root@kali:~# arping 192.168.6.101 -c 1 ARPING 192.168.6.101 60 bytes from 00:19:21:3f:c3:e5 (192.168.6.101): index=0 time=149.165 usec --- 192.168.6.101 statistics --- 1 packets transmitted, 1 packets received, 0% unanswered (0 extra) 从以上输出的信息中,可以看到主机192.168.6.101响应了一个包,并且可以看到该主机的MAC地址为00:19:21:3f:c3:e5。 使用ARPing工具,可以通过包的响应来判断一台主机是否处于活跃状态。如果ping一台不存在的主机,将不会收到任何响应包。 【实例2-10】如使用ARPing工具ping一台不存在的主机,查看输出结果。执行命令如下所示: root@kali:~# arping 192.168.6.103 -c 1 ARPING 192.168.6.103 --- 192.168.6.103 statistics --- 1 packets transmitted, 0 packets received, 100% unanswered (0 extra) 从输出的信息中,可以看到一个包被成功发送,接收的包为0。这表明目标主机192.168.6.103未响应当前主机。 2.过滤显示ARPing的返回信息 通过以上两个例子可以看到,如果ARPing工具收到响应包,在该包中包含有唯一的字符串(bytes from)及与之关联的IP地址。这样,用户就可以使用grep过滤,并提取出每个响应主机的IP地址。如下所示: root@kali:~# arping -c 1 192.168.6.101 | grep \"bytes from\" 60 bytes from 00:19:21:3f:c3:e5 (192.168.6.101): index=0 time=138.341 usec root@kali:~# arping -c 1 192.168.6.103 | grep \"bytes from\" 从输出的结果中,可以看到如果目标主机有响应的话,将输出响应包信息。否则,将不会输出任何信息。 如果用户仅想看到响应包的IP地址或MAC地址时,可以使用cut命令结合其-d和-f选项来实现。下面通过例子的形式,演示仅过滤IP地址的方法。 【实例2-11】使用ARPing工具,向主机192.168.6.101发送ping包,并通过使用grep过滤显示。 www.daxueba.net——大学霸 ·9· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 执行命令如下所示: root@kali:~# arping -c 1 192.168.6.101 | grep \"bytes from\" 60 bytes from 00:19:21:3f:c3:e5 (192.168.6.101): index=0 time=138.341 usec 输出的信息,就是目标主机响应的信息。 接下来使用cut命令的-d和-f选项,快速的过滤出目标主机的MAC地址。执行命令如下所示: root@kali:~# arping -c 1 192.168.6.101 | grep \"bytes from\" | cut -d \" \" -f 4 00:19:21:3f:c3:e5 输出的信息就是,目标主机192.168.6.101的MAC地址。在以上命令中,-d选项表示以\" \"(空格)进行分割;-f 4表示提取的字段,这里的4表示第四个字段。如果想提取IP地址,执行命令如下所示: root@kali:~# arping -c 1 192.168.6.101 | grep \"bytes from\" | cut -d \" \" -f 5 (192.168.6.101): 输出的信息显示了,目标主机的IP地址。用户还可以通过cut命令的-d和-f选项,将显示地址的括号或括号后面的冒号去掉,如下所示: root@kali:~# arping -c 1 192.168.6.101 | grep \"bytes from\" | cut -d \" \" -f 5 | cut -d \"(\" -f 2 192.168.6.101): 从输出的结果中可以看到,通过以上命令将IP地址前半个括号过滤掉了。如果要仅过滤显示IP地址,则执行命令如下所示: root@kali:~# arping -c 1 192.168.6.101 | grep \"bytes from\" | cut -d \" \" -f 5 | cut -d \"(\" -f 2 | cut -d \")\" -f 1 192.168.6.101 从输出的信息中,可以看到仅显示了目标主机的IP地址。 3.创建ARPing的专用脚本arping.sh 如果用户需要对ARPing工具的输出结果进行过滤的话,可以使用一个Shell脚本来实现。这样每次就不需要输入一长串的命令了,只需要运行编好的脚本就可以。下面编写一个名为arping.sh的Shell脚本,其内容如下所示: root@kali:~# vi arping.sh #!/bin/bash if [ \"$#\" -ne 1 ]; then echo \"Usage - ./arping.sh [interface]\" echo \"Example - ./arping.sh eth0\" echo \"Example will perform an ARP scan of the local subnet to which is assigned\" exit fi interface=$1 prefix=$(ifconfig $interface | grep 'inet addr' | cut -d ':' -f 2 | cut -d ' ' -f 1 | cut -d '.' -f 1-3) for addr in $(seq 1 254); do arping -c 1 $prefix.$addr | grep \"bytes from\" | cut -d \" \" -f 5 | cut -d \"(\" -f 2 | cut -d \")\" -f 1 & done 以上就是arping.sh脚本的内容。接下来为该脚本添加可执行权限后,就可以运行了。 【实例2-12】不指定任何参数,运行arping.sh脚本,将显示如下所示的信息: root@Kali:~# ./arping.sh Usage - ./arping.sh [interface] Example - ./arping.sh eth0 Example will perform an ARP scan of the local subnet to which eth0 is assigned 以上输出的信息,显示了arping.sh脚本的使用方法。从输出的结果中,看以看到运行该脚本需要指定接口。 【实例2-13】指定etho接口,执行命令如下所示: www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 root@kali:~# ./arping.sh eth0 192.168.6.1 192.168.6.101 192.168.6.104 192.168.6.107 192.168.6.109 192.168.6.113 ·10· 以上输出的信息,就是整个局域网中响应ARP请求的主机的IP地址。 【实例2-14】用户也可以将输出结果重定向到一个文件中,执行命令如下所示: root@kali:~# ./arping.sh eth0 > output2.txt root@kali:~# ls output2.txt output2.txt root@kali:~# cat output2.txt 192.168.6.1 192.168.6.101 192.168.6.104 192.168.6.107 192.168.6.109 192.168.6.113 以上输出的信息,表示成功将./arping.sh eth0命令的运行结果重定向到output.txt文件中。 4.创建ARPing的专用脚本arping1.sh arping.sh脚本是将接口作为输入,用户也可以修改该脚本文件,将文本文件作为输入。如果要编写这样的一个脚本文件,需要创建一个IP地址列表的文本文件。本例子以前面创建的iplist.txt文本文件为例,作为该脚本中输入的文件。用户可以直接修改arping.sh脚本文件。这里新创建一个名为arping1.sh的Shell脚本文件,其内容如下所示: root@kali:~# vi arping1.sh #!/bin/bash if [ \"$#\" -ne 1 ]; then echo \"Usage - ./arping.sh [input file]\" echo \"Example - ./arping.sh iplist.txt\" echo \"Example will perform an ARP scan of all IP addresses defined in iplist.txt\" exit fi file=$1 for addr in $(cat $file); do arping -c 1 $addr | grep \"bytes from\" | cut -d \" \" -f 5 | cut -d \"(\" -f 2 | cut -d \")\" -f 1 & done 以上就是arping1.sh脚本文件的内容。接下来为该脚本文件添加执行权限,然后就可以通过指定文本文件作为脚本的输入,显示ARPing工具响应包中的目标IP地址。 执行arping1.sh脚本文件不指定任何参数,将显示如下所示的信息: root@kali:~# ./arping1.sh Usage - ./arping1.sh [input file] Example - ./arping1.sh iplist.txt Example will perform an ARP scan of all IP addresses defined in iplist.txt 输出的结果显示了arping1.sh脚本的使用方法。 【实例2-15】使用arping1.sh脚本文件扫描iplist.txt文件中的地址,执行命令如下所示: root@kali:~# ./arping1.sh iplist.txt www.daxueba.net——大学霸 ·11· 192.168.6.109 192.168.6.104 192.168.6.1 192.168.6.101 192.168.6.107 192.168.6.113 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 输出的信息,显示了iplist.txt文件中活跃主机的IP地址。 【实例2-16】如果输出的地址较多时,用户可以选择将输出结果重定向到一个文件中。执行命令如下所示: root@kali:~# ./arping1.sh iplist.txt > output3.txt root@kali:~# ls output3.txt output3.txt root@kali:~# cat output3.txt 192.168.6.1 192.168.6.101 192.168.6.109 192.168.6.104 192.168.6.113 192.168.6.107 输出的地址列表,就是iplist.txt文本文件中处于活跃主机的IP地址。 2.2.3 使用Nmap工具 Nmap(Network Mapper,网络映射)是Linux下的网络扫描和嗅探工具包。使用Nmap工具,可以扫描发现一组主机是否在线,获取主机上开放的端口号及提供的服务,还可以推断出主机所使用的操作系统。本节将介绍使用Nmap工具,实施第二层扫描发现。 1.扫描单一主机 【实例2-17】使用Nmap工具扫描主机192.168.6.101,查看该主机是否在线并且不进行端口扫描。执行命令如下所示: root@kali:~# nmap 192.168.6.101 -sn Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-28 15:50 CST Nmap scan report for 192.168.6.101 Host is up (0.00016s latency). MAC Address: 00:19:21:3F:C3:E5 (Elitegroup Computer System Co.) Nmap done: 1 IP address (1 host up) scanned in 0.23 seconds 从输出的信息中,可以看到主机192.168.6.101是活动的,其MAC地址为00:19:21:3F:C3:E5。执行以上命令后,将会向局域网广播一个ARP请求包。然后根据接收到的响应信息,来判断该主机是否是活动的。 为了区分主机是否是活动的,下面扫描一台未活动的主机。执行命令如下所示: root@kali:~# nmap 192.168.6.103 -sn Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-28 15:50 CST Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn Nmap done: 1 IP address (0 hosts up) scanned in 0.61 seconds 从输出的信息中,可以看到与实例2-4的输出结果是不同的。从以上信息中,可以看到主机192.168.6.103是关闭的。 www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 2.扫描多个主机 用户也可以扫描一个网段中所有活动的主机,使用/24或0-255指定扫描范围。 【实例2-18】使用0-255指定扫描范围,执行命令如下所示: root@kali:~# nmap 192.168.6.0-255 -sn Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-28 15:51 CST Nmap scan report for 192.168.6.1 Host is up (0.00015s latency). MAC Address: 14:E6:E4:AC:FB:20 (Tp-link Technologies CO.) Nmap scan report for 192.168.6.101 Host is up (0.000098s latency). MAC Address: 00:19:21:3F:C3:E5 (Elitegroup Computer System Co.) Nmap scan report for 192.168.6.104 Host is up (0.00024s latency). MAC Address: 00:E0:4D::EC:03 (Internet Initiative Japan) Nmap scan report for 192.168.6.107 Host is up (0.00036s latency). MAC Address: 00:23:8B:C4:05:BF (Quanta Computer) Nmap scan report for 192.168.6.109 Host is up (0.00017s latency). MAC Address: 50:E5:49:19:5E:6B (Giga-byte Technology Co.) Nmap scan report for 192.168.6.113 Host is up (0.0060s latency). MAC Address: 00:C1:40:95:11:15 (Unknown) Nmap scan report for 192.168.6.102 Host is up. Nmap done: 256 IP addresses (7 hosts up) scanned in 2.30 seconds ·12· 从以上输出信息中,可以看到有七台主机是活动的。在扫描的信息中,可以看到活动主机的MAC地址和IP地址及扫描每台主机的延迟时间。 用户也可以使用Nmap的-iL选项指定一个IP地址列表的文本文件进行扫描。执行命令如下所示: root@kali:~# nmap -iL iplist.txt -sn Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-28 15:51 CST Nmap scan report for 192.168.6.1 Host is up (0.00038s latency). MAC Address: 14:E6:E4:AC:FB:20 (Tp-link Technologies CO.) Nmap scan report for 192.168.6.101 Host is up (0.00014s latency). MAC Address: 00:E0:4D::EC:03 (Internet Initiative Japan) Nmap scan report for 192.168.6.104 Host is up (0.00039s latency). MAC Address: 00:23:8B:C4:05:BF (Quanta Computer) Nmap scan report for 192.168.6.107 Host is up (0.00012s latency). MAC Address: 00:19:21:3F:C3:E5 (Elitegroup Computer System Co.) Nmap scan report for 192.168.6.109 Host is up (0.0070s latency). MAC Address: 00:C1:40:95:11:15 (Unknown) Nmap scan report for 192.168.6.113 Host is up (0.00091s latency). www.daxueba.net——大学霸 ·13· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 MAC Address: 50:E5:49:19:5E:6B (Giga-byte Technology Co.) Nmap done: 8 IP addresses (6 hosts up) scanned in 0.26 seconds 从输出的结果中,可以看到共扫描了八个IP地址,其中六个主机地址是活动的,扫描共用时间为0.26秒。 3.Nmap实现原理 当用户扫描一个范围内的主机时,用户可以使用Wireshark抓包工具捕获第二层扫描发现。例如再次扫描192.168.6.0-255网段的主机,同时开启Wireshark工具。执行命令如下所示: root@kali:~# nmap -sn 192.168.6.0-255 Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-28 15:52 CST Nmap scan report for 192.168.6.1 Host is up (0.00014s latency). MAC Address: 14:E6:E4:AC:FB:20 (Tp-link Technologies CO.) Nmap scan report for 192.168.6.101 Host is up (0.000097s latency). MAC Address: 00:19:21:3F:C3:E5 (Elitegroup Computer System Co.) Nmap scan report for 192.168.6.104 Host is up (0.00011s latency). MAC Address: 00:E0:4D::EC:03 (Internet Initiative Japan) Nmap scan report for 192.168.6.107 Host is up (0.000s latency). MAC Address: 00:23:8B:C4:05:BF (Quanta Computer) Nmap scan report for 192.168.6.109 Host is up (0.00020s latency). MAC Address: 50:E5:49:19:5E:6B (Giga-byte Technology Co.) Nmap scan report for 192.168.6.113 Host is up (0.0066s latency). MAC Address: 00:C1:40:95:11:15 (Unknown) Nmap scan report for 192.168.6.102 Host is up. Nmap done: 256 IP addresses (7 hosts up) scanned in 1.96 seconds 输出的信息,显示了指定的扫描范围内活跃的主机。此时,返回到Wireshark界面将看到如图2.3所示的界面。 www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 图2.3 扫描二层发现 ·14· 从该界面显示的包中,可以看到都是一些ARP广播包。只要当请求的主机处于活动状态时,才会看到ARP响应包。 2.2.4 使用NetDiscover工具 NetDiscover工具也可以用来扫描局域网内MAC地址对应的IP地址。该工具在无线网络环境中非常有用。本节将介绍使用NetDiscover工具,实施第二层扫描发现。 1.NetDiscover工具的基本使用 如果要使用NetDiscover工具实现ARP发现,在局域网中必须至少有一个操作系统可以响应ARP请求。这里使用了多台操作系统,包括Kali Linux、RHEL、Windows XP、Windows 7、Windows 8。 使用NetDiscover工具扫描192.168.6.0/24网段内所有主机,执行命令如下所示: root@kali:~# netdiscover -r 192.168.6.0/24 Currently scanning: Finished! | Screen View: Unique Hosts 10 Captured ARP Req/Rep packets, from 6 hosts. Total size: 600 _____________________________________________________________________________ IP At MAC Address Count Len MAC Vendor ------------------------------------------------------------------------------------------------------------------------------- 192.168.6.1 14:e6:e4:ac:fb:20 04 240 Unknown vendor 192.168.6.101 00:19:21:3f:c3:e5 01 060 Elitegroup Computer System Co. 192.168.6.104 00:e0:4d::ec:03 01 060 INTERNET INITIATIVE JAPAN, INC 192.168.6.107 00:23:8b:c4:05:bf 01 060 Unknown vendor 192.168.6.109 50:e5:49:19:5e:6b 02 120 Unknown vendor 192.168.6.113 00:c1:40:95:11:15 01 060 Unknown vendor 从以上输出的信息中,可以看到活跃主机的IP地址和MAC地址。 NetDiscover工具也可以用来扫描一个文本文件中的IP地址,使用-l选项指定IP地址列表文件。执行命令如下所示: root@kali:~# netdiscover -l iplist.txt Currently scanning: Finished! | Screen View: Unique Hosts 37 Captured ARP Req/Rep packets, from 6 hosts. Total size: 2220 _____________________________________________________________________________ IP At MAC Address Count Len MAC Vendor -------------------------------------------------------------------------------------------------------------------------------- 192.168.6.1 14:e6:e4:ac:fb:20 07 420 Unknown vendor 192.168.6.101 00:19:21:3f:c3:e5 06 360 Elitegroup Computer System Co. 192.168.6.104 00:e0:4d::ec:03 06 360 INTERNET INITIATIVE JAPAN, INC 192.168.6.107 00:23:8b:c4:05:bf 06 360 Unknown vendor 192.168.6.109 50:e5:49:19:5e:6b 06 360 Unknown vendor 192.168.6.113 00:c1:40:95:11:15 06 360 Unknown vendor 以上输出的结果,就是iplist.txt文件中能够正确响应ARP请求的IP地址。 2.使用NetDiscover实施被动扫描发现 NetDiscover还有一个独特的功能,可以实现被动扫描发现。当网络中有扫描系统在交互数据时,NetDiscover可以记录并收集ARP响应的数据。这种被动式扫描可以使用NetDiscover的-p选项来实现。 www.daxueba.net——大学霸 ·15· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 【实例2-19】使用NetDiscover工具实现被动扫描发现。执行命令如下所示: root@kali:~# netdiscover -p Currently scanning: (passive) | Screen View: Unique Hosts 8 Captured ARP Req/Rep packets, from 4 hosts. Total size: 480 _____________________________________________________________________________ IP At MAC Address Count Len MAC Vendor -------------------------------------------------------------------------------------------------------------------------------- 192.168.6.107 00:23:8b:c4:05:bf 03 180 Unknown vendor 192.168.6.1 14:e6:e4:ac:fb:20 02 120 Unknown vendor 192.168.6.109 50:e5:49:19:5e:6b 01 060 Unknown vendor 192.168.6.101 00:19:21:3f:c3:e5 02 120 Elitegroup Computer System Co. 输出的信息,表示这几个IP地址的主机正在进行数据交互。如果没有主机发送ARP包的话,执行以上命令后,没有地址列表的显示,仅显示如下信息: Currently scanning: (passive) | Screen View: Unique Hosts 0 Captured ARP Req/Rep packets, from 0 hosts. Total size: 0 _____________________________________________________________________________ IP At MAC Address Count Len MAC Vendor ----------------------------------------------------------------------------- 当用户在进行实验时,可以通过运行ping命令以产生ARP包。 2.2.5 使用Metasploit工具 Metasploit是一款开源的安全漏洞检测工具。该工具主要的功能,就是有大量的辅助模块可以用于各种扫描并进行信息收集。在其中,有一个特别的辅助模块可以用来在本地网络中实现ARP扫描。本节将介绍使用Metasploit工具,实现ARP扫描发现。 【实例2-20】使用Metasploit工具实施ARP扫描发现。具体操作步骤如下所示: (1)启动Metasploit工具,执行命令如下所示: root@kali:~# msfconsole , , / \\ ((__---,,,---__)) (_) O O (_)_________ \\ _ / |\\ o_o \\ M S F | \\ \\ _____ | * ||| WW||| ||| ||| Validate lots of vulnerabilities to demonstrate exposure with Metasploit Pro -- Learn more on http://rapid7.com/metasploit =[ metasploit v4.10.0-2014091001 [core:4.10.0.pre.2014091001 api:1.0.0]] + -- --=[ 1339 exploits - 736 auxiliary - 214 post ] + -- --=[ 340 payloads - 35 encoders - 8 nops ] + -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ] msf > 输出的信息显示了Metasploit的一些信息,如该工具中包括的模块、载荷等。其中,msf>提示符表 www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 ·16· 示成功登陆到了Metasploit工具的交互界面。 (2)在Metasploit工具中的arp_sweep模块,可以用来扫描ARP发现。首先选择arp_sweep模块,执行命令如下所示: msf > use auxiliary/scanner/discovery/arp_sweep msf auxiliary(arp_sweep) > 从输出的信息中可以看到,成功选择了arp_sweep模块。 (3)使用show options选项查看该模块中的可配置参数,如下所示: msf auxiliary(arp_sweep) > show options Module options (auxiliary/scanner/discovery/arp_sweep): Name Current Setting Required Description ---- ------------------- --------- ------------------------------------------------------------- INTERFACE no The name of the interface RHOSTS yes The target address range or CIDR identifier SHOST no Source IP Address SMAC no Source MAC Address THREADS 1 yes The number of concurrent threads TIMEOUT 5 yes The number of seconds to wait for new data 以上输出信息显示了arp_sweep模块中,可配置的选项参数。其中,Required列值yes的选项是必须配置的,值为no的选项可以配置也可不配置。这里通过调用ifconfig命令,查看下当前系统网络配置情况。如下所示: msf auxiliary(arp_sweep) > ifconfig eth0 [*] exec: ifconfig eth0 eth0 Link encap:Ethernet HWaddr 50:e5:49:eb:46:8d inet addr:192.168.6.102 Bcast:255.255.255.255 Mask:255.255.255.0 inet6 addr: fe80::52e5:49ff:feeb:468d/ Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3479 errors:0 dropped:0 overruns:0 frame:0 TX packets:5550 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:703434 (686.9 KiB) TX bytes:391261 (382.0 KiB) 从以上输出的信息中,可以看到当前主机的IP地址为192.168.6.102,MAC地址为50:e5:49:eb:46:8d。 (4)下面配置arp_sweep模块中的选项参数,如下所示: msf auxiliary(arp_sweep) > set interface eth0 #设置网络接口 #设置扫描范围 #设置源主机IP地址 #设置源主机MAC地址 #设置最大线程数 #设置等待新数据的最大时间 interface => eth0 msf auxiliary(arp_sweep) > set RHOSTS 192.168.6.0/24 RHOSTS => 192.168.6.0/24 msf auxiliary(arp_sweep) > set SHOST 192.168.6.102 SHOST => 192.168.6.102 msf auxiliary(arp_sweep) > set SMAC 50:e5:49:eb:46:8d SMAC => 50:e5:49:eb:46:8d msf auxiliary(arp_sweep) > set THREADS 20 THREADS => 20 msf auxiliary(arp_sweep) > set TIMEOUT 1 TIMEOUT => 1 执行以上命令后,就将arp_sweep模块中的所有选项重新配置了一下。这时候,可以再次使用show options命令查看配置情况。执行命令如下所示: msf auxiliary(arp_sweep) > show options www.daxueba.net——大学霸 ·17· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 Module options (auxiliary/scanner/discovery/arp_sweep): Name Current Setting Required Description ---- --------------- ------------ ------------------------------------------------------------- INTERFACE eth0 no The name of the interface RHOSTS 192.168.6.0/24 yes The target address range or CIDR identifier SHOST 192.168.6.102 no Source IP Address SMAC 50:e5:49:eb:46:8d no Source MAC Address THREADS 20 yes The number of concurrent threads TIMEOUT 1 yes The number of seconds to wait for new data 从输出的信息中,可以看到arp_sweep模块中的所有选项都进行了配置。此时就可以运行run命令,进行扫描了。 (5)启动扫描。运行该模块后,将显示发现使用ARP的活动主机及网络适配器提供商。执行命令如下所示: msf auxiliary(arp_sweep) > run [*] 192.168.6.1 appears to be up (TP-LINK TECHNOLOGIES CO., LTD.). [*] 192.168.6.101 appears to be up (Elitegroup Computer System Co.). [*] 192.168.6.104 appears to be up (INTERNET INITIATIVE JAPAN, INC). [*] 192.168.6.107 appears to be up (Quanta Computer Inc.). [*] 192.168.6.109 appears to be up (GIGA-BYTE TECHNOLOGY CO.,LTD.). [*] 192.168.6.113 appears to be up (UNKNOWN). [*] Scanned 256 of 256 hosts (100% complete) [*] Auxiliary module execution completed 从输出的信息中,可以看到有六台使用ARP的活动主机。扫描到的每个地址后面,括号中的内容就是其主机的网络适配器提供商。 2.3 实施第三层扫描发现 OSI的第三层就是网络层。在网络层中主要工作的协议就是IP协议。在系统中,通常执行的ping命令就会使用IP协议。本节将介绍使用各种工具实施第三层扫描发现。 2.3.1 使用ICMP Ping工具 Ping属于一个通信协议,是TCP/IP协议的一部分。使用Ping命令,可以检查网络的连通性和活动状态,并且可以很好的帮助用户分析和判断网络故障。Ping工具可以使用在Windows、Linux及Unix操作系统中。下面将介绍使用ICMP Ping工具,扫描三层发现。 1.Ping工具的基本使用 Ping工具的使用方法比较简单。例如使用Ping工具,测试当前主机与192.168.6.113主机的连通性。执行命令如下所示: root@kali:~# ping 192.168.6.113 PING 192.168.6.113 (192.168.6.113) 56(84) bytes of data. bytes from 192.168.6.113: icmp_req=1 ttl=128 time=5.99 ms bytes from 192.168.6.113: icmp_req=2 ttl=128 time=1.03 ms bytes from 192.168.6.113: icmp_req=3 ttl=128 time=3.27 ms bytes from 192.168.6.113: icmp_req=4 ttl=128 time=1.00 ms www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 ^C --- 192.168.6.113 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3003ms rtt min/avg/max/mdev = 1.006/2.828/5.996/2.047 ms ·18· 输出的信息是目标主机192.168.6.113响应的ICMP包。用户可以发现在输出的信息中有个^C(Ctrl+C)符号。这是因为在Linux下执行Ping命令后,不会自动停止Ping的。不像Windows一样,默认只发送四个ICMP Echo request包就停止了。但是,用户也可以使用ping命令的-c选项,指定发送的Echo request包。 当使用Ping工具向一台主机发送Echo request包后,如果想要接收到Echo reply包需要具备几个条件的。如下所示: (1)指定的IP地址必须被分配到一个系统。 (2)该系统必须是活动的并且在线。 (3)从扫描系统到目标IP,必须有一个有效的主机。 (4)该系统必须配置对ICMP数据进行响应。 (5)扫描系统和目标IP之间没有防火墙。在Windows 7中,如果自带的防火墙开启的话,也是无法Ping通的。在Windows XP、Windows 8和Linux下,自带的防火墙不影响Ping。 之所以实现ICMP发现具备以上好多个因素,是因为ICMP是不可靠的。ICMP协议与ARP协议不同,因为它是一个路由协议,可以用来发现局域网之前的主机。 【实例2-21】向指定的目标主机192.168.6.113发送两个Ping包。执行命令如下所示: root@kali:~# ping 192.168.6.113 -c 2 PING 192.168.6.113 (192.168.6.113) 56(84) bytes of data. bytes from 192.168.6.113: icmp_req=1 ttl=128 time=1.57 ms bytes from 192.168.6.113: icmp_req=2 ttl=128 time=2.23 ms --- 192.168.6.113 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 1.571/1.904/2.237/0.333 ms 从以上输出的信息中,可以看到目标主机只响应了两个Ping包就自动停止了Ping。 2.构建Ping命令的Shell脚本 ARPing工具可以编写Shell脚本,实现循环扫描多个IP地址。同样的Ping命令,也可以编写Shell脚本来实现多台主机之间进行三层发现。如果要编写这样一个Shell脚本,需要了解Ping请求成功和失败的多种响应。下面来看一个例子,来帮助用来了解Ping请求的各种响应。 【实例2-22】使用Ping工具,向一个活动并且可以响应ICMP的主机发送Ping包。执行命令如下所示: root@kali:~# ping 192.168.6.107 -c 1 PING 192.168.6.107 (192.168.6.107) 56(84) bytes of data. bytes from 192.168.6.107: icmp_req=1 ttl=128 time=0.491 ms --- 192.168.6.107 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.491/0.491/0.491/0.000 ms 从输出的信息中,可以看到接收到一个响应包。接下来使用Ping工具,ping一个无响应的地址。执行命令如下所示: root@kali:~# ping 192.168.6.109 -c 1 PING 192.168.6.109 (192.168.6.109) 56(84) bytes of data. --- 192.168.6.109 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms www.daxueba.net——大学霸 ·19· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 从输出的信息中,可以看到目标主机192.168.6.109没有响应当前主机发送的Ping请求。 根据以上例子的输出信息,可以发现在响应的包信息中包含由一个字符串bytes from。所以,用户就可以通过使用grep和cut命令提取成功响应Ping请求主机的IP地址。如使用grep命令过滤包含bytes from字符串的信息,执行命令如下所示: root@kali:~# ping 192.168.6.107 -c 1 | grep \"bytes from\" bytes from 192.168.6.107: icmp_req=1 ttl=128 time=0.461 ms 从过滤出的信息中,使用cut命令提取目标主机的IP地址。如下所示: root@kali:~# ping 192.168.6.107 -c 1 | grep \"bytes from\" | cut -d \" \" -f 4 192.168.6.107: root@kali:~# ping 192.168.6.107 -c 1 | grep \"bytes from\" | cut -d \" \" -f 4 | cut -d \":\" -f 1 192.168.6.107 通过以上对Ping命令的使用,用户可以很清楚的了解Ping请求成功和未成功的响应信息。为了能够快速的识别响应ICMP Echo request的活动主机,下面编写一个Shell脚本。这里创建一个名为ping_sweep.sh的脚本文件,其内容如下所示: root@kali:~# vi ping_sweep.sh #!/bin/bash if [ \"$#\" -ne 1 ]; then echo \"Usage - ./ping_sweep.sh [/24 network address]\" echo \"Example - ./ping_sweep.sh 192.168.6.0\" echo \"Example will perform an ICMP ping sweep of the 192.168.6.0/24 network\" exit fi prefix=$(echo $1 | cut -d '.' -f 1-3) for addr in $(seq 1 254); do ping -c 1 $prefix.$addr | grep \"bytes from\" | cut -d \" \" -f 4 | cut -d \":\" -f 1 & done 以上就是ping_sweep.sh脚本的内容。接下来为该脚本添加执行权限,就可以运行了。如下所示: root@kali:~# chmod +x ping_sweep.sh root@kali:~# ./ping_sweep.sh Usage - ./ping_sweep.sh [/24 network address] Example - ./ping_sweep.sh 192.168.6.0 Example will perform an ICMP ping sweep of the 192.168.6.0/24 network 从输出的信息中,可以看到直接运行ping_sweep.sh脚本后,显示了该脚本的使用方法。 下面为ping_sweep.sh脚本指定扫描范围,执行命令如下所示: root@kali:~# ./ping_sweep.sh 192.168.6.0 192.168.6.1 192.168.6.102 192.168.6.104 192.168.6.107 192.168.6.113 输出的地址列表,就是192.168.6.0网段中能够响应Ping请求的活动主机。如果扫描后输出的结果较多时,用户也可以将输出结果重定向到一个文件中。如下所示: root@kali:~# ./ping_sweep.sh 192.168.6.0 > output4.txt root@kali:~# ls output4.txt output3.txt root@kali:~# cat output4.txt 192.168.6.1 www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 192.168.6.102 192.168.6.104 192.168.6.107 192.168.6.113 ·20· 以上输出的信息,就是使用ping_sweep.sh脚本扫描192.168.6.0网段后的输出结果。 2.3.2 使用Scapy工具 使用Scapy工具,也可以发送ICMP Echo request包。为了使用Scapy发送一个ICMP Echo请求,用户将需要启动堆叠层发送请求。当堆叠层时,最好的方法就是使用OSI模型。用户也可以堆叠多个层次,通过使用斜杠(/)分割每层。当生成一个ICMP Echo请求时,IP层必须先堆满一个ICMP request。下面将介绍使用Scapy工具,扫描OSI三层发现。 【实例2-23】使用Scapy工具扫描第三层发现。如下所示: (1)打开Scapy的交互控制台。执行命令如下所示: root@kali:~# scapy INFO: Can't import python gnuplot wrapper . Won't be able to plot. WARNING: No route found for IPv6 destination :: (no default route?) Welcome to Scapy (2.2.0) >>> 执行以上命令后,看到>>>提示符就表示成功打开了Scapy的交互控制台。 (2)指定一个IP变量,并查看IP信息。如下所示: >>> ip=IP() >>> ip.display() ###[ IP ]### version= 4 ihl= None tos= 0x0 len= None id= 1 flags= frag= 0 ttl= proto= ip chksum= None src= 127.0.0.1 dst= 127.0.0.1 \\options\\ #设置一个变量名为ip的变量 #查看IP变量的默认配置 以上输出信息显示了,IP变量的默认配置信息。根据以上信息,可以看到默认配置的发送和接收IP都使用的是回环地址127.0.0.1。如果想要改变默认的设置,通过[object].[attribute]等于期望的值来设置。如将目标IP地址设置为192.168.6.104,执行命令如下所示: >>> ip.dst=\"192.168.6.104\" #修改目标IP地址 执行以上命令后,目标IP地址将会被修改。 (3)为了确认目标IP地址是否被成功修改,使用display()函数查看。执行命令如下所示: >>> ip.display() ###[ IP ]### version= 4 www.daxueba.net——大学霸 #查看IP变量的配置 ·21· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 ihl= None tos= 0x0 len= None id= 1 flags= frag= 0 ttl= proto= ip chksum= None src= 192.168.6.102 dst= 192.168.6.104 \\options\\ 从输出的信息中,可以看到目标IP地址已经被修改为192.168.6.104。这时候,源IP地址也自动从回环地址更新为默认接口关联的IP地址。此时,IP对象的属性已经被修改。 (4)在包堆叠中创建第二层。这里被添加到堆叠中的第二层就是ICMP层,该层需要用户单独指定一个变量。如下所示: >>> ping=ICMP() >>> ping.display() #设置一个名为ping的变量 #查看ICMP属性的默认配置 ###[ ICMP ]### type= echo-request code= 0 chksum= None id= 0x0 seq= 0x0 以上就是ICMP属性的默认设置。在Scapy中,可以通过斜杠(/)分离每层并进行堆叠。如将IP和Ping层进行堆叠,执行命令如下所示: >>> ping_request=(ip/ping) >>> ping_request.display() ###[ IP ]### version= 4 ihl= None tos= 0x0 len= None id= 1 flags= frag= 0 ttl= proto= icmp chksum= None src= 192.168.6.102 dst= 192.168.6.104 \\options\\ ###[ ICMP ]### type= echo-request code= 0 chksum= None id= 0x0 seq= 0x0 #堆叠IP和Ping层 #查看整个堆 以上输出信息,显示了整个堆中的信息。用以上方法堆叠层的过程,通常被称为数据封装。现在这 www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 个层已经堆叠完成,此时就可以发送请求包了。 (5)使用sr1()函数来发送,执行命令如下所示: >>> >>> ping_reply=sr1(ping_request) #设置一个名为ping_reply的变量 Begin emission: .Finished to send 1 packets. * Received 2 packets, got 1 answers, remaining 0 packets >>> ping_reply.display() ·22· #查看ping_reply变量的响应内容 ###[ IP ]### version= 4L ihl= 5L tos= 0x0 len= 28 id= 14667 flags= frag= 0L ttl= proto= icmp chksum= 0xb377 src= 192.168.6.104 dst= 192.168.6.102 \\options\\ ###[ ICMP ]### type= echo-reply code= 0 chksum= 0xffff id= 0x0 seq= 0x0 ###[ Padding ]### load= '\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00' 从以上输出信息中,可以看到响应请求的目标主机地址为192.168.6.104。该地址被分配在本实验环境中的RHEL操作系统中。在ICMP层中类型为echo-reply,说明该包是一个Ping响应包。 用户也可以尝试使用相同的方法,向一个无法响应的目标地址发送Ping包。如下所示: >>> ip.dst=\"192.168.6.101\" >>> ping_request=(ip/ping) >>> ping_reply=sr1(ping_request) #设置目标IP地址 #设置变量 #发送Ping请求包 Begin emission: .Finished to send 1 packets. .......................................................................................................................................................................................................................^C Received 216 packets, got 0 answers, remaining 1 packets 从输出的信息中,可以看到响应的包数为0。说明当前主机无法响应,但是sr1()函数会一直监听,直到接收到响应。所以,这里使用Ctrl+C强制停止了发送数据包。由于目标主机无法响应,又没有设置一个超时值。所以,该Ping请求包回一直向目标主机发送。如果一个主机不活动或没有关联任何主机的话,将不会有任何响应被发送,并且在Scapy中不存在该功能。为了避免这种情况,用户可以定义一个超时值。如下所示: >>> ping_reply=sr1(ping_request,timeout=1) Begin emission: www.daxueba.net——大学霸 #定义超时值 ·23· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 Finished to send 1 packets. ............................ Received 28 packets, got 0 answers, remaining 1 packets 从以上输出信息中可以看到成功发送包后,如果一秒内没有收到响应将自动停止发送。 在Scapy中,通过为函数设置变量可以持续的操作。但是,这些函数不设置变量也可以直接调用函数。如下所示: >>> answer=sr1(IP(dst=\"192.168.6.104\")/ICMP(),timeout=1) Begin emission: .Finished to send 1 packets. * Received 2 packets, got 1 answers, remaining 0 packets >>> answer.display() ###[ IP ]### version= 4L ihl= 5L tos= 0x0 len= 28 id= 14668 flags= frag= 0L ttl= proto= icmp chksum= 0xb376 src= 192.168.6.104 dst= 192.168.6.102 \\options\\ ###[ ICMP ]### type= echo-reply code= 0 chksum= 0xffff id= 0x0 seq= 0x0 ###[ Padding ]### load= '\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00' 以上输出的信息,就是目标主机192.168.6.104响应给主机192.168.6.102的包。 通过直接调用函数的方法,也可以向一个无法响应的地址发送包。执行命令如下所示: >>> answer=sr1(IP(dst=\"192.168.6.101\")/ICMP(),timeout=1) Begin emission: .Finished to send 1 packets. ...................... Received 1 packets, got 0 answers, remaining 1 packets >>> answer.display() Traceback (most recent call last): File \" AttributeError: 'NoneType' object has no attribute 'display' 从以上输出的信息中,可以看到没有显示的属性。 Scapy中的各种响应,也可以用来生成一个脚本。使用该脚本可以实现,多个IP地址的ICMP请求。编写的脚本如下所示: www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 root@kali:~# vi pinger.py #!/usr/bin/python import logging logging.getLogger(\"scapy.runtime\").setLevel(logging.ERROR) from scapy.all import * if len(sys.argv) != 2: print \"Usage - ./pinger.py [/24 network address]\" print \"Example - ./pinger.py 192.168.6.0\" print \"Example will perform an ICMP scan of the 192.168.6.0/24 range\" sys.exit() address = str(sys.argv[1]) prefix = address.split('.')[0] + '.' + address.split('.')[1] + '.' + address.split('.')[2] + '.' for addr in range(1,254): answer=sr1(ARP(pdst=prefix+str(addr)),timeout=1,verbose=0) if answer == None: pass else: print prefix+str(addr) ·24· 这里创建了一个名为pinger.py的Python脚本。接下来为该脚本添加可执行权限后,就可以运行了。如下所示: root@kali:~# chmod +x pinger.py root@kali:~# ./pinger.py Usage - ./pinger.py [/24 network address] Example - ./pinger.py 192.168.6.0 Example will perform an ICMP scan of the 192.168.6.0/24 range 以上输出信息,显示了pinger.py脚本的使用方法。 下面使用pinger.py脚本扫描192.168.6.0网段的主机,执行命令如下所示: root@kali:~# ./pinger.py 192.168.6.0 192.168.6.1 192.168.6.101 192.168.6.104 192.168.6.107 192.168.6.109 192.168.6.113 以上输出信息显示了,在192.168.6.0/24范围内活动的IP地址列表。以上输出信息也可以重定向到一个文本文件中,如下所示: root@kali:~# ./pinger.py 192.168.6.0 > output5.txt root@kali:~# ls output5.txt output5.txt root@kali:~# cat output5.txt 192.168.6.1 192.168.6.101 192.168.6.104 192.168.6.107 192.168.6.109 192.168.6.113 用户也可以通过修改以上脚本,将一个IP地址列表作为输入。这里重新创建一个名为pinger1.py脚本文件,内容如下所示: www.daxueba.net——大学霸 ·25· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 root@Kali:~# vi pinger1.py #!/usr/bin/python import logging logging.getLogger(\"scapy.runtime\").setLevel(logging.ERROR) from scapy.all import * if len(sys.argv) != 2: print \"Usage - ./pinger.py [filename]\" print \"Example - ./pinger.py iplist.txt\" print \"Example will perform an ICMP ping scan of the IP addresses listed in iplist.txt\" sys.exit() filename = str(sys.argv[1]) file = open(filename,'r') for addr in file: ans=sr1(IP(dst=addr.strip())/ICMP(),timeout=1,verbose=0) if ans == None: pass else: print addr.strip() 编写好以上脚本后,并添加可执行权限。然后就可以运行该脚本了,如下所示: root@kali:~# ./pinger1.py Usage - ./pinger.py [filename] Example - ./pinger.py iplist.txt Example will perform an ICMP ping scan of the IP addresses listed in iplist.txt root@kali:~# ./pinger1.py iplist.txt 192.168.6.1 192.168.6.104 192.168.6.107 192.168.6.113 同样的,该脚本的输出也可以重定向到一个文件中。如下所示: root@kali:~# ./pinger1.py iplist.txt > output6.txt root@kali:~# ls output6.txt output6.txt root@kali:~# cat output6.txt 192.168.6.1 192.168.6.104 192.168.6.107 192.168.6.113 2.3.3 使用Nmap工具 Nmap是一个很好的工具,可以自动调整并实施第2、3、4层扫描发现。如果-sn选项用于Nmap扫描一个不存在本地网络段的IP地址时,ICMP Echo请求将被用来判断主机是否活动的。下面将介绍使用Nmap工具,扫描三层发现。 使用Nmap工具,扫描192.168.6.1三层发现。执行命令如下所示: root@kali:~# nmap -sn 192.168.6.1 Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-28 17:18 CST Nmap scan report for 192.168.6.1 Host is up (0.00014s latency). www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 MAC Address: 14:E6:E4:AC:FB:20 (Tp-link Technologies CO.) Nmap done: 1 IP address (1 host up) scanned in 13.13 seconds ·26· 从输出的信息中,可以看到扫描的设备是开启的,并且显示了扫描的详细信息,如扫描主机的MAC地址是14:E6:E4:AC:FB:20,扫描使用的时间。扫描结果的第四行信息中,显示了Tp-link technologies CO。这表示该主机是一个路由器。 使用Nmap也可以扫描一个范围内的IP地址,通过使用破折号(-)。Nmap默认是多线程的,并且并行运行多个线程。所以,Nmap返回的扫描结果非常快。如扫描192.168.6-255范围内的主机,执行命令如下所示: root@kali:~# nmap -sn 192.168.6.1-255 Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-28 17:19 CST Nmap scan report for 192.168.6.1 Host is up (0.00096s latency). MAC Address: 14:E6:E4:AC:FB:20 (Tp-link Technologies CO.) Nmap scan report for 192.168.6.101 Host is up (0.00013s latency). MAC Address: 00:19:21:3F:C3:E5 (Elitegroup Computer System Co.) Nmap scan report for 192.168.6.104 Host is up (0.00018s latency). MAC Address: 00:E0:4D::EC:03 (Internet Initiative Japan) Nmap scan report for 192.168.6.109 Host is up (0.00040s latency). MAC Address: 50:E5:49:19:5E:6B (Giga-byte Technology Co.) Nmap scan report for 192.168.6.113 Host is up (0.0037s latency). MAC Address: 00:C1:40:95:11:15 (Unknown) Stats: 0:00:29 elapsed; 254 hosts completed (5 up), 254 undergoing Host Discovery Parallel DNS resolution of 1 host. Timing: About 0.00% done Nmap scan report for 192.168.6.102 Host is up. Nmap done: 255 IP addresses (6 hosts up) scanned in 29.55 seconds 从输出的信息中,可以看到共扫描了255个IP地址。其中,六台主机的IP地址是活动的。 Nmap也可以用来扫描一个文本文件中的IP地址。下面以文本文件iplist.txt为例,使用Nmap进行扫描。iplist.txt文件内容如下所示: root@kali:~# cat iplist.txt 192.168.6.1 192.168.6.101 192.168.6.103 192.168.6.104 192.168.6.107 192.168.6.109 192.168.6.113 192.168.6.254 以上就是iplist.txt文件中的地址列表。接下来使用Nmap的-iL选项指定该文件,进行扫描。如下所示: root@kali:~# nmap -iL iplist.txt -sn Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-30 16:43 CST Nmap scan report for 192.168.6.1 Host is up (0.00044s latency). www.daxueba.net——大学霸 ·27· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 MAC Address: 14:E6:E4:AC:FB:20 (Tp-link Technologies CO.) Nmap scan report for 192.168.6.101 Host is up (0.00017s latency). MAC Address: 00:19:21:3F:C3:E5 (Elitegroup Computer System Co.) Nmap scan report for 192.168.6.104 Host is up (0.00012s latency). MAC Address: 00:E0:4D::EC:03 (Internet Initiative Japan) Nmap scan report for 192.168.6.109 Host is up (0.00040s latency). MAC Address: 50:E5:49:19:5E:6B (Giga-byte Technology Co.) Nmap scan report for 192.168.6.113 Host is up (0.0045s latency). MAC Address: 00:C1:40:95:11:15 (Unknown) Nmap done: 8 IP addresses (5 hosts up) scanned in 0.41 seconds 以上输出信息显示了,iplist.txt文件中活动主机的IP地址。从最后一行,可以看到共扫描了8个IP地址,其中5个地址是活动的。 2.3.4 使用Fping工具 Fping是一个与ping类似的工具。该工具可以用来法送ICMP Echo request包到一个单独的目标地址,来判断该主机是否活动。下面将介绍使用Fping工具扫描三层发现。 【实例2-24】使用Fping工具判断主机192.168.6.104是否是活动的。执行命令如下所示: root@kali:~# fping 192.168.6.104 192.168.6.104 is alive 从输出的信息中,可以看到该主机是活动的。如果目标地址没有响应的话,fping将返回给主机不可达的信息。 如使用Fping工具ping一个不存在的主机,如下所示: root@kali:~# fping 192.168.6.103 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.103 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.103 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.103 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.103 192.168.6.103 is unreachable 从输出的信息中,可以看到主机192.168.6.103不可达。在以上信息中可以看到Fping工具,默认向目标主机发送了四个请求包。用户也可以使用-c选项,指定发送的包数。如下所示: root@kali:~# fping 192.168.6.104 -c 1 192.168.6.104 : [0], 96 bytes, 0.20 ms (0.20 avg, 0% loss) 192.168.6.104 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 0.20/0.20/0.20 以上输出的信息,是目标主机192.168.6.104响应的数据包。从以上的输出信息中,如果不仔细分析的话,可能觉得无法理解。这里简单介绍一下输出结果,输出信息中的IP地址就是目标主机的IP地址。xmt表示尝试发送的数据包数,rcv表示接收的包数。%loss表示丢包的百分比。该例子中主机192.168.6.104是活动的,这个可以通过查看接收的包字节数、返回响应的延长时间来确定。用户也可以通过丢包的百分比来确定,如果%loss为%100的话,说明没有接收任何响应包。 当指定一个不存在的IP地址时,将没有包的响应信息,如下所示: root@kali:~# fping 192.168.6.103 -c 1 192.168.6.103 : xmt/rcv/%loss = 1/0/100% www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 ·28· 根据以上输出的信息,可以看到当前主机没有接收到任何响应包。 【实例2-25】使用Fping工具也可以扫描一连串的主机。在指定地址范围时,使用期望地址范围的第一个地址和最后一个地址作为fping的参数即可扫描。如下所示: root@kali:~# fping -g 192.168.6.100 192.168.6.104 192.168.6.102 is alive 192.168.6.104 is alive ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.100 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.100 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.100 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.100 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.103 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.103 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.103 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.103 192.168.6.100 is unreachable 192.168.6.101 is unreachable 192.168.6.103 is unreachable 执行以上命令表示扫描192.168.6.100-104范围内的活动主机。从输出的信息中,可以看到192.168.6.102和192.168.6.104是活动的;192.168.6.100、192.168.6.101、192.168.6.103是不可达。 Fping工具也可以循环的扫描动态生成地址列表中的每个地址,如下所示: root@kali:~# fping -g 192.168.6.0/24 192.168.6.1 is alive 192.168.6.102 is alive 192.168.6.104 is alive 192.168.6.113 is alive ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.2 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.3 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.4 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.5 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.6 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.7 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.8 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.9 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.10 ...... 执行以上命令后,将会扫描192.168.6.0/24整个网段中的所有IP地址。由于章节的原因,这里只列出了一部分内容。 Fping工具也可以用来扫描一个文本文件中指定的地址。例如,使用Fping工具扫描iplist.txt文件中的地址。执行命令如下所示: root@kali:~# fping -f iplist.txt 192.168.6.1 is alive 192.168.6.104 is alive 192.168.6.113 is alive ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.107 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.107 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.107 ICMP Host Unreachable from 192.168.6.102 for ICMP Echo sent to 192.168.6.107 192.168.6.107 is unreachable www.daxueba.net——大学霸 ·29· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 192.168.6.101 is unreachable 192.168.6.109 is unreachable 从以上输出的信息中,可以看到iplist.txt文件中的地址有三个是活动的,三个不可达。 2.3.5 使用Hping3工具 Hping是一个命令行下使用的TCP/IP数据包组装/分析工具。该工具的命令模式很像Unix下的ping命令。它不只能发送ICMP回应请求,还支持TCP、UDP、ICMP和RAW-IP协议。Hping有一个路由跟踪模式,能够在包含的通道之间传送文件。Hping常被用于检测网络和主机,其功能非常强大,可在多种操作系统下运行,如Linux、MacOS X、Windows等。Hping3是Hping的第三个版本。本节将介绍使用Hping3工具扫描OSI三层发现。 【实例2-26】使用Hping3扫描192.168.6.1的ICMP发现,执行命令如下所示: root@kali:~# hping3 192.168.6.1 --icmp HPING 192.168.6.1 (eth0 192.168.6.1): icmp mode set, 28 headers + 0 data bytes len=46 ip=192.168.6.1 ttl= id=41592 icmp_seq=0 rtt=0.2 ms len=46 ip=192.168.6.1 ttl= id=41593 icmp_seq=1 rtt=0.2 ms len=46 ip=192.168.6.1 ttl= id=41594 icmp_seq=2 rtt=0.2 ms len=46 ip=192.168.6.1 ttl= id=41595 icmp_seq=3 rtt=0.2 ms ^C --- 192.168.6.1 hping statistic --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.2/0.2/0.2 ms 以上输出的信息,是主机192.168.6.1响应的ICMP包。该工具和Ping工具一样,运行后不会自动停止,需要按下Ctrl+C停止发送数据包。用户也可以使用-c选项指定发送的包数,如下所示: root@kali:~# hping3 192.168.6.1 --icmp -c 2 HPING 192.168.6.1 (eth0 192.168.6.1): icmp mode set, 28 headers + 0 data bytes len=46 ip=192.168.6.1 ttl= id=41606 icmp_seq=0 rtt=0.2 ms len=46 ip=192.168.6.1 ttl= id=41607 icmp_seq=1 rtt=0.2 ms --- 192.168.6.1 hping statistic --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 0.2/0.2/0.2 ms 以上命令表示向主机192.168.6.1发送了两个包,并收到两个响应包。当指定的目标主机无法响应时,将接收不到任何响应包。如下所示: root@kali:~# hping3 192.168.6.101 --icmp -c 2 HPING 192.168.6.101 (eth0 192.168.6.101): icmp mode set, 28 headers + 0 data bytes --- 192.168.6.101 hping statistic --- 2 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms 从以上包信息中,可以看到发送了两个包,接收的包数为0。 为了帮助用户识别成功响应请求和未响应的包,可以同时执行两条命令,中间使用分号(;)分隔。其中,一条命令可以成功接收响应,一条命令接收不到响应。执行命令如下所示: root@kali:~# hping3 192.168.6.1 --icmp -c 1; hping3 192.168.6.101 --icmp -c 1 | grep \"len\" HPING 192.168.6.1 (eth0 192.168.6.1): icmp mode set, 28 headers + 0 data bytes len=46 ip=192.168.6.1 ttl= id=41658 icmp_seq=0 rtt=0.2 ms --- 192.168.6.1 hping statistic --- 1 packets transmitted, 1 packets received, 0% packet loss www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 round-trip min/avg/max = 0.2/0.2/0.2 ms --- 192.168.6.101 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms ·30· 从以上输出的信息中,可以看到接收到了主机192.168.6.1响应,没有接收到主机192.168.6.101的响应。由于成功接收到响应的包信息中包含有len字符串,所以在以上命令中使用grep命令进行了过滤。 用户也可以将hping3命令的输出结果重定向到一个文件中,如下所示: root@kali:~# hping3 192.168.6.1 --icmp -c 1 >> handle.txt --- 192.168.6.1 hping statistic --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.3/0.3/0.3 ms 从以上输出的信息中,可以看到成功响应了一个数据包。 root@kali:~# hping3 192.168.6.101 --icmp -c 1 >> handle.txt --- 192.168.6.101 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms 从输出的信息中,可以看到成功发送了一个包,接收的包为0。在以上命令中,使用了追加(>>)符号。所以,以上两个命令的输出结果不会被覆盖。此时查看handle.txt文件中的内容,如下所示: root@kali:~# cat handle.txt HPING 192.168.6.1 (eth0 192.168.6.1): icmp mode set, 28 headers + 0 data bytes len=46 ip=192.168.6.1 ttl= id=416 icmp_seq=0 rtt=0.3 ms HPING 192.168.6.101 (eth0 192.168.6.101): icmp mode set, 28 headers + 0 data bytes 输出的信息,就是执行前两个命令的输出结果。 用户可以以脚本的方式,将输出结果重定向到一个文件中,并且可以查看输出信息。如扫描192.168.6.0/24网段中,所有地址的活动情况。用户可以执行命令如下所示的脚本: root@kali:~# for addr in $(seq 1 254); do hping3 192.168.6.$addr --icmp -c 1 >> handle.txt & done [1] 119 [2] 11990 [3] 11991 [4] 11992 [5] 11993 [6] 11994 [7] 11995 [8] 11996 [9] 11997 [10] 11998 [11] 11999 [12] 12000 ....... --- 192.168.6.1 hping statistic --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 1.8/1.8/1.8 ms ...... --- 192.168.6.104 hping statistic --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 2.4/2.4/2.4 ms ...... --- 192.168.6.113 hping statistic --- www.daxueba.net——大学霸 ·31· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 10.2/10.2/10.2 ms ...... 执行以上命令后,将开始扫描192.168.6.0/24网段内所有主机,并将响应的包信息输入到handle.txt文件中。由于章节的原因,这里只显示了一部分信息。查看生成的handle.txt文件,并查看其内容。如下所示: root@kali:~# ls handle.txt root@kali:~# grep len handle.txt len=46 ip=192.168.6.1 ttl= id=416 icmp_seq=0 rtt=0.3 ms len=46 ip=192.168.6.1 ttl= id=41740 icmp_seq=0 rtt=1.8 ms len=46 ip=192.168.6.104 ttl= id=14666 icmp_seq=0 rtt=2.4 ms len=46 ip=192.168.6.113 ttl=128 id=29266 icmp_seq=0 rtt=10.2 ms 输出的信息显示了,成功响应主机的信息。 用户也可以使用cut命令,提取任何一个字段。如提取第二个空格前的字段,如下所示: root@kali:~# grep len handle.txt | cut -d \" \" -f 2 ip=192.168.6.1 ip=192.168.6.1 ip=192.168.6.104 ip=192.168.6.113 输出的信息中,可以看到成功提取了第二个空格之前的字段。 通过使用管道的方式,可以指定多个条件。如提取第二个空格和等于号(=)之前的字段。如下所示: root@kali:~# grep len handle.txt | cut -d \" \" -f 2 | cut -d \"=\" -f 2 192.168.6.1 192.168.6.1 192.168.6.104 192.168.6.113 通过以上的方法,可以看到成功扫描的多台活动主机。用户可以编写一个Shell脚本,将多个操作组合在一起。 如编写一个名为ping.sweep.sh的脚本文件,内容如下所示: root@kali:~# vi ping.sweep.sh #!/bin/bash if [ \"$#\" -ne 1 ]; then echo \"Usage - ./ping.sweep.sh [/24 network address]\" echo \"Example - ./ping.sweep.sh 192.168.6.0\" echo \"Example will perform an ICMP ping sweep of the 192.168.6.0/24 network and output to an output.txt file\" exit fi prefix=$(echo $1 | cut -d '.' -f 1-3) for addr in $(seq 1 254); do hping3 $prefix.$addr --icmp -c 1 >> handle.txt; done grep len handle.txt | cut -d \" \" -f 2 | cut -d \"=\" -f 2 >> output.txt rm handle.txt 在ping.sweep.sh文件中输入以上内容并保存。然后为该文件添加执行权限,即可运行该脚本文件。如下所示: www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 root@kali:~# chmod +x ping.sweep.sh root@kali:~# ./ping.sweep.sh Usage - ./ping.sweep.sh [/24 network address] Example - ./ping.sweep.sh 192.168.6.0 Example will perform an ICMP ping sweep of the 192.168.6.0/24 network and output to an output.txt file ·32· 输出的信息显示了,ping.sweep.sh脚本文件的使用方法。 使用ping.sweep.sh脚本,扫描192.168.6.0网段的所有主机。执行命令如下所示: root@kali:~# ./ping.sweep.sh 192.168.6.0 --- 192.168.6.1 hping statistic --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.3/0.3/0.3 ms --- 192.168.6.2 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms --- 192.168.6.3 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms ....... 当以上脚本运行完后,所有活动主机的IP地址将被输入到output.txt文件中。此时,可以使用ls命令查看该文件,并使用cat命令查看文件内容。如下所示: root@kali:~# ls output4.txt output4.txt root@kali:~# cat output4.txt 192.168.6.1 192.168.6.1 192.168.6.104 192.168.6.113 192.168.6.104 192.168.6.113 以上输出的信息,就是192.168.6.0/24网段内成功响应ICMP请求主机的IP地址。 2.4 实施第四层扫描发现 OSI模型的第四层是传输层,在该层中主要工作的协议就是TCP和UDP协议。本节将介绍使用各种工具实施第四层扫描发现。 2.4.1 使用Scapy工具 使用Scapy工具,可以发送一个TCP ACK包以了解主机是否是活动的。下面将介绍使用Scapy工具,扫描OSI四层发现。 1.TCP协议扫描发现 下面列举一个例子,使用Scapy工具将发送一个ACK包到TCP的80端口。该端口通常用于HTTP Web服务。启动Scapy工具,如下所示: root@kali:~# scapy www.daxueba.net——大学霸 ·33· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 INFO: Can't import python gnuplot wrapper . Won't be able to plot. WARNING: No route found for IPv6 destination :: (no default route?) Welcome to Scapy (2.2.0) >>> i=IP() #设置一个名为i的变量 >>> i.display() #查看i变量的默认设置 ###[ IP ]### version= 4 ihl= None tos= 0x0 len= None id= 1 flags= frag= 0 ttl= proto= ip chksum= None src= 127.0.0.1 dst= 127.0.0.1 \\options\\ >>> i.dst=\"192.168.184.142\" >>> i.display() ###[ IP ]### version= 4 ihl= None tos= 0x0 len= None id= 1 flags= frag= 0 ttl= proto= ip chksum= None src= 192.168.184.136 dst= 192.168.184.142 \\options\\ #修改i变量的目标IP地址 #查看i变量修改后的值 从以上输出的信息中,可以看到目标IP地址已被成功修改为192.168.184.142。 >>> t=TCP() >>> t.display() ###[ TCP ]### sport= ftp_data dport= http seq= 0 ack= 0 dataofs= None reserved= 0 flags= S window= 8192 chksum= None urgptr= 0 options= {} www.daxueba.net——大学霸 #设置一个名为t的变量 #查看t变量的默认设置 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 ·34· 从输出的信息中,可以看到目标端口号已经设置为http。接下来,需要修改一下TCP标志位。如下所示: >>> t.flags='A' >>> t.display() ###[ TCP ]### sport= ftp_data dport= http seq= 0 ack= 0 dataofs= None reserved= 0 flags= A window= 8192 chksum= None urgptr= 0 options= {} #设置TCP标志位,默认是S(SYN),这里修改为A(ACK) #查看t变量修改后的设置 从以上输出信息中,可以看到TCP的标志位已设置为A(ACK)。接下来,将IP和TCP添加到堆叠中。如下所示: >>> request=(i/t) >>> request.display() ###[ IP ]### version= 4 ihl= None tos= 0x0 len= None id= 1 flags= frag= 0 ttl= proto= tcp chksum= None src= 192.168.184.136 dst= 192.168.184.142 \\options\\ ###[ TCP ]### sport= ftp_data dport= http seq= 0 ack= 0 dataofs= None reserved= 0 flags= A window= 8192 chksum= None urgptr= 0 options= {} #设置request变量 #查看request变量中的配置 以上输出信息,显示了IP和TCP层的配置。现在,用户可以通过查看响应判断目标主机的状态。如下所示: >>> response=sr1(request) www.daxueba.net——大学霸 ·35· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 Begin emission: ......Finished to send 1 packets. * Received 7 packets, got 1 answers, remaining 0 packets 从以上输出信息中,可以看到发送了七个包,接收到1个包。接下来可以使用display()函数,查看包的详细信息,如下所示: >>> response.display() ###[ IP ]### version= 4L ihl= 5L tos= 0x0 len= 40 id= 0 flags= DF frag= 0L ttl= proto= tcp chksum= 0x4868 src= 192.168.184.142 dst= 192.168.184.136 \\options\\ ###[ TCP ]### sport= http dport= ftp_data seq= 0 ack= 0 dataofs= 5L reserved= 0L flags= R window= 0 chksum= 0xbd14 urgptr= 0 options= {} ###[ Padding ]### load= '\\x00\\x00\\x00\\x00\\x00\\x00' 以上输出的信息,表示目标主机192.168.184.142响应给源主机192.168.184.136一个TCP RST(R)标志位包,并且打开了活动主机上的TCP 80端口。用户可以将以上两个命令整合为一个命令,如下所示: >>> response=sr1(IP(dst=\"192.168.6.104\")/TCP(flags='A')) Begin emission: Finished to send 1 packets. * Received 1 packets, got 1 answers, remaining 0 packets >>> response.display() ###[ IP ]### version= 4L ihl= 5L tos= 0x0 len= 40 www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 id= 0 flags= DF frag= 0L ttl= proto= tcp chksum= 0x4868 src= 192.168.184.142 dst= 192.168.184.136 \\options\\ ###[ TCP ]### sport= http dport= ftp_data seq= 0 ack= 0 dataofs= 5L reserved= 0L flags= R window= 0 chksum= 0xbd14 urgptr= 0 options= {} ###[ Padding ]### load= '\\x00\\x00\\x00\\x00\\x00\\x00' ·36· 从以上包信息中,可以看到响应的包信息与前面命令的输出结果相同。用户也可以尝试关闭活动主机上的80端口,以查看是否有响应。执行命令如下所示: >>> response=sr1(IP(dst=\"192.168.184.142\")/TCP(dport=1111,flags='A')) Begin emission: ............Finished to send 1 packets. * Received 13 packets, got 1 answers, remaining 0 packets >>> response.display() ###[ IP ]### version= 4L ihl= 5L tos= 0x0 len= 40 id= 0 flags= DF frag= 0L ttl= proto= tcp chksum= 0x4868 src= 192.168.184.142 dst= 192.168.184.136 \\options\\ ###[ TCP ]### sport= 1111 dport= ftp_data seq= 0 ack= 0 www.daxueba.net——大学霸 ·37· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 dataofs= 5L reserved= 0L flags= R window= 0 chksum= 0xb90d urgptr= 0 options= {} ###[ Padding ]### load= '\\x00\\x00\\x00\\x00\\x00\\x00' 从以上输出的信息中,可以看到主机默认的TCP 80端口变为了1111(该端口是关闭的)。并且可以看到,向一台活动主机的开放和关闭端口发送请求后,响应的信息都一样。 当向一个不接收任何报文的端口发送时,该数据包将无法发送。所以,将接收不到任何响应。在Scapy中,看到的响应信息则是向目标端口发送的数据包。如向主机192.168.6.104上的80端口(该端口阻止接收任何报文)发送一个TCP请求,并查看响应信息。具体执行步骤如下所示: root@kali:~# scapy INFO: Can't import python gnuplot wrapper . Won't be able to plot. WARNING: No route found for IPv6 destination :: (no default route?) Welcome to Scapy (2.2.0) >>> i=IP() #设置一个名为i的变量 >>> i.display() #查看i变量的默认设置 ###[ IP ]### version= 4 ihl= None tos= 0x0 len= None id= 1 flags= frag= 0 ttl= proto= ip chksum= None src= 127.0.0.1 dst= 127.0.0.1 \\options\\ >>> i.dst=\"192.168.6.104\" >>> i.display() ###[ IP ]### version= 4 ihl= None tos= 0x0 len= None id= 1 flags= frag= 0 ttl= proto= ip chksum= None src= 192.168.6.102 www.daxueba.net——大学霸 #修改i变量的目标IP地址 #查看i变量修改后的值 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 dst= 192.168.6.104 \\options\\ ·38· 从以上输出的信息中,可以看到目标IP地址已被成功修改为192.168.6.104。 >>> t=TCP() >>> t.display() ###[ TCP ]### sport= ftp_data dport= http seq= 0 ack= 0 dataofs= None reserved= 0 flags= S window= 8192 chksum= None urgptr= 0 options= {} #设置一个名为t的变量 #查看t变量的默认设置 从输出的信息中,可以看到目标端口号已经设置为http。接下来,需要修改一下TCP标志位。如下所示: >>> t.flags='A' >>> t.display() ###[ TCP ]### sport= ftp_data dport= http seq= 0 ack= 0 dataofs= None reserved= 0 flags= A window= 8192 chksum= None urgptr= 0 options= {} #设置TCP标志位,默认是S(SYN),这里修改为A(ACK) #查看t变量修改后的设置 从以上输出信息中,可以看到TCP的标志位已设置为A(ACK)。接下来,将IP和TCP添加到堆叠中。如下所示: >>> request=(i/t) >>> request.display() ###[ IP ]### version= 4 ihl= None tos= 0x0 len= None id= 1 flags= frag= 0 ttl= proto= tcp chksum= None src= 192.168.6.102 www.daxueba.net——大学霸 #设置request变量 #查看request变量中的配置 ·39· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 dst= 192.168.6.104 \\options\\ ###[ TCP ]### sport= ftp_data dport= http seq= 0 ack= 0 dataofs= None reserved= 0 flags= A window= 8192 chksum= None urgptr= 0 options= {} 以上输出信息,显示了IP和TCP层的配置。现在,用户可以通过查看响应判断目标主机的状态。如下所示: >>> response=sr1(request) Begin emission: ......Finished to send 1 packets. * Received 2 packets, got 1 answers, remaining 0 packets 从以上输出信息中,可以看到发送了两个包,接收到一个响应包。接下来使用display()函数,查看包的详细信息,如下所示: >>> response.display() ###[ IP ]### version= 4L ihl= 5L tos= 0xc0 len= 68 id= 14668 flags= frag= 0L ttl= proto= icmp chksum= 0xb28e src= 192.168.6.104 dst= 192.168.6.102 \\options\\ ###[ ICMP ]### type= dest-unreach code= host-prohibited chksum= 0x8b2f unused= 0 ###[ IP in ICMP ]### version= 4L ihl= 5L tos= 0x0 len= 40 id= 1 www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 flags= frag= 0L ttl= proto= tcp chksum= 0xecb0 src= 192.168.6.102 dst= 192.168.6.104 \\options\\ ###[ TCP in ICMP ]### sport= ftp_data dport= http seq= 0 ack= 0 dataofs= 5L reserved= 0L flags= A window= 8192 chksum= 0x152 urgptr= 0 options= {} ·40· 以上输出的信息,显示了扫描主机发送给目标主机192.168.6.104的TCP ACK包。从IP in ICMP层和TCP in ICMP层中,也可以看到源地址和源端口都是扫描主机。 当发送一个包无响应时,用户可以使用timeout设置一个超时值,避免sr1()函数一直监听。执行命令如下所示: >>> response=sr1(IP(dst=\"192.168.6.101\")/TCP(dport=80,flags='A'),timeout=1) Begin emission: .Finished to send 1 packets. .......................... Received 27 packets, got 0 answers, remaining 1 packets 从以上输出信息中,可以看到没有收到主机192.168.6.101的响应包。 当扫描多个主机的IP地址时,用户可以考虑编写一个脚本来实现。下面编写一个名为ACK_ping.py的Python脚本,其内容如下所示: root@kali:~# vi ACK_ping.py #!/usr/bin/python import logging logging.getLogger(\"scapy.runtime\").setLevel(logging.ERROR) from scapy.all import * if len(sys.argv) != 2: print \"Usage - ./ACK_Ping.py [/24 network address]\" print \"Example - ./ACK_Ping.py 192.168.6.0\" print \"Example will perform a TCP ACK ping scan of the 192.168.6.0/24 range\" sys.exit() address = str(sys.argv[1]) prefix = address.split('.')[0] + '.' + address.split('.')[1] + '.' + address.split('.')[2] + '.' for addr in range(1,254): response = sr1(IP(dst=prefix+str(addr))/TCP(dport=80,flags='A'),timeout=1,verbose=0) try: if int(response[TCP].flags) == 4: print \"192.168.6.\"+str(addr) www.daxueba.net——大学霸 ·41· except: pass Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 以上脚本内容输入完成后,并为该脚本添加可执行权限。如下所示: root@kali:~# chmod +x ACK_ping.py root@kali:~# ./ACK_ping.py Usage - ./ACK_ping.py [/24 network address] Example - ./ACK_ping.py 192.168.6.0 Example will perform a TCP ACK ping scan of the 192.168.6.0/24 rang 输出的信息显示了ACK_ping.py脚本的使用方法。 下面使用ACK_ping.py脚本扫描192.168.6.0网段中,所有主机的第四层发现。执行命令如下所示: root@kali:~# ./ACK_ping.py 192.168.6.0 192.168.6.1 192.168.6.104 192.168.6.113 2.UDP协议扫描发现 使用Scapy,也可以扫描发现UDP协议。为了判断主机是否使用UDP协议,用户需要触发使用UDP协议活动主机的响应。下面将介绍使用Scapy工具,扫描UDP协议发现。如下所示: root@kali:~# scapy INFO: Can't import python gnuplot wrapper . Won't be able to plot. WARNING: No route found for IPv6 destination :: (no default route?) Welcome to Scapy (2.2.0) >>> i=IP() #设置一个名为i的变量 >>> i.dst=\"192.168.6.104\" #设置i变量的目标IP地址 >>> u=UDP() #设置一个名为u的变量 >>> request=(i/u) #将IP和UDP层加入堆叠中 >>> request.display() #查看IP和UDP层的配置 ###[ IP ]### version= 4 ihl= None tos= 0x0 len= None id= 1 flags= frag= 0 ttl= proto= udp chksum= None src= 192.168.6.102 dst= 192.168.6.104 \\options\\ ###[ UDP ]### sport= domain dport= domain len= None chksum= None 以上信息显示了IP和UDP层的配置信息。当判断一个主机是否处于活动状态,可以执行如下所示 的命令: >>> reply=sr1(request,timeout=1,verbose=1) www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 Begin emission: Finished to send 1 packets. Received 2 packets, got 1 answers, remaining 0 packets ·42· 从输出的信息中,可以看到接收到一个响应包。这表示,目标主机处于活动状态。用户也可以通过识别一个UDP端口,以确认是否是正在运行的服务。如下所示: >>> u.dport=123 #设置目标端口号 #向目标主机发送请求 >>> request=(i/u) >>> reply=sr1(request,timeout=1,verbose=1) Begin emission: Finished to send 1 packets. Received 1 packets, got 1 answers, remaining 0 packets >>> reply.display() ###[ IP ]### version= 4L ihl= 5L tos= 0xc0 len= 56 id= 14672 flags= frag= 0L ttl= proto= icmp chksum= 0xb296 src= 192.168.6.104 dst= 192.168.6.102 \\options\\ ###[ ICMP ]### type= dest-unreach code= port-unreachable chksum= 0x9e72 unused= 0 ###[ IP in ICMP ]### version= 4L ihl= 5L tos= 0x0 len= 28 id= 1 flags= frag= 0L ttl= proto= udp chksum= 0xecb1 src= 192.168.6.102 dst= 192.168.6.104 \\options\\ ###[ UDP in ICMP ]### sport= domain dport= ntp len= 8 chksum= 0x710f www.daxueba.net——大学霸 ·43· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 通过改变请求的目标端口号为123,并向该端口号发送了一个包。从输出的结果中,并且可以看到接收到一个响应。从响应的ICMP信息中可以看到代码(code)为port-unreable(端口不可达),这表明端口为123的服务未运行。 2.4.2 使用Nmap工具 在Nmap工具提供的选项中可以发现TCP和UDP主机。使用Nmap实现UDP发现已经被配置了唯一的有效载荷,为了触发来自服务的响应。下面将介绍使用Nmap工具,实施OSI第四层扫描发现。 使用Nmap工具的-PU选项,扫描主机192.168.6.101的UDP发现。执行命令如下所示: root@kali:~# nmap 192.168.6.101 -PU 53 -sn Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-28 18:18 CST Nmap scan report for 192.168.6.101 Host is up (0.00014s latency). MAC Address: 00:19:21:3F:C3:E5 (Elitegroup Computer System Co.) Nmap done: 1 IP address (1 host up) scanned in 13.20 seconds 输出的信息表示,主机192.168.6.101是活动的,并且UDP协议的53号端口也是开放的。 使用Nmap工具也可以实施一个范围内的UDP扫描发现,如实施192.168.6.0-255范围内UDP扫描发现,执行命令如下所示: root@kali:~# nmap 192.168.6.0-255 -PU 53 -sn Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-28 18:20 CST setup_target: failed to determine route to 53 (0.0.0.53) Nmap scan report for 192.168.6.1 Host is up (0.00014s latency). MAC Address: 14:E6:E4:AC:FB:20 (Tp-link Technologies CO.) Nmap scan report for 192.168.6.101 Host is up (0.00012s latency). MAC Address: 00:19:21:3F:C3:E5 (Elitegroup Computer System Co.) Nmap scan report for 192.168.6.104 Host is up (0.00024s latency). MAC Address: 00:E0:4D::EC:03 (Internet Initiative Japan) Nmap scan report for 192.168.6.109 Host is up (0.00028s latency). MAC Address: 50:E5:49:19:5E:6B (Giga-byte Technology Co.) Nmap scan report for 192.168.6.113 Host is up (0.011s latency). MAC Address: 00:C1:40:95:11:15 (Unknown) Nmap scan report for 192.168.6.102 Host is up. Nmap done: 256 IP addresses (6 hosts up) scanned in 27. seconds 从输出的信息中,可以看到共有六台主机上的UDP是活动的。 使用Nmap工具,可以扫描指定IP地址列表文件实现UDP扫描发现。例如,扫描iplist.txt文件中的IP地址主机,执行命令如下所示: root@kali:~# nmap -iL iplist.txt -sn -PU 53 Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-28 18:22 CST Nmap scan report for 192.168.6.1 Host is up (0.00040s latency). MAC Address: 14:E6:E4:AC:FB:20 (Tp-link Technologies CO.) www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 Nmap scan report for 192.168.6.104 Host is up (0.00015s latency). MAC Address: 00:E0:4D::EC:03 (Internet Initiative Japan) Nmap scan report for 192.168.6.101 Host is up (0.00014s latency). MAC Address: 00:19:21:3F:C3:E5 (Elitegroup Computer System Co.) Nmap scan report for 192.168.6.113 Host is up (0.0039s latency). MAC Address: 00:C1:40:95:11:15 (Unknown) Nmap scan report for 192.168.6.109 Host is up (0.00039s latency). MAC Address: 50:E5:49:19:5E:6B (Giga-byte Technology Co.) Nmap done: 8 IP addresses (5 hosts up) scanned in 13.36 seconds ·44· 从扫描的结果中,可以看到iplist.txt文件有八个IP地址,其中五台主机是活动的。 使用Nmap工具实施TCP扫描发现。例如扫描主机192.168.6.101上的TCP 80端口,执行命令如下所示: root@kali:~# nmap 192.168.6.101 -PA 80 -sn Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-28 18:24 CST Nmap scan report for 192.168.6.101 Host is up (0.00016s latency). MAC Address: 00:19:21:3F:C3:E5 (Elitegroup Computer System Co.) Nmap done: 1 IP address (1 host up) scanned in 13.22 seconds 从输出的信息中,可以看到主机192.168.6.101的80端口是开放的。 使用Nmap工具实施一个范围内主机的TCP扫描发现。执行命令如下所示: root@kali:~# nmap 192.168.6.0-255 -PA 80 -sn Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-28 18:24 CST Nmap scan report for 192.168.6.1 Host is up (0.00014s latency). MAC Address: 14:E6:E4:AC:FB:20 (Tp-link Technologies CO.) Nmap scan report for 192.168.6.101 Host is up (0.00013s latency). MAC Address: 00:19:21:3F:C3:E5 (Elitegroup Computer System Co.) Nmap scan report for 192.168.6.104 Host is up (0.00023s latency). MAC Address: 00:E0:4D::EC:03 (Internet Initiative Japan) Nmap scan report for 192.168.6.109 Host is up (0.00028s latency). MAC Address: 50:E5:49:19:5E:6B (Giga-byte Technology Co.) Nmap scan report for 192.168.6.113 Host is up (0.0091s latency). MAC Address: 00:C1:40:95:11:15 (Unknown) Nmap scan report for 192.168.6.102 Host is up. Nmap done: 256 IP addresses (6 hosts up) scanned in 27.82 seconds 从输出的信息中,可以看到扫描的地址范围中有六台主机是活动的。同时,也可以说明这几台主机上的80端口是开放的。 使用Nmap工具,也可以指定IP地址列表实现TCP扫描发现。执行命令如下所示: root@kali:~# nmap -iL iplist.txt -PA 80 -sn www.daxueba.net——大学霸 ·45· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-28 18:25 CST Nmap scan report for 192.168.6.1 Host is up (0.00042s latency). MAC Address: 14:E6:E4:AC:FB:20 (Tp-link Technologies CO.) Nmap scan report for 192.168.6.104 Host is up (0.00013s latency). MAC Address: 00:E0:4D::EC:03 (Internet Initiative Japan) Nmap scan report for 192.168.6.101 Host is up (0.00012s latency). MAC Address: 00:19:21:3F:C3:E5 (Elitegroup Computer System Co.) Nmap scan report for 192.168.6.113 Host is up (0.00s latency). MAC Address: 00:C1:40:95:11:15 (Unknown) Nmap scan report for 192.168.6.109 Host is up (0.00024s latency). MAC Address: 50:E5:49:19:5E:6B (Giga-byte Technology Co.) Nmap done: 8 IP addresses (5 hosts up) scanned in 13.39 seconds 输出的信息,显示了iplist.txt文件中TCP 80端口开放的主机。 2.4.3 使用Hping3工具 Hping3是一个基于Linux命令行的TCP/IP工具。使用该工具,可以很好的对OSI第四层的TCP、UDP协议进行扫描发现。下面将介绍使用Hping3工具,实施第四层扫描发现。 1.使用Hping3实施UDP协议扫描发现 使用Hping3工具的--dup选项,指定UDP模式并进行扫描。执行命令如下所示: root@kali:~# hping3 --udp 192.168.6.104 HPING 192.168.6.104 (eth0 192.168.6.104): udp mode set, 28 headers + 0 data bytes ICMP Unreachable type=10 from ip=192.168.6.104 name=UNKNOWN status=0 port=2187 seq=0 ICMP Unreachable type=10 from ip=192.168.6.104 name=UNKNOWN status=0 port=2188 seq=1 ICMP Unreachable type=10 from ip=192.168.6.104 name=UNKNOWN status=0 port=21 seq=2 ICMP Unreachable type=10 from ip=192.168.6.104 name=UNKNOWN status=0 port=2190 seq=3 ICMP Unreachable type=10 from ip=192.168.6.104 name=UNKNOWN status=0 port=2223 seq=36 ^C --- 192.168.6.104 hping statistic --- 37 packets transmitted, 24 packets received, 36% packet loss round-trip min/avg/max = 0.2/5500.7/20001.9 ms 当以UDP模式运行hping3命令时,发现将会一直扫描下去。除非使用-c选项,指定一个扫描的数据包数。所以,在该命令中使用Ctrl+C强制停止了hping3命令的运行。 【实例2-27】使用hping3工具,指定向主机192.168.6.104发送一个UDP数据包。执行命令如下所示: root@kali:~# hping3 --udp 192.168.6.104 -c 1 HPING 192.168.6.104 (eth0 192.168.6.104): udp mode set, 28 headers + 0 data bytes www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 ICMP Unreachable type=10 from ip=192.168.6.104 name=UNKNOWN status=0 port=2127 seq=0 --- 192.168.6.104 hping statistic --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 61.0/61.0/61.0 ms ·46· 从以上输出信息中,可以看到接收了一个包。 Hping3默认不支持扫描多个系统,但是可以通过编写脚本来实现。如果要编写脚本,首先要了解显示活动主机和未活动主机的信息。下面看一个未响应主机的例子,如下所示: root@kali:~# hping3 --udp 192.168.6.113 -c 1 HPING 192.168.6.113 (eth0 192.168.6.113): udp mode set, 28 headers + 0 data bytes --- 192.168.6.113 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms 从输出的信息中,可以看到没有接收到任何包。根据以上两个输出结果,可以看到正确响应的主机信息中包含由一个ICMP Unreachable字符串。所以,用户可以使用grep命令过滤Unreachable字符串的信息。如下所示: root@kali:~# hping3 --udp 192.168.6.104 -c 1;hping3 --udp 192.168.6.101 -c 1 | grep \"Unreachable\" HPING 192.168.6.104 (eth0 192.168.6.104): udp mode set, 28 headers + 0 data bytes ICMP Unreachable type=10 from ip=192.168.6.104 name=UNKNOWN status=0 port=1126 seq=0 --- 192.168.6.104 hping statistic --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 16.0/16.0/16.0 ms --- 192.168.6.101 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms 从以上输出信息中,可以看到主机192.168.6.104发送了响应包。 用户可以将hping3的运行结果输入到一个文件中。下面使用hping3工具,分别向主机192.168.6.104和主机192.168.6.101发送请求。执行命令如下所示: root@kali:~# hping3 --udp 192.168.6.104 -c 1 >> handle.txt --- 192.168.6.104 hping statistic --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 15.4/15.4/15.4 ms root@kali:~# hping3 --udp 192.168.6.101 -c 1 >> handle.txt --- 192.168.6.101 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms 从以上的输出信息中,可以看到主机192.168.6.104发送了响应包,主机192.168.6.101无响应。此时,查看handle.txt文件中导入的信息。如下所示: root@kali:~# cat handle.txt HPING 192.168.6.104 (eth0 192.168.6.104): udp mode set, 28 headers + 0 data bytes ICMP Unreachable type=10 from ip=192.168.6.104 name=UNKNOWN status=0 port=1371 seq=0 HPING 192.168.6.101 (eth0 192.168.6.101): udp mode set, 28 headers + 0 data bytes 从以上输出的信息中,可以看到主机192.168.6.104响应的包信息。 当用户想要在hping3命令的将输出导入到一个文件时,同时也想查看输出结果。这时候,可以在终 www.daxueba.net——大学霸 ·47· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 端运行一个脚本。执行命令如下所示: root@kali:~# for addr in $(seq 1 254); do hping3 --udp 192.168.6.$addr -c 1 >> handle.txt; done --- 192.168.6.1 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms --- 192.168.6.2 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms --- 192.168.6.3 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms --- 192.168.6.4 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms --- 192.168.6.5 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms ...... 执行以上命令后,将会实施192.168.6.1-254范围内所有主机的第四层扫描发现。这里由于章节的原因,只列出了一少部分内容。当以上命令运行完后,将会生成一个名为handle.txt文件。可以使用ls命令查看,如下所示: root@kali:~# ls handle.txt 从输出的信息中,可以看到handle.txt文件已经生成。在该文件中,保存了hping3命令的运行结果。由于在该文件中的内容较多,下面使用grep命令过滤成功响应的包信息。执行命令如下所示: root@kali:~# grep Unreachable handle.txt HPING 192.168.6.104 (eth0 192.168.6.104): udp mode set, 28 headers + 0 data bytes ICMP Unreachable type=10 from ip=192.168.6.104 name=UNKNOWN status=0 port=2833 seq=0 从以上输出的信息中,可以看到只有主机192.168.6.104发送了响应包。如果活动的主机较多时,用户也可以使用cut命令提取单个字段。如下所示: root@kali:~# grep Unreachable handle.txt | cut -d \" \" -f 5 ip=192.168.6.104 root@kali:~# grep Unreachable handle.txt | cut -d \" \" -f 5 | cut -d \"=\" -f 2 192.168.6.104 从以上输出的信息中,可以看到提取了一个IP地址字段。 如果扫描的主机较多时,用户可以采用脚本的方式来实现。例如,编写一个名为udp_sweep.sh的Shell脚本文件,执行命令如下所示: root@kali:~# vi udp_sweep.sh #!/bin/bash if [ \"$#\" -ne 1 ]; then echo \"Usage - ./udp_sweep.sh [/24 network address]\" echo \"Example - ./udp_sweep.sh 192.168.6.0\" echo \"Example will perform a UDP ping sweep of the 192.168.6.0/24 network and output to an output.txt file\" exit fi prefix=$(echo $1 | cut -d '.' -f 1-3) for addr in $(seq 1 254); do www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 hping3 $prefix.$addr --udp -c 1 >> handle.txt; done grep Unreachable handle.txt | cut -d \" \" -f 5 | cut -d \"=\" -f 2 >> output.txt rm handle.txt ·48· 编写好以上脚本后,就需要为该文件添加可执行权限。然后,就可以使用该脚本扫描多个主机了。为udp_sweep.sh脚本添加可执行权限,执行命令如下所示: root@kali:~# chmod +x udp_sweep.sh root@kali:~# ./udp_sweep.sh Usage - ./udp_sweep.sh [/24 network address] Example - ./udp_sweep.sh 192.168.6.0 Example will perform a UDP ping sweep of the 192.168.6.0/24 network and output to an output.txt file 执行以上脚本后,将输出该脚本的使用方法。从以上信息中,可以看到运行该脚本时需要指定扫描主机范围。 使用udp_sweep.sh脚本扫描192.168.6.0网段的活动主机,执行命令如下所示: root@kali:~# ./udp_sweep.sh 192.168.6.0 --- 192.168.6.1 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms --- 192.168.6.2 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms --- 192.168.6.3 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms ...... 执行以上脚本后,将开始扫描192.168.6.0网段中的所有主机。扫描到所有活动主机的IP地址,将会被输入到output.txt文件中。 查看output.txt文件中的内容,显示结果如下所示: root@kali:~# cat output.txt 192.168.6.1 192.168.6.101 192.168.6.104 192.168.6.113 2.使用Hping3实施TCP扫描发现 用户也可以使用hping3实现TCP发现。hping3默认使用的就是TCP模式,并且该模式可以通过IP地址进行扫描。例如实施对主机192.168.6.104的TCP扫描发现,执行命令如下所示: root@kali:~# hping3 192.168.6.104 HPING 192.168.6.104 (eth0 192.168.6.104): NO FLAGS are set, 40 headers + 0 data bytes ICMP Unreachable type=10 from ip=192.168.6.104 name=UNKNOWN ICMP Unreachable type=10 from ip=192.168.6.104 name=UNKNOWN ICMP Unreachable type=10 from ip=192.168.6.104 name=UNKNOWN ICMP Unreachable type=10 from ip=192.168.6.104 name=UNKNOWN ^C --- 192.168.6.104 hping statistic --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms 以上输出的信息,表示主机192.168.6.104成响应了客户端的Ping请求。执行以上命令后,hping3 www.daxueba.net——大学霸 ·49· Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 不会自动停止运行。所以,需要按下Ctrl+C强制停止。 用户也可以编写一个Shell脚本扫描TCP协议。为了更好的编写脚本,用户需要了解目标主机响应和未响应的消息。下面分别运行一个有响应的和未响应的hping3命令,如下所示: root@kali:~# hping3 192.168.6.104 -c 1 HPING 192.168.6.104 (eth0 192.168.6.104): NO FLAGS are set, 40 headers + 0 data bytes ICMP Unreachable type=10 from ip=192.168.6.104 name=UNKNOWN --- 192.168.6.104 hping statistic --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms 从以上输出信息中,可以看到接收到一个数据包。 root@kali:~# hping3 192.168.6.101 -c 1 HPING 192.168.6.101 (eth0 192.168.6.101): NO FLAGS are set, 40 headers + 0 data bytes --- 192.168.6.101 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms 从以上输出信息中,可以看到当前主机没有接收到目标主机的响应包。 接下来就可以编写Shell脚本了,下面编写一个名为tcp_sweep.sh的Shell脚本文件。脚本内容如下所示: root@kali:~# vi tcp_sweep.sh #!/bin/bash if [ \"$#\" -ne 1 ]; then echo \"Usage - ./tcp_sweep.sh [/24 network address]\" echo \"Example - ./tcp_sweep.sh 192.168.6.0\" echo \"Example will perform a TCP ping sweep of the 192.168.6.0/24 network and output to an output.txt file\" exit fi prefix=$(echo $1 | cut -d '.' -f 1-3) for addr in $(seq 1 254); do hping3 $prefix.$addr -c 1 >> handle.txt; done grep len handle.txt | cut -d \" \" -f 2 | cut -d \"=\" -f 2 >> output.txt rm handle.txt 编写并保存以上脚本内容。然后,为该脚本添加执行权限。如下所示: root@kali:~# chmod +x tcp_sweep.sh 执行以上命令后,tcp_sweep.sh脚本就有了可执行权限。下面运行一下编写好的脚本,不使用任何参数。如下所示: root@kali:~# ./tcp_sweep.sh Usage - ./tcp_sweep.sh [/24 network address] Example - ./tcp_sweep.sh 192.168.6.0 Example will perform a TCP ping sweep of the 192.168.6.0/24 network and output to an output.txt file 从输出的信息中,可以看到显示了tcp_sweep.sh脚本的使用方法。 使用tcp_sweep.sh脚本,扫描192.168.6.0网段内容所有主机的第四层TCP协议发现。执行命令如下所示: root@kali:~# ./tcp_sweep.sh 192.168.6.0 --- 192.168.6.1 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 --- 192.168.6.2 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms --- 192.168.6.3 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms --- 192.168.6.4 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms ...... ·50· 执行以上命令后,将开始扫描192.168.6.0网段内TCP协议发现。并将扫描结果的IP地址,输入到了output.txt文件中。 接下来可以通过查看output.txt文件中的信息,以了解192.168.6.0网段中TCP协议活动的主机。执行命令如下所示: root@kali:~# cat output.txt 192.168.6.1 192.168.6.101 192.168.6.104 192.168.6.107 192.168.6.113 www.daxueba.net——大学霸 Kali Linux网络扫描教程(内部资料)——daxueba.net版权所有 www.daxueba.net——大学霸
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务