基于DNS的数据泄露开源测试工具篇(三)

栏目: IT技术 · 发布时间: 4年前

内容简介:在DNSExfitrator开源项目[1]是一个数据泄露测试工具,它利用DNS协议进行隐蔽的数据泄露。DNSExfiltrator采用C/S模式,其服务端使用python实现(dnsexfiltrator.py),客户端提供C#源码,可通过csc.exe编译为Windows可执行文件;同时,也可以通过作者用JavaScript、Powershell包装后的脚本文件来启用客户端。DNSExfiltrator项目源码结构梳理如图2。

免责声明:本文作者竭力保证文章内容可靠,但对于任何错误、疏漏或不准确的内容,作者不负任何责任。文章部分内容来源于网络是出于传递更多信息的目的,对此不负任何法律责任。本文仅用于技术分享与讨论,严禁用于其他用途。

一、前言

基于DNS的数据窃取开源 工具 篇(一) 和 基于DNS的数据窃取开源工具篇(二) 中,已经讨论DET和PyExfil两个开源项目关于利用DNS完成数据窃取的部分。本文将继续讨论如图1中所示的第三个开源工具DNSExfiltrator。

基于DNS的数据泄露开源测试工具篇(三) 图1  DET、PyExfil、DNSExfiltrator、Egress-Assess的首页展示

二、 DNSExfiltrator简介

DNSExfitrator开源项目[1]是一个数据泄露测试工具,它利用DNS协议进行隐蔽的数据泄露。DNSExfiltrator采用C/S模式,其服务端使用 python 实现(dnsexfiltrator.py),客户端提供C#源码,可通过csc.exe编译为Windows可执行文件;同时,也可以通过作者用JavaScript、Powershell包装后的脚本文件来启用客户端。DNSExfiltrator项目源码结构梳理如图2。

基于DNS的数据泄露开源测试工具篇(三) 图2 DNSExfiltrator项目组成概况

总结DNSExfiltrator的特色主要有:

1)   默认使用系统定义的DNS服务器,可以通过-s 指定特定DNS服务端。
2)   支持DoH,通过-h参数启用。
3)   默认使用base64URL编码,但也可以通过-b32指定使用Base32编码。
4)   支持基础R**加密对数据进行加解密。
5)   提供一些可选功能用来逃避检测,主要有:
a)     请求限制——每个DNS请求间隔时间大小,实现更隐蔽的数据窃取。
b)     减小DNS请求大小,默认使用每个DNS请求最大剩余可用字节。
c)     减小DNS标签大小,默认使用最大支持的标签长度63字符。

三、基于DNS的数据窃取的源码简要分析

DNSExfiltrator工具采用C/S模式,服务端为DNSExfiltrator.py文件,客户端使用C#实现,可通过csc.exe编译为Windows可执行程序。同时,为了便于使用,作者还提供了包装了DNSExfiltrator客户端二进制文件的Powershell脚本和JavaScript脚本。

DNSExfiltrator准备条件:

1)拥有一个域名,并将其DNS记录指向运行DNSExfiltrator.py的服务端;

2)服务端依赖python的dnslib库。

(一)服务端源码分析

对服务端源码文件dnsexfiltrator.py进行梳理、分析,将其源码概况和服务端工作的主要流程整理如图3。

基于DNS的数据泄露开源测试工具篇(三) 图3 服务端源码概况及服务端的主要流程

通过对服务端源码dnsexfiltrator.py的梳理、分析,整理服务端接收、恢复窃密数据的主要流程为:

1)  监听53端口并接收请求数据。当DNS请求包的请求类型为TXT记录,则进入第(2)步。

2)  提取请求的子域名,即使用dnslib库提取数据包的qname,DNSExfiltrator中qname的拼接组成主要有如图4所示的两种。

基于DNS的数据泄露开源测试工具篇(三) 图4 DNSExfiltrator服务端提取的qname组成结构

3)  判断包类型,若qname以”init.”开始,则为初始化请求包执行步骤(4),否则进入步骤(5)。

