网安实验2—网络扫描
实验2:网络扫描
1. 实验内容
用Nmap或Nessus软件进行主机、端口、漏洞扫描实验,捕获扫描时交互的数据报文,通过分析扫描数据报文,验证扫描原理。
2. 实验要求
提交实验报告,包括:扫描环境设计、数据报文分析、扫描结果和分析,以及实验中遇到的问题和原因等。
3. 实验过程
步骤1:扫描环境设计
本次实验需要用到搭建一个服务器和配置有Nmap等网络扫描软件的客户端。客户端采用虚拟机下的Linux系统,首先安装Nmap扫描工具,并查看是否安装成功。
1 | apt-get install nmap |
服务器采用虚拟机下的win7系统,服务器通过phpstudy
进行部署,并开放网站、数据库和FTP服务。
通过测试,本机和两台虚拟机通过NAT的方式连接,即主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,这样就实现了虚拟机联网。值得注意的是可能因为开启防火墙而不能互相ping通。实验将在两台虚拟机上进行,其网络设置如下。
1 | 子网掩码 255.255.255.0 |
步骤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
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页面中的uname
和passwd
处存在注入漏洞。
7. 实验中出现的问题、原因和解决
虚拟机和主机之间的网络连接问题
首先,配置虚拟机的网络均在NAT模式下,VMware的虚拟网络编辑器中的网关和子网掩码设置成与本机的VMnet8中的内容一致即可。这样本机就与虚拟机在一个局域网中,可以相互ping通。如果仍然存在问题,需要把Windos系统的防火墙关闭。
Nmap Ping扫描未利用ICMP协议,而是ARP广播:因为在NAT的虚拟局域网内,所以在内网扫描时直接通过ARP广播询问MAC地址即可判断主机是否存活。当扫描外网IP时会采用ICMP协议扫描。