信息安全实验整理1
SECFND实验整理:
0.比较Windows下ipconfig和Linux下ifconfig区别:
1. Windows下MAC地址用-分割,Linux下用:分割。
2. Linux下将环回端口打出,windows下也有相同环回地址概念,但不显示。127.0.0.1指系统本身
3. Linux下的DNS显示在/etc/resolv.conf文件中
4. Linux下的默认网关信息可通过netstat -r 显示
5. Windows下查看arp表
6. arp-d 命令可以删除表项
7. Linux下查看arp表
8. 在windows下ping linux主机
9. 抓包结果:开头两个是ARP包交换,后跟8个ICMP echo request & reply 对。
前两个ARP包中,第一个帧的源MAC是windows的MAC 0A:06:0A:0A:0A 目的MAC 是广播MAC地址ff:ff:ff:ff:ff:ff,所有NIC都会处理发送到广播MAC的帧。ARP请求查找ip地址10.10.6.11的MAC,拥有该IP的NIC都会响应,提供MAC地址。通过第二个包ARP reply(单播)源地址是Linux的mac 0A:06:0B:0B:0B:0B,Windows主机收到响应后更新ARP cache。
10. 后8个包是ICMP echo request/reply。 ICMP是工作在IP层上的三层协议,可被攻击者滥用,并被用作攻击向量学习目标网络拓扑。
11. 等8个ICMP回复完成后,Linux主机又请求Windows主机的MAC,如下图所示,在第一次ARP交换中Linux收到Windows来的ARP请求,已经刷新了ARP Cache,但不知对错,以此次交换进行ARP核对,即保持ARP Cache,防止ARP Cache中条目的老化。
12. 观察前一组ARP交换的以太网帧头,其中目的MAC是ff:ff:ff:ff:ff:ff,即48个二进制1,是广播MAC,NIC只处理目的地址是自身mac或广播mac的帧,但组播流量和混杂NIC例外。6Byte目的MAC,6Byte源MAC,2Byte类型字段表示帧封装了什么载荷。这个字段用于从这个层指向下一个层次。0x0806表示下一层封装的是ARP载荷。IEEE 802.3逐渐成为以太网的主流标准,IEEE为了兼容Ethernet,边同时用这个字段表示长度和类型。当这个字段的数字小于等于十六进制数0x0600时,表示长度;大于0x0600,表示类型。
Ethertype | 以太网帧封装的协议 |
0x0800 | IPv4 |
0x86DD | IPv6 |
0x0806 | ARP |
0x8035 | RARP |
0x8100 | DOT1Q |
0x88CC | LLDP |
0x8809 | LACP |
0x888E | 802.1X |
13. 观察下一个ARP回复帧,它是一个单播帧,因为收到ARP请求后目标系统会将其中的IP和MAC对应关系存入ARP缓存,使用这个源MAC来回复请求的系统。在这个帧中Wireshark检测到了FCS的问题,校 验的范围包括除“前导”和“校验和”两部分外帧中的其他字段。首尾标志不参与帧校验序列FCS的计算。
如果接受者计算的叫研制和收到的帧FCS字段不匹配,则假设为出错,丢弃帧。一般帧校验功能下放到NIC的硬件,如果NIC硬件确定帧是正确的,它才将其发送到上一层堆栈中,并包含一个空的帧校验序列。因此这不是一个真实的FCS问题。抓包工具可能轻微扭曲事实,因此必须仔细配置抓包硬件,防止扭曲包内容。如NIC硬件包括TCP分段和UDP分段功能下放,这样分散到多个包的TCP和UDP段可能显示成一个包。
同步字段(Preamble) | 7个连续的01010101字节,10M以太网中用来进行时钟同步 |
起始标记字段(Start Frame Delimiter) | 固定的标志字10101011,表示同步字段结束,一帧数据开始 |
目标MAC地址字段(Destination Address)6B | 目标主机的MAC地址 |
源MAC地址字段(Source Address)6B | 发送数据的主机的MAC地址。 |
帧长度/类型字段(Length/Type)2B | 这个字段的数字小于等于十六进制数0x0600时,表示长度;大于0x0600,表示类型。“长度”是指从本字段以后的本数据帧的字节数。“类型”则表示接收主机上层协议是谁。 |
数据字段(Data)46~1500B | 数据区最小46个字节,最大1500个字节。如果不够这个字节数的数据,则需要填充。 |
帧校验字段(FCS)4B | 接收主机将重新计算的CRC校验值与FCS中发送主机存放的CRC结果相比较,如果不相等,则表明此帧数据已经在传输过程中损坏。 |
一个802.3帧的长度最小是64字节,最长是1518字节。
14. 研究IP包头,汇总信息显示的是源IP和目IP两个字段,展开IP包头字段
区分服务字段DSCP | 保证服务质量,0表示尽力而为,应用要求Qos比如VOIP需要用到DSCP将自己与其他应用区分。 |
总长度 | 是指包括IP头的总包长。如上图中60Bytes,表示Payload为40Bytes。这里存在着漏洞,有些IP协议栈若收到长度字段值与真实包长度不同时,会导致系统崩溃。 |
标识符 | 正常情况下IP ID随着包增长1,可见下一个10.0.6.10发到10.10.6.11的IP ID为0X76BE |
Flags Fragment offset | 控制分段,MTU=1500bytes,如果包载荷大于1500,则当载荷下到IP层是IP层会执行数据分段。 |
TTL | 生存时间防止路由环路中的包消耗路径中所有可用带宽。当TTL递减到0,则数据包会被抛弃。 |
协议 | 指向IP所封装的上层协议,本例中1表示ICMP。 |
[] | WireShark提供的元数据,不包含在IP头中。 |
IP协议号整理:
ICMP | 1 |
IGMP | 2 |
TCP | 6 |
UDP | 17 |
OSPF | 89 |
EIGRP | 88 |
RIP | 17(UDP端口520) |
BGP | 6(TCP端口179) |
15. 研究ICMP头部和数据,如下图中,类型8表示是echo request
TYPE | NAME | CODE |
0 | Echo Reply | 0 |
3 | Destination Unreachable | 0:Network Unreachable 1:Host Unreachable 2:Protocol Unreachable 3:Port Unreachable 4:Fragmentation needed and Don’t Fragment was set. |
5 | Redirect | 0:Redirect for Network 1:Redirect for the Host |
8 | Echo Request | 0 |
11 | Time Exceeded | 0:Time to Live Exceeded 1:Fragment reassembly time exceeded |
ICMP TYPE3 CODE4是至关重要的,用于路径MTU检测,查询到可以发送过多跳路径的最大包大小。
刚才在IP头中看到的payload载荷大小是40Bytes,可见ICMP头长度8字节,ICMP载荷共32字节。
字母被用作ICMP echo request是正常的,且echo reply应该发回相同的数据。如果请求和回复中的字母序列不同,就值得怀疑了。可能ICMP被利用,以提供CnC通信和数据泄漏的隧道。
16. 首先删除网关的ARP表项,接着打开抓包,访问网页inside-srv.abc.private/pictures
17. 分析抓包结果:
10.10.4.20是DNS服务器,必须通过网关10.10.6.1才能访问。下图Windows获取到了网关的mac为0a:07:0a:0a:04:02。然后10.10.6.10就向10.10.4.20DNS请求。请求的内容是inside-srv.abc.private
可查看UDP报文头部,包含源、目端口号,53代表DNS请求的标准监听端口。客户一般用高号码随机端口作为源端口。TCP/UDP 五元组用来标记当前会话:a 5-tuple is the combination of a transport protocol, a source IP address, a source port, a destination IP address, and a destination port.
DNS记录 | 描述 |
A | 主机记录,映射主机名到IPv4地址。 |
AAAA | 映射主机名到IPv6地址 |
CNAME | 将域名指向一个域名,实现与被指向域名相同的访问效果 |
MX | 电子邮箱服务,将指向邮件服务器地址 |
NS | 域名解析服务器记录,指定某个域名服务器来解析子域名 |
TXT | 任意填写,可为空 |
PTR | A记录的逆向记录,将IP反向解析为域名。请求中提供IP,期待回复主机名。 |
在域名查询记录中请求的是A类型记录inside-srv.abc.private
18. 查看域名响应的详细信息:Query字段重复了请求信息,Answer字段提供响应,将inside-srv.abc.private映射到IP地址10.10.4.20。TTL字段表示客户可以缓存此映射的最长时间604800秒是一周时间。保证下次不会重复请求域名,可以用ipconfig /flushdns命令刷新缓存。
19. 查看TCP连接,图中同样是用五元组TCP,10.10.6.10:1908,10.10.4.20:80来标记一个会话的,80,8080,8443,8000,8008都是HTTP的服务端口号,443是HTTPS的。
下图是TCP三次握手,第一个包是SYN,表示开始连接ISN=0;第二个是SYN ACK, 此时10.10.4.20也发来ISN号=0,并确认了10.10.6.10的ISN即ACK=1,随后第三个包是ACK,10.10.6.10确认10.10.4.20的ISN。
20. 查看SYN ACK包,在IP头可见源、目IP,在TCP头相应的可以查看到TCP源、目端口。Wireshark显示相对序号ISN和确认号ACK,实际的序号不是0而是0x371edd16,ISN应该是随机的。早期TCP/IP协议栈使用可预测的序号,让已经绑定的TCP会话被劫持。序号和确认号用于提供可靠性,他们计数交互的字节数。ACK号表示期待对端发来下一个序号,如下图中0xa94e1a43。当没收到ACK是发送者重传,接收者也可以通过发送 最后一个收到字节的ACK 来要求重传。
21. 下图是TCP四次握手关闭连接:本例中10.10.6.10首先发FIN给10.10.4.20,10.10.4.20确认了FIN后关闭去向连接,同时也发FIN给10.10.6.10,最后10.10.6.10发回ACK结束回向连接。
22. 然后观察HTTP头部:
UserAgent:告诉服务器客户端访问者浏览器了类型。
Accept:通告服务器客户端可以接收的媒体类型。
Accept-Encoding:告诉服务器,客户浏览器可以处理的其他的编码。Gzip和deflate提供压缩,减少网络带宽需求。
HTTP请求方式 | 描述 |
GET | 从指定源获取数据 |
HEAD | 要一个Get请求响应,但不要回复体。 |
POST | 对指定资源产生数据 |
PUT | 对指定资源更新数据 |
DELETE | 删除指定资源 |
23. 查看回复报文,服务器返回了代码302,找到了请求的资源。
Server:声明了web服务器的类型
Content-Encoding:服务器从客户机编码方案中选择的一个,选了gzip
Content-Length:声明满足请求需要传送的数据量,20Bytes。Gzip编码的数据必须解码后才能阅读。
响应代码 | 描述 |
100 | Continue |
200 | OK |
301 | Moved Permanently |
302 | Found |
307 | Temporarily Moved |
401 | Unauthorized (Authentication Required) |
403 | Forbidden |
404 | Not Found |
407 | Proxy Authentication Required |
500 | Internal Server Error |
24. 然后10.10.6.10解析对/请求得到的20字节的响应体,发现指向/home/index.php,因此转而请求/home/index.php
25. 由于所回复的HTML文档中引用了style.css,因此客户端又请求了css文件,注意Content-Type为text/css,由gzip编码。HTML中也引用了router32.ico,响应头中Content-Type为vnd.microsoft.icon,但没有Content-Encoding,表示未压缩。
26. Firefox访问并提供主页inside-srv.abc.private需要多次TCP会话来完成这个事务。通过Statistic->Conversations,再选择TCP tab页面可以看到10.10.6.10 和10.10.4.20间的多个会话。可见,在10.10.4.20端,端口号一直是80,因为这是HTTP监听端口,而10.10.6.10端的端口号一直变化,一般每次递增1.许多连接是并行活动的,它们的开始时间几乎只有1/1000秒的差距,但持续时间差不多都有5秒。所有会话都由5元组唯一区分的。