安全测试过程中,往往会遇到各种复杂的网络情况,为了更好的在各个网段穿梭,也自然避免不了搭建各种代理、隧道。
最常见的情况是,某服务对外只开了80端口,在拿到webshell后,能通过web把流量代理出来,进而以该服务器的网络权限接入到内网。当然,今天不说web代理这块,就主要介绍下UDP、ICMP出网情况下的工具和接入方式。TCP部分,就单纯罗列工具了。
UDP Tunnel
推荐工具
https://github.com/wangyu-/tinyfecVPN
适用场景
1、UDP出网(UDP可直通服务端,并不是指DNS出网的概念)
2、ROOT权限
工具介绍
tinyfecVPN
项目描述是:是一款为有损链接而设计的,具有内置的前向纠错的,可改善高延迟网络质量的VPN。作者wangyu-
写过很多UDP相关的工具,如UDPspeeder
、udp2raw-tunnel
等,其中tinyfecVPN
是基于UDPspeeder
的,因此也具有一定的网络质量改善、UDP数据包纠错等能力。工具使用时,会创建虚拟网卡,以虚拟网卡建立VPN进行常规通信,相当于TCP over UDP。
使用案例
弄了两台vps:
tunnel-client ==> 43.129.86.182
tunnel-server ==> 43.129.82.135
其中server设置安全组,只允许 client 访问UDP 53端口(一般UDP可出网的情况,也都限制在53)。
确定UDP可通
当拿下的机器上没有nc
的时候,可以用nslookup
来操作,先在自己VPS(服务端)监听UDP 53端口,然后客户端设置nslookup
的server为服务端,当服务端收到DNS解析请求,则代表UDP可通。
下载使用
作者有提供已编译的binary, 不放心也可以自己编译:
https://github.com/wangyu-/tinyfecVPN/releases
wget https://github.com/wangyu-/tinyfecVPN/releases/download/20210116.0/tinyvpn_binaries.tar.gz
tar -zvxf tinyvpn_binaries.tar.gz
服务端:
启动监听53端口,并创建10.10.10.0/8的虚拟子网。
sudo ./tinyvpn_amd64 -s -l0.0.0.0:53 -f20:10 -k "passwd" --sub-net 10.10.10.0
这个时候ifconfig
可以看到新建的虚拟网卡,以及对应IP:10.10.10.1
。
客户端:
连接服务端53端口,组建局域网。
sudo ./tinyvpn_amd64 -c -r 43.129.82.135:53 -f20:10 -k "passwd" --sub-net 10.10.10.0 --keep-reconnect
客户端的ip为:10.10.10.2
如此,便在只有UDP可通的情况下,建立了VPN隧道,此时再访问server端开放的80端口,便畅通无阻了。
在此基础上,可以相当于TCP互通了,可以做各种你想做的事情了。
抓包测试
来看下流量上是什么情况,在服务端nc
监听1234
端口,然后发送aabbccddeeff
数据,分别看本地网卡eth
和虚拟网卡上的内容。
虚拟网卡
在虚拟网卡上,可以清晰地看到建立TCP连接全过程,和发送的数据:
物理网卡
而在eth上,只能看到一堆异常的UDP包(wireshark默认当DNS协议处理,然后都是非正常包)
因为建立vpn的时候,设置了-k
,使用xor
处理了一下。来看看不做xor
时,物理网卡上看到的内容会是什么样子的。
大致瞄了一眼,还是没能直接看明白通信内容。whatever,加个密还是会保险一点,毕竟如果有人分析清楚
tinyfecVPN
协议,还是比较容易解包看明白的。
同时,在建立VPN后,其实也可以各种TCP代理工具加密用起来了。
所以,这里也能看出,在流量侧对于这类隧道的识别,就是看看是否有持续的不能正常解析的DNS数据包了(当内部网络策略值放通UDP 53端口可访问外网时)。
keep-reconnect
客户端有个--keep-reconnect
选项,为什么要这个选项呢?
首先,UDP是无状态的,且该场景下只能客户端访问到服务端,要想实现多轮会话,只能设计好协议,让客户端能根据服务端的不同返回进行不同的操作。
其次,当上述会话停止,或者说中间几个包丢了,导致服务端找不到客户端的时候怎么办呢?那就意味着掉线了。
所以,加上--keep-reconnect
,主要是为了防止在丢失UDP会话后,客户端会主动向服务端发起心跳包,保持持续在线状态。
ICMP Tunnel
推荐工具
https://github.com/jamesbarlow/icmptunnel
适用场景
1、ICMP出网(ICMP可通服务端)
2、ROOT权限
工具介绍
icmptunnel是在ICMP请求和响应数据包中建立IP流量隧道的工具。说白话,就是利用ICMP来建立类VPN隧道。相当于TCP over ICMP。
使用案例
还是刚才两台机器,client只能icmp到server。
下载编译
git clone https://github.com/jamesbarlow/icmptunnel
cd icmptunnel
make
之后,你便得到了一个icmptunnel
的ELF。
禁用内核对ICMP包的响应 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
服务端
启动服务,并给启动服务所建立的tun0
网卡设置IP地址及子网掩码。
sudo ./icmptunnel –s
sudo ifconfig tun0 10.0.0.1 netmask 255.255.255.0
客户端
连接服务端,并给启动服务所建立的tun0
网卡设置IP地址及子网掩码。
sudo ./icmptunnel 43.129.82.135
sudo ifconfig tun0 10.0.0.2 netmask 255.255.255.0
此时,客户端便可以通过访问10.0.0.1来访问服务端了。
抓包测试
同样,来看一下客户端在访问服务端80端口时,虚拟网卡和物理网卡上抓到的包分别是什么样子。
虚拟网卡
虚拟网卡上看到的是正常的TCP协议。
物理网卡
可以看到,整个HTTP请求头都被放到ICMP包里了,其实下面的IPv4也是ICMP。1514大小的,就是curl的回报了。
对比tinyfecVPN
,icmptunnel
并没有增加xor加密等流量混淆的手段,但其实无妨,做个ssh端口转发也就能把流量加密了。同样,因为该场景中,客户端到服务端是单向的,也就同样依靠客户端来做心跳包保持连接。
对于这一类的隧道,流量上,检测ICMP长度就能看出一些端倪了。
TCP Tunnel
TCP这里就不说了,各类流量转发、VPN、socks代理,就只贴一些常用工具和对应的地址吧。
ZeroTierOne
VPN、跨平台、内网穿透、快速组网。
https://github.com/zerotier/ZeroTierOne
Frp
跨平台、内网穿透、带管理界面,开源可二开。(一款快速的反向代理软件,可帮助您将NAT或防火墙后面的本地服务器公开到互联网上。)
https://github.com/fatedier/frp
NPS
一款轻量级、高性能、功能强大的内网穿透代理服务器。支持tcp、udp、socks5、http等几乎所有流量转发,可用来访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析、内网socks5代理等等……,并带有功能强大的web管理端。
https://github.com/ehang-io/nps
goproxy
https://github.com/snail007/goproxy
Proxy是golang实现的高性能http,https,websocket,tcp,socks5代理服务器,支持内网穿透,链式代理,通讯加密,智能HTTP,SOCKS5代理,黑白名单,限速,限流量,限连接数,跨平台,KCP支持,认证API。
iox
一款端口转发转发工具、内网代理工具,README中描述是lcx、ew的加强版。但看下来似乎是说:1、参数简化、好记了;2、并发处理加强了;3、支持流量加密了。编译出来大概2.2M,upx一下后800kb+。
https://github.com/EddieIvan01/iox
gost
描述是GO语言实现的安全隧道。讲道理没有太用过,但star很多。
特性:
多端口监听
可设置转发代理,支持多级转发(代理链)
支持标准HTTP/HTTPS/HTTP2/SOCKS4(A)/SOCKS5代理协议
Web代理支持探测防御
支持多种隧道类型
SOCKS5代理支持TLS协商加密
Tunnel UDP over TCP
TCP/UDP透明代理
本地/远程TCP/UDP端口转发
支持Shadowsocks(TCP/UDP)协议
支持SNI代理
权限控制
负载均衡
路由控制
DNS解析和代理
TUN/TAP设备
https://github.com/ginuerzh/gost
lcx
原本出处应该不在这,但发现它能编译使用。
https://github.com/windworst/LCX
ew
http://rootkiter.com/EarthWorm/
NC
最近学到一招端口转发:
nc --sh-exec "nc 127.0.0.1 1433" -l 1432 --keep-open
Root权限
啥?没root权限?那试试下面俩:
1、ubuntu 14.04 - 21.04
https://github.com/briskets/CVE-2021-3493
2、应用层提权 稳定好用
https://github.com/worawit/CVE-2021-3156
原文始发于微信公众号(安全攻防团队):一些隧道搭建
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论