DNSlog是什么
首先我们都知道DNS就是将域名解析为ip,用户在浏览器上输入一个域名a.com,就要靠DNS服务器将a.com解析到它的真实ip,这样就可以访问对应服务器上的相应服务。
DNSlog就是存储在DNS服务器上的域名信息,它记录着用户对域名www.baidu.com等的访问信息,类似于日志文件。
首先要了解一下域名是分级的,因特网采用层次树状结构命名方法。域是名字空间中一个可被管理的划分(按机构组织划分),域可被划分为子域,子域可再被划分,即形成了顶级域名、二级域名、三级域名等。从右向左为顶级域名、二级域名、三级域名等,用点隔开。例如:
pan.baidu.com
它由三个标号组成, com即为顶级域名,baidu为二级域名,pan即为三级域名。且域名不分区大小写。如图所示:
DNS域名服务器同样具有类似的结构
接下来详解域名解析的过程:
1. 浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。同时域名被缓存的时间也可通过TTL属性来设置。
2. 如果浏览器缓存中没有(专业点叫还没命中),浏览器会检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程。在windows中可通过c盘里一个叫hosts的文件来设置,如果你在这里指定了一个域名对应的ip地址,那浏览器会首先使用这个ip地址。
3.如果至此还没有命中域名,才会真正的请求本地域名服务器(LDNS)来解析这个域名,这台服务器一般在你的城市的某个角落,每一个因特网服务提供ISP(电信联通移动),或一个大学都可以拥有一个本地域名服务器。,距离你不会很远,一般不会超过几个路由的距离。并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了。
4. 如果LDNS仍然没有命中,就直接跳到根域名服务器请求解析
5.根域名服务器返回给LDNS一个所查询域的顶级域名服务器(如.com .cn .org等)地址
6.此时LDNS再发送请求给上一步返回的顶级域名服务器.
7.接受请求的顶级域名服务器查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的权限域名服务器
8. Name Server根据映射关系表找到目标ip,返回给LDNS
9. LDNS缓存这个域名和对应的ip
10. LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束
简单来说,就是我有个已注册的域名a.com,我在域名代理商那里将域名设置对应的ip 1.1.1.1 上,这样当我向dns服务器发起a.com的解析请求时,DNSlog中会记录下他给a.com解析,解析值为1.1.1.1,而我们这个解析的记录的值就是我们要利用的地方。
看个直观一点的例子来理解:
ping命令的时候会用到DNS解析所以我就用ping命令做个实验。
可以看到解析的日志会把%USERNAME%的值给带出来,因为系统在ping命令之前会将%USERNAME%的值解析出来,然后再和abc.com拼接起来,最后ping命令执行将SH.a.com一起发给DNS服务器请求解析域名对应的ip地址,这个过程被记录下来就是DNSlog,看到这里应该有点感觉了。原理上只要能进行DNS请求的函数都可能存在DNSlog注入。
实际的利用在我的这篇文章里有,我就不再测了。
推荐几个DNSlog利用的平台: