首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

秘密渗透内网——利用 DNS 建立虚拟专用网络传输隧道

摘要

在APT攻击日益严重的今天,只有不断了解并掌握更加高级且不寻常的攻击手法,才能在内网沦陷之前做好严密的防护。利用DNS建立虚拟专用网络连接进行网络传输用的正是一种非常隐蔽且不寻常的手法。

概述

当我们被IDS或者防火墙阻断的时候,我们通常开始使用 [DNSCat] 作为一种在约定期间秘密传输数据的手段。同时,DNS 协议经常被系统管理员所忽视,因此,这个工具就一直非常有用。

虽然也有其他的 DNS 隧道连接虚拟专用网络的解决方案,但是 DNSCat却是我们惯用的方法,因为它有以下几个优点:

- 1) 集中式的服务器使得管理起来很简单 - 2) 命令行工具使用起来也很方便 - 3) 支持加密传输 - 4) 可以自由免费的使用

但是这个工具有个缺点:不具有建立从客户端到服务器的传输隧道的能力。也就是说DNScat建立的隧道是单向的,只能从服务器到客户端。

目标

能否在DNS中实现一个双向连接的虚拟专用网络并且支持所有的网络协议,而不仅仅是TCP?这个idea可以当你在机场,酒店或者那些可以进行DNS解析却被限制网络连接的情况下将会非常有用。同样,对于进行内网渗透想要建立秘密传输隧道的攻击者来说也非常有用。DNSCat 支持建立TCP传输隧道,并且是单向的,例如:从服务端到客户端,这个类似于 SSH -L 的功能。

解决问题

DNScat的作者 Ron 提到过他会打算构建双向传输隧道的功能,但是从目前的情况来看,我们能够解决这个问题得到我们想要的结果。

要解决这个问题,我们需要以下几个步骤:

域名

服务器

在服务器上面我们需要做几件事,首先需要设置 ssh 密钥:

ssh-keygen

接下来,设置服务器允许IP路由:

echo 1 > /proc/sys/net/ipv4/ip_forward

之后运行 DNScat,下面是一些我们用到的命令行参数:

在服务器启动之后,我们接下来看看客户端需要做什么。

客户端

这里不会赘述如何编译客户端,有关的说明可以在Github的readme页面中找到。编译好客户端需要以root权限运行它。在运行客户端之前,需要修改标准的sshd配置文件,有以下三个参数需要改变:

- 注释掉 'PermitRootLogin without-password' - 添加 'PermitRootLogin yes' - 添加 'PermitTunnel yes'

之后,重启sshd服务,并且允许客户端主机的IP路由:

# /etc/init.d/ssh restart # echo 1 > /proc/sys/net/ipv4/ip_forward

当允许中转后,我们就可以连接到服务器了。从下图中可以看到的确建立了传输连接。

接下来的一步是将我们的密钥从服务器推送到客户端。为此,需要在服务器上运行以下命令︰

scp /root/.ssh/id_rsa.pub root@127.0.0.1:/root/.ssh/authorized_keys -P 2222

请注意,当被提示输入凭据时,需要输入的是客户端机器上的 root 密码。

一旦服务器 ssh 密钥已被推到客户端后,就建立了一条从服务器到客户端且基于 SSH 的 vpn 隧道 (-w) 。

ssh -i /root/.ssh/id_rsa root@127.0.0.1 -p 2222 -w 1:1 -o TCPKeepAlive=yes -o ServerAliveInterval=50 &

如果执行成功的话,你现在应该会在客户端和服务器上看到新的网络接口 tun1 。在这两台机器上,你需要提供用于NAT网络地址转换的 IP、路由地址以及IP地址表。

**服务器**

ifconfig tun1 address 172.16.254.2 netmask 255.255.255.252 ifconfig tun1 up route add [client network]/[netmask] via 172.16.254.1 dev tun1 iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE

**客户端(通过ssh执行)**

ssh -i /root/.ssh/id_rsa root@127.0.0.1 -p 2222 'ifconfig tun1 address 172.16.254.1 netmask 255.255.255.252' ssh -i /root/.ssh/id_rsa root@127.0.0.1 -p 2222 'ifconfig tun1 up' ssh -i /root/.ssh/id_rsa root@127.0.0.1 -p 2222 'route add [server network]/[netmask] via 172.16.254.2 dev tun1' ssh -i /root/.ssh/id_rsa root@127.0.0.1 -p 2222 'iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE'

现在,服务器与客户端的虚拟专用网络连接就能达到双向连接了。如果想要转发所有通信流量,只需要设置默认的路由就行了。

最后的一点思考

此解决方案,虽然有效但是传输速度比较慢。而且这只能工作在 *nix 系统中。不过好的一面是,这个方法能够在建立的隧道中把所有的 TCP、UDP 和 ICMP 通信流量路由到正确的IP地址。这样的话,在内网渗透时就可以进行全端口扫描和流量代理。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180302A0S9RU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券