渗透测试-----8-流量操控与隧道

本文详细介绍了在网络安全和渗透测试中常用的隧道技术,包括SSH的本地和远程端口转发,用于数据加密和绕过防火墙限制。此外,还讨论了DNS隧道的两种类型及其优缺点,以及如何利用工具如iodine和dns2tcp实现隧道。文章还提到了其他如stunnel等加密传输工具,用于增强非加密协议的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

流量操控技术和隧道

渗透测试中经常遇到访问受限的网络环境

使用隐藏的手段逃避安全检查措施和溯源追踪

证明看似严格的访问控制仍然存在弱点

在非受信任的网络中实现安全的数据传输

分类

  • 重定向

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客户端

http://code.kryo.se/iodine/

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

抓包对比隧道前后差异

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值