DNSlivery:利用DNS协议投递文件和Payload

栏目: Python · 发布时间: 5年前

内容简介:允许打印,执行或保存文件到目标不需要目标上的任何客户端

DNSlivery项目允许通过DNS协议将文件和Payload投递到目标上。该项目最初的灵感来自于 PowerDNSJoff Thyer 发布在Paul 每周安全播客#590的技术片段

特性

允许打印,执行或保存文件到目标

不需要目标上的任何客户端

不需要完整的DNS服务器

DNSlivery:利用DNS协议投递文件和Payload

DNSlivery可以轻松地将文件/payload传送到目标机器,且不需要目标上安装运行任何专用的客户端软件,这是web delivery无法做到的地方。这非常适用于禁止传出Web流量或仅通过网络代理进行检查的受限环境。

DNSlivery:利用DNS协议投递文件和Payload

即使已存在更为完整的DNS隧道工具(如, dnscat2iodine ),它们都需要在目标上运行专用客户端。问题是DNS可能并没有办法在这种受限的环境中提供客户端。换句话说,使用这些 工具 构建DNS信道需要已建立DNS信道。

相比之下,DNSlivery仅提供从服务器到目标的单向通信,但不需要任何专用客户端来执行此操作。因此,如果你需要通过DNS构建可靠的双向信道,请使用DNSlivery投递一个更高级的DNS隧道工具到你的目标。

工作原理

与大多数DNS隧道工具一样,DNSlivery使用TXT记录并以base64表示形式存储文件内容。然而,它不需要设置完整的DNS服务器,它使用 scapy 库来侦听传入的DNS数据包以及响应。

DNSlivery:利用DNS协议投递文件和Payload

由于大多数文件不适合单个TXT记录,DnsLivery将创建包含base64 chunk文件的多个有序记录。作为一个例子,上图说明了名为file的文件的第42个chunk的传递。

为了检索所有base64 chunk并将它们重新组合在一起而不需要目标上的专用客户端,DnsLivery将为每个文件生成:

一个简单的明文 launcher

一个可靠的base64编码stager

DNSlivery:利用DNS协议投递文件和Payload

需要这两个阶段的投递过程来向stager添加功能(s.a.处理丢失的DNS响应),否则这些功能将不适合单个TXT记录。

关于目标兼容性

目前,仅支持PowerShell。但是,可以通过改进DNSlivery使其支持其他目标,如bash或python。如果这是你希望实现的功能,请告诉我 @no0be

安装要求

DNSlivery不需要构建复杂的服务器架构。实际上,你只需满足以下两个简单的要求即可:

能够在你的公共DNS区域中创建NS记录

拥有一台能够从Internet接收udp/53流量的 Linux 服务器

设置

DNS Zone

第一步是通过在域中创建新的NS记录,将子域委派给将运行DNSlivery的服务器。例如,我创建了以下记录,将子域dnsd.no0.be委派给服务器vps.no0.be.

dnsd    IN  NS vps.no0.be.

如果你的区域由第三方提供商管理,请参阅其文档以创建NS记录。

DNSlivery

运行DNSlivery的唯一要求是 python 3及其scapy库。

git clone https://github.com/no0be/DNSlivery.git && cd DNSlivery
pip install -r requirements.txt

使用

Server

DNSlivery将提供给定目录的所有文件(默认为pwd),并且需要以root权限运行以侦听传入的udp/53数据包。

usage: dnslivery.py [-h] [-p PATH] [-s SIZE] [-v] interface domain nameserver

DNSlivery - Easy files and payloads delivery over DNS

positional arguments:
  interface             interface to listen to DNS traffic
  domain                FQDN name of the DNS zone
  nameserver            FQDN name of the server running DNSlivery

optional arguments:
  -h, --help            show this help message and exit
  -p PATH, --path PATH  path of directory to serve over DNS (default: pwd)
  -s SIZE, --size SIZE  size in bytes of base64 chunks (default: 255)
  -v, --verbose         increase verbosity

示例:

$ sudo python3 dnslivery.py eth0 dnsd.no0.be vps.no0.be -p /tmp/dns-delivery

DNSlivery - Easy files and payloads delivery over DNS

[*] File "file" ready for delivery at file.dnsd.no0.be (7 chunks)
[*] Listening for DNS queries...

关于文件名规范化

由于域名允许的字符集比UNIX文件名更具限制性(根据 RFC1035 ),因此DNSlivery将在需要时执行规范化。

示例:

[*] File "My Awesome Powershell Script <img data-original="https://image.3001.net/images/index/smilies/icon_wink.gif" src="https://www.freebuf.com/buf/themes/freebuf/images/grey.gif" alt=";)" /> .ps1" ready for delivery at my-awesome-powershell-script----ps1.dnsd.no0.be (1891 chunks)

注意,当前的规范化代码并不完美,因为它不会考虑文件名重叠或大小限制。

Target

在目标上,首先通过请求其专用TXT记录来检索所需文件的launcher。支持以下三个launcher:

行为 Launcher 描述
打印 [filename].print.[domain] 默认 )将传送的文件打印到控制台
执行 [filename].exec.[domain] 执行传送的文件(对脚本有用)
保存 [filename].save.[domain] 将传送的文件保存到磁盘(对二进制文件很有用)
nslookup -type=txt [filename].[stager].[domain]

然后,只需将DNS响应中引用的launcher复制并粘贴到PowerShell控制台即可检索目标上的文件。

示例:

DNSlivery:利用DNS协议投递文件和Payload

*参考来源: GitHub ,FB小编secist编译,转载请注明来自FreeBuf.COM


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

Linux C编程一站式学习

Linux C编程一站式学习

宋劲杉 / 电子工业出版社 / 2009-12 / 60.00元

本书有两条线索,一条线索是以Linux平台为载体全面深入地介绍C语言的语法和程序的工作原理,另一条线索是介绍程序设计的基本思想和开发调试方法。本书分为两部分:第一部分讲解编程语言和程序设计的基本思想方法,让读者从概念上认识C语言;第二部分结合操作系统和体系结构的知识讲解程序的工作原理,让读者从本质上认识C语言。. 本书适合做零基础的初学者学习C语言的第一本教材,帮助读者打下牢固的基础。有一定......一起来看看 《Linux C编程一站式学习》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

SHA 加密
SHA 加密

SHA 加密工具

html转js在线工具
html转js在线工具

html转js在线工具