实验2:网络扫描

1. 实验内容

        用Nmap或Nessus软件进行主机、端口、漏洞扫描实验,捕获扫描时交互的数据报文,通过分析扫描数据报文,验证扫描原理。

2. 实验要求

        提交实验报告,包括:扫描环境设计、数据报文分析、扫描结果和分析,以及实验中遇到的问题和原因等。

3. 实验过程

步骤1:扫描环境设计

        本次实验需要用到搭建一个服务器和配置有Nmap等网络扫描软件的客户端。客户端采用虚拟机下的Linux系统,首先安装Nmap扫描工具,并查看是否安装成功。

1
2
apt-get install nmap
nmap -V

        服务器采用虚拟机下的win7系统,服务器通过phpstudy进行部署,并开放网站、数据库和FTP服务。

        通过测试,本机和两台虚拟机通过NAT的方式连接,即主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,这样就实现了虚拟机联网。值得注意的是可能因为开启防火墙而不能互相ping通。实验将在两台虚拟机上进行,其网络设置如下。

1
2
3
4
5
6
7
8
9
子网掩码 255.255.255.0
网关 192.168.223.2

物理机 Win10
IPv4 192.168.223.1
服务器端 Win7
IPv4 192.168.223.129
扫描端 Linux
IPv4 192.168.223.128

步骤2:Nmap扫描及数据报文分析

扫描存活主机

同一虚拟局域网下的主机扫描

1
nmap -sP 192.168.19.129/24

-sP仅进行Ping扫描,不对端口或操作系统进行探测。

        可以看到扫描出了该网络号下的5台主机,其中也包括1为物理机的虚拟网卡IP,2为网关,128为扫描端IP(因为扫描端和服务器端在同一网段下),129为服务器端。值得一提的是命令中的/24,其为子网掩码255.255.255.0表示前24位为1,即前24位为网络号。

wireshark数据报文分析

        通过扫描端和服务器端的wireshark抓包,可以看到扫描端129.168.19.128发送ARP广播,向该网段所有可能IP广播询问这些IP对应的MAC地址为多少,如果收到了其他IP的相应就说明该IP存在。但是存在一个问题,ping扫描应该是ICMP协议,为什么却是ARP广播,问题可能出在当前扫描的为同一网段下的IP。

扫描端抓包

外网的主机扫描

1
nmap -sP 10.122.253.1

10.122.253.20为物理机的外网IP,扫描后三位19-23范围内的存活主机。

        可以发现该范围内的5个主机均存活,结合wireshark抓包可以看出本次扫描外网的主机发送的为ICMP协议,证明之前的猜想。

扫描端口

TCP SYN扫描
1
nmap -sS 192.168.223.129
  • 半连接(2/3),默认用-sP去发现主机。

  • SYN扫描最默认最受欢迎的扫描选项,在一个没有入侵防火墙的快速网络上,每秒钟可以扫描数千个端口。 SYN 扫描相对来说不张扬,不易被注意到,因为它从来不完成 TCP 连接。

  • 它常常被称为半开放扫描,因为它不打开一个完全的 TCP 连接。它发送一个 SYN 报文,就像您真的要打开一个连接,然后等待响应。 SYN/ACK 表示端口在监听 (开放) ,而 RST (复位)表示没有监听者。

  • 扫描结果

  • wireshark抓包

    这里通过显示过滤器找出了几个开放端口扫描过程。

            通过抓包可以看出,Nmap会向所有端口发送SYN包,由此查看该端口是否开放,如果开放会返回SYN,ACK包,然而之后不进行第三次握手,而是Nmap机器发送RST包进行异常断连。

TCP connect()扫描
1
nmap -sT 192.168.223.129
  • 全连接,默认用-sP去发现主机。

  • 扫描结果

  • wireshark抓包