4)  ”init.”标识该包为初始化包,则首先进行Base32解码,然后提取窃取文件的“filename:文件名”、“nbchunks:数据块总数”、“BASE32:是否使用BASE32编码”,并初始化接收准备。

5)  此类包传输实际窃密文件数据,窃取的数据加密、编码后拼接组成的查询子域名如图5。

基于DNS的数据泄露开源测试工具篇(三) 图5 用于传输文件数据的子域名拼接组成示例

6)  当某一个查询请求中的包序号等于块总数时,标志着窃取的文件数据已传输完毕,开始执行写入、恢复为本地文件的操作。

注:服务端处理初始化包后会回复客户端请求的TXT记录为“OK”,处理真实窃密数据包后,则会回复TXT记录为对应“包序号”。

(二)客户端源码简要分析

DNSExfiltrator客户端采用C#语言编写,可以编译为独立的可执行文件或一个DLL。编译方法:

1)  编译为Windows可执行程序编译:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe/reference:System.IO.Compression.dll /out:dnsExfiltrator.exe dnsExfiltrator.cs

2)  编译为DLL:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe/unsafe /target:library /reference:System.IO.Compression.dll/out:dnsExfiltrator.dll dnsExfiltrator.cs

基于DNS的数据泄露开源测试工具篇(三) 图6 DNSExfiltrator客户端源码结构及主要流程

通过对DNSExfiltrator.cs的梳理和分析,其源码结构和客户端工作主要流程如图6。参照图6,整理DNSExfiltrator发送窃密文件数据的主要流程如下:

1)  预处理工作,主要是通过指定的标签最大值、域名最大长度,计算拼接子域名时的相关参数值。

2)  读取文件数据到内存中,完成压缩、加密、编码。

3)  发送初始化DNS包,包括将要传输的文件信息包括:文件名、数据块总数、编码方式等,各信息拼接的结构如图7。

基于DNS的数据泄露开源测试工具篇(三) 图7 DNSExfiltrator初始化包的组成结构

4)  通过服务端响应的TXT记录“ok”,确认初始包发送成功。

5)  按步骤(1)计算所得参数值,将文件数据切分为数据块,然后按图8所示的组成结构拼接成子域名。

基于DNS的数据泄露开源测试工具篇(三) 图8 DNSExfiltrator窃密数据包的组成结构

6)  逐个发送构建好的DNS TXT请求包。其中,客户端会根据服务端对每个DNS TXT记录响应的包序号来确认数据发送成功后,才发送下一个携带窃密文件数据的DNS TXT请求包。

四、小结

(一)DNSExfiltrator的优势分析:

1)支持使用DoH形式的DNS解析,且可以自行指定DoH服务提供商。

2)客户端使用C3语言编写,便于编译为Windows可执行文件或DLL,且作者还提供了使用DNSExfiltrator的JS、Powershell脚本。

3)客户端、服务端依赖较少,环境搭建简单。

(二)DNSExfiltrator的不足之处:

1)包序号在工具的窃密和文件恢复过程中尤为重要,在实际使用时不稳定。

2)未提供文件校验,窃取的数据完整、真实不能保证。

3)每个包按包序号逐个发送、确认,在实际DNS请求情况下效率低、易出错。

参考链接:

[1] DNSExfiltrator项目地址

*本文作者:GZHU/asUwIll,转载请注明来自FreeBuf.COM


以上所述就是小编给大家介绍的《基于DNS的数据泄露开源测试工具篇(三)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

React开发实战

React开发实战

[美] Cássio de Sousa Antonio / 杜伟、柴晓伟、涂曙光 / 清华大学出版社 / 2017-3-1 / 58.00 元

介绍如何成功构建日益复杂的前端应用程序与接口,深入分析 React库,并详述React生态系统中的其他工具与库,从而指导你创建完整的复杂应用程序。 你将全面学习React的用法以及React生态系统中的其他工具和库(如React Router和Flux 架构),并了解采用组合方式创建接口的佳实践。本书简明扼要地讲解每个主题,并呈现助你高效完成工作的细节。书中严谨深刻地讲述React中重要的功......一起来看看 《React开发实战》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具