# DNS隧道技术绕防火墙

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2015-10-22T02:20:00Z
Canonical: https://wepostx.com/topics/1127

> 乌云历史资料归档
>
> **原始作者：** Blood_Zero
> **原始编号：** superkieran-wooyundrops:842
> **原始发布时间：** 2015-10-22 10:20
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x01 概念

隧道技术（Tunneling）是一种通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据（或负载）可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。新的帧头提供路由信息，以便通过互联网传递被封装的负载数据。

# 0x02 实例分析- DNS隧道技术

环境：客户机（Kali）+DNS服务器（window2003）+目标机（redhat7）

## DNS服务器：192.168.10.132
1、新建一个名字为”bloodzero.com”的正向解析域

![原文图片](/media/2016/06/849378f37dbf2bd64fe1a454c74e5a2c)

2、新建一个主机：IP为攻击者kali的IP

![原文图片](/media/2016/06/bc4f15b1b754be8909768f4a919fc9db)

3、新建一个委托

![原文图片](/media/2016/06/1e3a41e2c3656161b3865ae7b4fc94b5)

此时我们的DNS服务器就配置好了！

## Kali：攻击者&&客户端 192.168.10.135
1、攻击端配置：
修改dns2tcpd配置文件：

![原文图片](/media/2016/06/56048b6cede2b8d0246b063ed8462dc2)

resources的IP为目标机的IP

![原文图片](/media/2016/06/403ad4761ad9b80da309ff07b21a3cf0)

启动dns隧道的服务端

![原文图片](/media/2016/06/b7ca5077a45b5b20057a8283c468e8be)

2、客户端配置
删除ssh连接的known_hosts文件

![原文图片](/media/2016/06/8971310551bde424b6515a7bc06e6a7f)

修改DNS解析文件:vim /etc/resolv.conf

![原文图片](/media/2016/06/a0253995e8a7125ae64ad2e6c2b86a9d)

![原文图片](/media/2016/06/ce02099e74d08472e8124ae183acff4f)

![原文图片](/media/2016/06/ac5055bb5d124c472d8e1e6c48322752)

配置dns隧道客户端程序
在kali2.0中，没有配置文件，需要自己写配置文件
vim /etc/dns2tcpc.conf

![原文图片](/media/2016/06/355e481d95c1f2e222c2113f8d67c50a)

测试是否可以提供服务

![原文图片](/media/2016/06/cb942139e25e5cd0856f3a0a59263bdb)

这个时候我们就已经配置成功了！

## 成功效果

![原文图片](/media/2016/06/402553b1e100a1470f0527c6fe6a8aad)

![原文图片](/media/2016/06/8188203d8431dde4ce8a47a33f3c5bd9)

![原文图片](/media/2016/06/0574d12d8e0c742334faaf04160b77c7)

# 0x03 分析结论

这个时候的流量走向：

![原文图片](/media/2016/06/8688afa32f79f1a0c0f6eff688326fd5)

本文中介绍的是DNS隧道服务器，和DNS隧道客户端是同一台机器，并不能说明问题，当DNS隧道服务器存在于防火墙之后，这个时候我们就可以利用此种技术来绕过大部分的防火墙。并且可绕过不开端口，隐蔽性好等；

![原文图片](/media/2016/06/c976604d43c7f8b3b51894932eacc70e)

这里我使用另外一台客户机去连接目标机时，服务端监听的数据如下：

- 目标机：192.168.10.133

- DNS隧道服务端：192.168.10.135

- DNS隧道客户端：192.168.10.134

- DNS服务器：192.168.10.132

![原文图片](/media/2016/06/d403ca74611f41650158f7723945cc4e)

客户端监听数据如下：

![原文图片](/media/2016/06/07cca5f168617b942a27f68c0da43ca7)

发现能够监听到的ssh数据包是DNS隧道服务端与目标机之间的通信；
而客户端与目标机之间的通信是DNS数据；
这就是简单的配置DNS隧道；

## Replies
