目前发现的TCP链路劫持攻击一般有两种形式:中断访问型(分为单向发包和双向发包)和替换页面型。
中断访问型常见于阻止用户访问某些网站,如某些设备禁止用户访问某些站点、某地运营商的禁止ADSL多终端上网功能。其原理就是伪造服务端给用户发RST包阻止TCP连接的建立(单向发包)。某些设备做得比较狠,在冒充服务端给用户发RST包的同时也冒充用户给服务端发RST包(双向发包)。
替换页面型常见于运营商植入广告,也有篡改正常网页进行SEO、骗流量的。最恶劣的莫过于钓鱼,如2011年出现过的Gmail钓鱼事件以及一些不为人知的钓鱼事件。原理也简单,就是在一个HTTP请求后伪造服务端的HTTP响应给客户端。
0x03 链路劫持判断依据TTL:表现为TCP 报的 TTL 不一致甚至抖动很大。一种情况是跟正常包的ttl相差明显,就像以上本案例中的那样;另一种情况是通过ttl来判断操作系统类型,进而间接判断数据包是否有异常。Identification:出现不符合 RFC 标准的情况。对于给定地址和协议的ip包来说,它的identification应该是公差为1的单调递增数列。每一个IP封包都有一个16位的唯一识别码?当程序产生的数据要通过网络传送时都会被拆散成封包形式发送,当封包要进行重组的时候这个ID就是依据了?标识字段唯一地标识主机发送的每一份数据报?通常每发送一份消息它的值就会加1?Banner信息:与已知信息矛盾,如本案例中。
TTL:TTL是 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。TTL是IPv4包头的一个8 bit字段。
虽然TTL从字面上翻译,是可以存活的时间,但实际上TTL是IP数据包在计算机网络中可以转发的最大跳数。TTL字段由IP数据包的发送者设置,在IP数据包从源到目的的整个转发路径上,每经过一个路由器,路由器都会修改这个TTL字段值,具体的做法是把该TTL的值减1,然后再将IP包转发出去。如果在IP包到达目的IP之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP包并向IP包的发送者发送 ICMP time exceeded消息。
TTL的主要作用是避免IP包在网络中的无限循环和收发,节省了网络资源,并能使IP包的发送者能收到告警消息。
#!cpp//IP部首定义typedef struct _ip_hdr{ unsigned char version : 4; //版本 unsigned char ihl : 4; //首部长度 unsigned char tos; //服务类型 unsigned short tot_len; //总长度 unsigned short id; //标志 unsigned short frag_off; //分片偏移 unsigned char ttl; //生存时间 unsigned char protocol; //协议 unsigned short chk_sum; //检验和 in_addr src_addr; //源IP地址 in_addr dst_addr; //目的IP地址}ip_hdr;
不同的操作系统环境TTL值一般是固定的一个数,常见的是16的倍数,然后每经过一个节点减1。一般来说服务器不会修改默认的TTL值,例如Linux默认的TTL为64,Windows默认的TTL为128。
下面是默认操作系统的TTL:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-22984-2.html
给自己一个追求新生的机会
中国小心了
这就对了哟