Hed9eh0g

前进的路上总是孤独的

浅谈EDNS的利用

本文共计有1685个字

前言

打算写这篇文仅仅是想记录moectf题目所了解到的EDNS利用,但我对EDNS的了解还是不够全面的,希望以后有机会能够继续深入了解这方面的知识。

题目复现

由于题目涉及国外服务器的使用,故这道题无法具体的复现,只能在此简述一下题目:
首先是其中的第一道题,题目的提示:

《浅谈EDNS的利用》

打开题目,提示“Flag不在这儿,仅对英国和朝鲜区域提供服务”:

《浅谈EDNS的利用》

根据题目提示“全局负载均衡”,可以知道本题要用到DNS的负载均衡原理,这个原理我在另一篇文章已经提及,题目的这一个域名肯定是对应着多个(至少两个)服务器ip的。
简单的讲就是我们使用当前的ip去访问题目的域名,在DNS解析这个过程中,域名服务器基于我们所在的ip位置返回了一个服务器的地址A,而该地址的服务器是无法提供flag的。
所以关键在于要让域名服务器认为我们的ip地址是在其提供的服务地区内,这样域名服务器就会返回另一个服务器的地址B,可以推测flag就在地址B的服务器上。

常规思路

挂VPN

很明显,如果有一个英国的VPN就等同于我们有了一个英国的ip,问题迎刃而解。

Ping检测

利用某些提供Ping检测的在线网站,可以检测到当访问该域名用的是英国的ip时对应的服务器,也即是提供flag的服务器地址B。Ping检测网站可以用:http://www.webkaka.com/Ping.aspx

《浅谈EDNS的利用》

可以看见响应的ip了,直接访问此ip即可得到flag。也可以在hosts文件中添加域名缓存,使我们访问该域名后不必经过DNS解析而直接访问该指定的ip,同样可以获取flag。

更改系统DNS

根据DNS解析原理可知,我们电脑系统中是有一个默认的域名查询地址的,如图:

《浅谈EDNS的利用》

把系统的DNS指定为英国地区的DNS服务器,再访问此域名时这个英国地区的DNS服务器就会将域名解析为提供flag的服务器ip地址。

X-Forwarded-For?

加问号已经说明这种思路是不可行的了,我做这道题一开始的思路也是想抓包改头部的XFF,为什么不可行?事实上后台的服务器是完全可以不信任http请求头中的XFF的ip信息的,是可以防范XFF的伪造的,所以这种方法有它的局限性。

再遇难题

可以说只要我们了解了DNS的基本原理,“英国人”是这道题并不难的,但是出题人又出了“朝鲜人”这道题,与上一道题同理,这道题只为朝鲜地区提供服务。我们上面提到的三种解决思路,就都不行了:挂朝鲜VPN?这我目前还没听说过有朝鲜段的VPN,在线的ping检测网站也是没有朝鲜地区的选项,另外我们也没有朝鲜地区的DNS服务器。
朝鲜这个国家的网络信息,我们能在网上找到的最多只能是朝鲜地区的ip段了。

EDNS

根据之前的一篇文章,我们可知:EDNS有一种特殊的功能,可以指定ClientIP的值便于DNS负载均衡判断用户真实区位,这个时候便需要用到带有 edns-client-subnet 功能的DIG工具了。
再回去看看题目的提示:题目中的“新式”其实指的就是EDNS技术了,为什么说是“新式”呢?因为EDNS这个技术确实很新,新到目前国内的DNS服务器还没具备这个功能,可以确定支持这个功能是Google的DNS服务器(8.8.8.8)。
这种新式的DNS可以在DNS包中传递client ip从而避免因为DNS地址与用户地址区域不同,导致的负载均衡工作失误。通过更新linux的dig命令调用EDNS:dig @8.8.8.8 region.challenge.moectf.cn +client=175.45.176.16 组后传递的client ip是朝鲜网段的ip,这样就可以得到朝鲜人服务器地址,然后改host绑定域名直接访问即可得“朝鲜人”的flag了。
同理,这个方法也同样适用于“英国人”的解决,前提是找到英国地区网段的ip。

参考文章

https://blog.csdn.net/weixin_43939887/article/details/100806218
https://eqqie.cn/index.php/2019/09/16/moectf_2019_writeup-via-github/
 
 

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注