若想理解DNS欺骗原理,那么首先必须要知道DNS的工作原理。
DNS工作原理:
假设,主机A要访问百度,那么主机A先向本地DNS服务器发送请求,然后,本地DNS服务器查看自己的DNS缓存表中有没有百度的ip地址,如果有,那么根据这个ip地址就直接去访问百度的网站服务器;如果没有,就向根DNS服务器发送访问请求,然后,根服务器根据域名地址的类型,返回对应的域DNS服务器IP地址给主机A,主机A再去访问域DNS服务器,域服务器通过查询注册信息,告诉主机A百度的服务器地址在哪。这样,主机A就可以访问百度了。
DNS欺骗原理:
若想实现DNS欺骗,那么最重要的一步是获得目标机器的DNS请求包,然后我们分析目标机器的这个请求包,得到一些信息,比如,目标机器的这个DNS请求目的地是哪?源地址是哪?目的地端口是多少?请求的是什么域名的IP地址?用的是自身的哪一个端口?等等。。。
有了这一步之后,只要我们根据请求包构造DNS回复包,那么,目标机器就会相信这个DNS回复包的信息,不管这个DNS回复包里面的信息是否正确,只要符合他请求包的格式,那么他就相信。
这样,目标机器访问百度的时候就会认为192.168.1.59就是百度服务器的地址。
那么,问题来了,如何能捕获到目标机器的DNS访问请求呢?
目标机器要访问的网站,通常都和目标机器不在同一个内网,况且,即使在同一个网段,目标机器也正常都是通过域名去访问,很少有人记住域名对应的IP地址。
好,然后,分类讨论。
假设1:目标机器,本地DNS服务器,目标机器要访问的网站A都在同一个内网。
那么,目标机器就可以直接通过域名访问。也可以通过IP地址访问网站A。
如果是用域名访问网站A,那么毫无疑问,根据配置的DNS服务器地址,目标机器先向DNS服务器发送请求,DNS回复域名对应的IP地址,目标机器根据这个IP地址去访问网站A。
如果,目标机器已经知道了,或者用户记住了网站A的IP地址,那么直接就通过IP地址访问了,根本没有流量经过DNS服务器。
所以说,根据这个理论,我们可以尝试一下,当学校的某个网站打不开的时候,可能是DNS服务器的问题,也可能是网站服务器的问题,当然,也可能是自己主机的问题,或者中间线路的问题。假设,主机、线路,服务器都没问题,但是我们就打不开网站,那么可以尝试直接输入学校网站的IP地址,若此时能打开了,那么说明问题就出现在DNS那一端了。或许是因为同时访问的学生太多,DNS服务器承受不了,等等这类的原因。
假设2:目标主机和本地DNS服务器在同一个内网,网站A在某个外网上。
那么,毫无疑问,若是以域名访问,还是得向本地DNS服务器发送请求,本地DNS服务器的DNS缓存表中要是知道地址,那么就直接去访问了,要是不知道,那就根据最上面说的方法得到地址。
虽然,上面是两种假设,但是我仔细想了想,以我目前的知识,只能欺骗目标机器,告诉目标机器自己是网关,让目标机器的流量经过我这里,我才能抓到流量,然后构造出DNS应答包,来欺骗他,告诉目标机器他要访问的网站就在我这里,最后,我伪造出某个网站,目标用户就会认为自己是真的来到了目的网站。但是,如何伪造才能像真的网站一样?以及面对现在普遍都能防护ARP欺骗的用户,如何才能实现欺骗?毕竟,目标机器如果不相信你是网关,他的流量肯定不会通过你。这些问题,作为小白的我目前还真没办法解决。