UDP扫描
  • 发送UDP包,若发现了一个可以自动回复信息的端口,判断为open。其它端口回送了端口不可达的报文,表示端口关闭。

  • 若是其它ICMP类型的则表示端口是filtered。

  • UDP扫描的好处在一它可以穿过一些只过滤了TCP包的防火墙,但是UDP扫描的一个问题是效率较低。

  • 扫描结果

    可以看到扫描总共用了1000s,说明UDP扫描确实存在效率低的问题。

  • wireshark抓包

  1. 服务和版本探测

    1
    nmap -sV 192.168.223.129

            原理:首先是同端口扫描一样,向所有端口发送SYN包请求,若成功TCP三次握手则标记端口状态open。建立连接后,Nmap会监听5s(NULL Probes),通过欢迎信息确定其服务类型,收到数据会与保存的3000多NULL探针指纹进行匹配。如果没有探测出来,Nmap有“soft match”的机制,Nmap会继续选择探针进行探测,这些探针被限制到与该服务相匹配的探针上。

步骤3:Nmap漏洞扫描

        Nmap里有数量庞大、使用便捷、以及预设选项的指令,但是无法面对处理自定义脚本命令无计可施,为了解决这个问题引入了Nmap脚本引擎(NSE)。

NSE漏洞扫描的优势:

  • 可以使用Nmap API来完成对扫描过程中收集信息的处理;
  • NSE脚本可以在执行过程中和其他脚本共享获得的信息;
  • NSE中提供了大量网络协议库的组件;
  • NSE中提供了漏洞库文件,利用漏洞库文件可以创建一份优秀的漏洞报告;
  • NSE中提供了强大的并发机制和错误处理机制。

        Nmap默认集成很多适用于NSE引擎的脚本,并都在该目录下存放:/usr/share/nmap/scripts/

1
less /usr/share/nmap/scripts/script.db | grep vuln | wc -l #查看nmap中有多少个关于弱点vuln的脚本

        每个脚本后面都有一个分类categories,后面的参数内容描述了该脚本属于哪些分类,在脚本利用时可以根据categories来一次性运行一类的全部脚本。

1
cat /usr/share/nmap/scripts/script.db

1
nmap -p- -sV --version-all --script vuln 192.168.223.129

        -p-指的是将目标端口指定为全部有效端口, -sV --version-all用来提高版本检测的效率。--script vuln为运行vuln类的脚本,其代表“负责检查目标机是否有常见的漏洞(Vulnerability)”。

脚本分类
  • auth:负责处理鉴权证书(绕开鉴权)的脚本;
  • broadcast:在局域网内探查更多服务开启状况,如dhcp、dns、sqlserver等服务;
  • brute:提供暴力破解方式,针对常见的应用,如http、snmp等;
  • default:使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力;
  • discovery:对网络进行更多的信息,如SMB枚举、SNMP查询等;
  • dos:用于进行拒绝服务攻击;
  • exploit:利用已知的漏洞入侵系统;
  • external:利用第三言的数据库或资源,例如进行whois解析;
  • fuzzer:模糊测试的脚本,发送异常的包到目标机,探测出潜在的漏洞;
  • intrusive:入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽;
  • malware:探测目标机是否感染了病毒、开启了后门等信息;
  • safe:此类与intrusive相反,属于安全性脚本;
  • version:负责增强服务与版本扫描(Version Detection)功能的脚本;
  • vuln:负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067;

等待一段时间就会生成如下的漏洞扫描报告。

        扫描漏洞先是对其端口、服务和版本进行探测,之后对不同的端口利用相对应的脚本进行检测。从上面的报告,该主机不能抵挡DoS攻击。另外,我在Win7系统的网页根目录加上了sql-labs的SQL漏洞练习内容,因此通过https-sql-injection脚本扫描出了在某些Web页面中的unamepasswd处存在注入漏洞。

7. 实验中出现的问题、原因和解决

  • 虚拟机和主机之间的网络连接问题

            首先,配置虚拟机的网络均在NAT模式下,VMware的虚拟网络编辑器中的网关和子网掩码设置成与本机的VMnet8中的内容一致即可。这样本机就与虚拟机在一个局域网中,可以相互ping通。如果仍然存在问题,需要把Windos系统的防火墙关闭。

  • Nmap Ping扫描未利用ICMP协议,而是ARP广播:因为在NAT的虚拟局域网内,所以在内网扫描时直接通过ARP广播询问MAC地址即可判断主机是否存活。当扫描外网IP时会采用ICMP协议扫描。

鸣谢❀参考大佬文章