近期评论

Archive for 十二月, 2012

TCP的序号规律

TCP报头源端口和目的端口各占两个字节即16bit,TCP端口最大为2的16次方减去1即65535.

目的报文后面是4byte的序号sequence number,然后是4byte的确认序号acknowledgment number,

这种序号最大长度2的32次方减去1。

wireshark显示的包序号都是相对序号,以syn包为起始点,客户端起始序号0,以SYN/ACK发送序号为服务端起始序号0,

这两个序号的实际使用的序号即十六位二进制数的值通常不相同

 

从三次握手开始,假设客户端请求服务端,发送方SYN包序号为占4byte共三十二位的二进制整数A,服务端SYN/ACK的序号为占4byte共三十二位的二进制整数B,则序号和确认序号的变化规律如下图(注意Len长度是TCP Segment长度,而不是Packet长度):

 

假设客户端发起syn包序号为(39405),服务端syn/ack包序号为(49502,39406),客户端ack包序号为(39406,49503)

三次握手完成后正式交换数据时客户端携带239byte的数据段,序号(39406,49503),和三次握手确认包的seq,ack序号完全一致。

服务端确认包序号为(49502,39406+239),数据段长度为514byte,那么客户端再次发包是序号为(39406+239,49502+514)。

以此类推,对于SYN,和FIN,RST包,接收方的发送的确认序号等于发送方发送的序号加上1,四次握手结束的第一个FIN包可以携带一定长度的数据段,而SYN,SYN/ACK,FIN,RST包携带的数据段长度为零

 

这就是TCP通信的序号规律。握手和结束的序号是按1递增,中间传送数据是按发送的数据段为增量递增

ARP协议分析和ARP攻击实现原理

ARP协议是一个介于二层和三层,把ip地址解析成物理地址的协议。

广播ARP请求包和单播ARP回复包的区别在于

——————————————————

广播arp包格式:

以太帧报文:

destination mac地==FF-FF-FF-FF-FF-FF,source mac地址,

ARP报文:

Opcode==1表示请求解析

Sender mac地址,Sender IP地址,

Target mac地==00-00-00-00-00-00,Target IP地址

Padding填充块

——————————————————

单播arp包格式:

以太帧报文:

destination mac地址,source mac地址,

ARP报文:

Opcode==2表示回复解析

Sender mac地址,Sender IP地址,

Target mac地址,Target IP地址。

Padding 填充块

——————————————————

通常一个ARP报文长度==以太帧长度+ARP报头长度==14byte+28byte==42byte

ARP报文恰好是以太帧报头长度的两倍。

根据CSMA/CD即carrier sense multi access/collision detect

即载波侦听多路访问/冲突检测相关机制得出的结论:以太帧最小不低于64byte

除去4byte抓包工具捕捉不到的帧尾,捕获到的包最小为60byte

一般的主机会在封装ARP报文成帧的时候,填充18byte空白的报文,即比特位全部置零,对于有些网络设备如常规路由器则填充18byte特定或者随机的数据

这样数据包在网络线缆介质传输时刚好等于64byte,

 

手动绑定IP和mac地址的方法是

winXP系统:

添加静态arp表:ARParp -s IP地址 mac地址

删除arp表:arp -d IP地址

win7系统:

查询idx号:netsh interface ipv4 show interface得到接口idx号

添加arp表:netsh interface ipv4 add neighbors idx号 "IP地址" "mac地址"

删除arp表:netsh interface ipv4 delete neighbors idx号

(必须用该命令才能删除win7系统的静态arp表,否则禁用网卡或重启系统又恢复原有绑定的arp表项)

netsh interface ipv4简写为netsh -c "i i"

 

通常arp表是一种缓存表,大约存在60s,所以局域网经常会看到arp广播报文。如果不断发送特定的单播arp回复报文,目标主机会根据收到的arp单播回复报文更新arp表,即修改目标主机arp缓存表,可以达到欺骗目标主机的效果。这种欺骗方式称之为ARP攻击

假定某局域网主机A的ip地址为192.168.1.254,mac地址为AA-11-3C-68-5D-AA;

主机B的ip地址为192.168.1.200,mac地址BB-11-3C-68-5D-BB;

局域网网管即路由器R的LAN口IP地址为192.168.1.1,mac地址RR-11-3C-68-5D-RR

正常情况下,主机A的IP地址设置成192.168.1.254,mac地址固定不变,arp缓存192.168.1.1→RR-11-3C-68-5D-RR,

而路由器上的ARP缓存是192.168.1.200→AA-11-3C-68-5D-AA;

