你以为什么是http劫持(面试积累,懒得画图版)

3,905 阅读4分钟

简说

http劫持分两种,一种是DNS劫持(域名劫持),另一种是关联内容劫持。 后者是基于前者发展起来的,比较高级的劫持手段。

一、DNS劫持(域名劫持)

概念:

在可劫持的网络范围内,拦截 域名解析 的请求,分析其域名,把拦截条件范围外的放行,范围内的返回篡改后的ip或失去响应。

效果:

使特定网络无法响应或返回假地址。

本质:

对DNS解析服务器做手脚或使用伪造的DNS解析器。

非劫持过程:

  1. 客户端发起域名请求到DNS解析服务器(一般是LocalDNS);
  2. DNS服务器将域名转换为公网ip(在ip运营商处查询),将请求转发给目标服务器;
  3. 目标服务器响应后将数据信息回传给DNS服务器;
  4. DNS服务器将响应信息转发回客户端。

劫持过程:

  1. 客户端发起域名请求到DNS解析服务器(一般是LocalDNS),但此时DNS解析服务器被攻击篡改;
  2. 被攻击篡改后的DNS解析服务器将请求转发给虚假服务器;
  3. 虚假服务器返回响应信息给被攻击篡改后的DNS解析服务器(也可能直接不响应);
  4. 被攻击篡改后的DNS解析服务器将虚假的响应信息转发回客户端。

解决办法:

DNS劫持的本质是运营商的DNS解析服务器被攻击篡改,所以可以使用自己的解析服务器代替或在客户端直接以ip的形式将请求发出去,绕过运营商的DNS解析服务器,从而避免被劫持。

二、内容劫持

最初出发点:

运营商为了加快用户的访问速度同时减少自己的流量损耗而做的一个劫持会话后的缓存机制,所以负载能力弱的链路上的流量,会出现劫持的现象。

本质:

TCP会话劫持。

劫持流程:

  1. 客户端发起资源请求到运营商处;
  2. 运营商收到请求先检索缓存池,若有相关缓存,直接返回;若无数据,将请求转发给目标服务器;
  3. 目标服务器响应并回传数据,运营商劫持了会话及其中回传数据,存入缓存,并返回给客户端。

注意:

此时如果有人恶意篡改了缓存池,或者,直接劫持了会话,在真正的服务器响应之前回传了虚假的数据,那么客户端将得到错误的响应信息,同时真正的服务器响应数据将被丢弃。

解决办法:

使用https加密协议,https=http + ssl。

DNS解析过程:

  1. 请求发起时,操作系统将检查浏览器缓存中是否存在该域名对应的、解析过的ip,若存在,停止解析。
  2. 若不存在,浏览器将检查操作系统的host文件中是否存在对应的ip域名映射,若存在,则使用并停止解析。
  3. 若不存在,操作系统将域名发送给host文件中配置的LocalDNS(即本地区域名服务器,此服务器提供本地互联网接入的DNS解析服务,性能良好,一般会缓存域名解析结果),90%域名解析到此完成。
  4. 若LDNS未命中,就进入Root Server域名服务器请求解析。
  5. root server服务器给LDNS返回所查域名的主域名服务器地址(gTLD server,国际顶级域名服务器,全球13台)。
  6. LDNS再向gTLD server发起请求。
  7. 收到请求后,gTLD服务器查找并返回该域名对应的Name Server域名服务器的地址,这个Name Server就是注册域名服务器。
  8. Name Server服务器查询存储中域名、ip的映射表,将对应ip和ttl值返回给LDNS。
  9. LDNS缓存域名和ip的对应关系及ttl值。
  10. LDNS将结果返回给客户端。

注意:

解析结果具备时效性。

写在最后

需要声明的一点是,我不是一个教授者,我只是一个分享者、一个讨论者、一个学习者,有不同的意见或新的想法,提出来,我们一起研究。分享的同时,并不只是被分享者在学习进步,分享者亦是。

知识遍地,拾到了就是你的。

既然有用,不妨点赞,让更多的人了解、学习并提升。