dns劫持分析

  最近在作dns解析,关注的重点在查询域名ns记录上,异常日志中捕获到一个域名,dig查询:linux

  

  查询请求类型为ns,dig结果却只有一条A记录。出于好奇,查询类型改成a类型:git

  

  

  

  这个域名dig 查询A记录,返回一条结果,可是每次dig下去结果都不大同样。回到最开始的问题,请求类型为NSgithub

dig下去发现没有ns结果,那么是不是域名没有设置ns呢?咱们用whois查看下:工具

  

  能够看到ns是有的,但是dig的结果为什么显示没有ns记录呢?咱们修改下上上节的程序代码(完整代码在github见文末),构造一个dns解析请求,请求类型为ns,程序分析响应的内容,spa

发现其结果和咱们用dig命令查询是同样的,返回结果分析后只有一条A记录:3d

  

  查一下这个地址,结果以下:日志

  

  很明显,这个结果是不正确的。server

  咱们模拟了dig工具的dns解析过程,发现只能获取到域名的A记录,为了搞清楚到底发生了什么,咱们用抓包工具来帮助咱们了解起因。首先打开抓包工具,blog

而后运行程序,发一个dns查询包,在wireshark中过滤类型,查看结果:dns

  

  第一个是咱们发起的查询,能够看到类型是NS,请求的域名是3331.com,返回的响应结果有三个,对于linuxdig命令来讲,它只处理最早到达的响应包,也就是第一个,看看第一个包中都有什么内容:

  

  请求类型nsanswers中确只有type A,并告诉咱们A记录是243.185.187.39。这就是咱们所说的dns劫持的一种,可是,查看第三个响应包:

  

  

能够看到,ns记录和咱们用whois查询的结果是同样的。这就是说,查询过程是没有被打断的,被问询的server有响应咱们的解析请求,只不过在这个过程当中,劫持者截获了请求,并伪造了多个响应包发回来。

  对于这种状况,我所使用的方法是检测每个返回的响应包,判断是否有我指望的结果,若是没有,则丢弃这个包,不然就解析这个响应包,同时设置read超时时间,超过设定时间则认为没有后续的响

应包了。有兴趣的能够移步github查看代码:https://github.com/taoge2520/test_for_dig

相关文章
相关标签/搜索