这种情况下如果mac地址为AA-11-3C-68-5D-AA,IP地址192.168.1.254的主机A不断的发送ARP包给主机B,A对B进行ARP攻击,

报文结构为如下

——————————————————

以太帧报文

destination mac address==BB-11-3C-68-5D-BB,source mac address==AA-11-3C-68-5D-AA,

ARP报文:

Opcode==2表示回复解析

Sender mac address==AA-11-3C-68-5D-AA,Sender IP address==192.168.1.1

Target mac address==BB-11-3C-68-5D-BB,Target IP address==192.168.1.200

Padding==00……00(18byte)

——————————————————

 

ip地址为192.168.1.200的主机B收到该报文就会修改主机B的ARP缓存,这个时候ARP攻击已经完成。

由原来的192.168.1.1→RR-11-3C-68-5D-RR修改成192.168.1.1→AA-11-3C-68-5D-AA;

这时IP地址为192.168.1.200的主机B去ping路由192.168.1.1的时候,

三层icmp报文的源IP地址设置为192.168.1.200,目的IP地址设置为192.168.1.1,

二层封装时网卡查询arp缓存发现目的IP地址为192.168.1.1的主机对应的物理地址为AA-11-3C-68-5D-AA,

于是从主机192.168.1.200发出去的ping包的以太帧报文的目的物理地址设置为AA-11-3C-68-5D-AA,源地址为BB-11-3C-68-5D-BB。

 

这时候,收到icmp包的主机不是路由器了,而是攻击发起方即主机A,主机收到含有icmp报文的以太帧后,验证目的地址是否是自己,验证物理地址是自己后,转交给上层即三层,主机A的三层处理程序发现icmp报文的目的IP地址是192.168.1.1,而自己的IP地址是192.168.1.254,三层IP地址不匹配,于是主机A不在对该进行任何处理,即丢弃。

 

如果当主机B开始ping路由器的IP时,分别在A上抓包会发现,只能看到发出去的ping包,并且目的地址都是B的物理地址,而目的IP是路由的IP。

而在主机A上抓包是会看到来自源MAC是主机B的MAC,目的MAC是主机A的MAC,源IP是主机B的IP,目的IP却是路由器的IP。

即B上只捕获到发出去的包,A上只捕获到收到的包。

 

默认情况下ARP缓存的超时时限是两分钟,你可以在注册表中进行修改。可以修改的键值有两个,都位于

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

修改的键值:

键值1:ArpCacheLife,类型为Dword,单位为秒,默认值为120

键值2:ArpCacheMinReferencedLife,类型为Dword,单位为秒,默认值为600

注意:这些键值默认是不存在的,如果你想修改,必须自行创建;修改后重启计算机后生效。

如果ArpCacheLife的值比ArpCacheMinReferencedLife的值大,那么ARP缓存的超时时间设置为ArpCacheLife的值;如果ArpCacheLife的值不存在或者比ArpCacheMinReferencedLife的值小,那么对于未使用的ARP缓存,超时时间设置为120秒;对于正在使用的ARP缓存,超时时间则设置为ArpCacheMinReferencedLife的值。

ftp主动和被动模式及端口映射

ftp分为主动模式和被动模式。

主动模式

第一阶段登录认证:

ftp客户端以源端口c>1023,连接ftp服务器d端口(默认d=21)。

第二阶段传送数据:

客户端通知ftp服务器客户端使用主动模式,客户端监听c+1端口。

服务器收到通知,ftp服务器以源端口d-1,主动连接客户端c+1端口。

 

被动模式

第一阶段登录认证:

ftp客户端以源端口c>1023,连接ftp服务器d端口(默认21)。

第二阶段传送数据:

客户端通知ftp服务器客户端使用被动模式,客户端监听c+1端口。

服务端收到通知后,服务端监听p端口(p>1023,p!=d)。

客户端c+1端口连接服务器端p端口。服务器被动连接。

 

ftp主动模式和被动模式的设置是在IE浏览器→工具→internet选项→高级→使用被动FTP(用于防火墙和DSL调制解调器的兼容)

通常客户端开启了防火墙功能,服务端无法主动连接客户端。

IE浏览器默认勾选使用被动FTP,即默认使用被动模式。去掉√即为主动模式。

 

由于被动模式二阶段监听端口的范围在有些操作系统和ftp服务端软件上可以设置,但是这个端口不是固定的,导致在一些设备上做一一映射或NAPT映射时,无法正常访问。解决方法有两种:

一、客户端在浏览器上设置,使用主动模式连接,默认是被动模式。

二、服务端监听端口固定在某一个端口上。