目  录

第1章            概述... 3

1.1.         实现命令... 3

1.2.         SSH隧道类型... 3

第2章            SSH隧道... 4

2.1.         动态映射(Socks代理)... 4

2.1.1.   命令... 4

2.1.2.   相关参数说明... 4

2.1.3.   意义... 4

2.1.4.   运用场景... 4

2.1.5.   优点... 6

2.1.6.   缺点... 6

2.2.         本地映射(正向)... 6

2.2.1.   命令... 7

2.2.2.   相关参数说明... 7

2.2.3.   意义... 7

2.2.4.   运用场景... 7

2.2.5.   优点... 8

2.2.6.   缺点... 8

2.3.         远程映射(反向)... 8

2.3.1.   命令... 8

2.3.2.   相关参数说明... 9

2.3.3.   意义... 9

2.3.4.   运用场景... 9

2.3.5.   优点... 10

2.3.6.   缺点... 10

第3章            总结... 11

3.1.         动态映射(Socks代理)... 11

3.2.         本地映射(正向)... 11

3.3.         远程映射(反向)... 11

3.4.         实际应用场景... 11

 

第1章     概述

SSH是一种安全的传输协议,一般用来连接服务器。除了这个功能,SSH还能实现隧道功能。隧道是一种把一种网络协议封装进另外一种网络协议进行传输的技术。这里我们研究ssh隧道,所以所有的网络通讯都是加密的。又被称作端口转发,因为ssh隧道通常会绑定一个本地端口,所有发向这个端口端口的数据包,都会被加密并透明地传输到远端系统。

1.1.   实现命令

ssh -C -f -N -L [Sip]Sport:Dip:Dport user@Tunnel-IP

ssh -C -f -N -R [Sip]Sport:Dip:Dport user@Tunnel-IP

ssh -C -f -N -D Sport user@Tunnel-IP

Windows下可用plink代替ssh

相关参数解释:(三种隧道模式-L、-R、-D,前面参数可省略)

-C Enable compression              压缩数据传输。

-f Fork into background after authentication

后台认证用户/密码,通常和-N连用,不用登录到远程主机。

-N Do not execute a shell or command

不执行脚本或命令,通常与-f连用。

1.2.   SSH隧道类型

ssh隧道有3种类型:

动态端口转发(Socks 代理)-D

本地端口转发(正向代理)-L

远端端口转发(反向代理)-R

第2章   SSH隧道

2.1. 动态映射(Socks代理)

属于Port 2 IP,也就是端口到IP的隧道

本地指定端口(Sport)->流量转发Tunnel-IP->[目标]

所有通过本地指定端口(Sport)的流量,都会通过SSH服务端(Tunnel)转发到目标(动态,无需指定),只要是Tunnel-IP可以访问到的IP、端口,我们本地都可以通过隧道访问。

Socks代理:这里相当于用SSH实现了Socks代理

2.1.1.  命令

命令在本机执行,也就是Sip

ssh -D Sport user@Tunnel-IP

2.1.2.  相关参数说明

Sport代表本地源端口,Tunnel-IP代表SSH服务IP。

2.1.3.  意义

监听本地Sport端口,将流量通过隧道转发出去。

2.1.4.  运用场景

相当于一个便捷的Socks代理,可以简单实现突破网络限制、FQ。

本机(27.x.x.77) -> 中间服务器(94.x.x.147) -> 目标机(198.x.x.90)

Parrot OS     支持SSH的路由器设备    目标机SECZ

中间服务器地址为94.x.x.147,是一台外网的基于Linux的无线路由器,允许ssh连接就行

ssh -D 7777 root@94.x.x.147  //本地监听7777端口

本地为一台Parrot OS,IP为27.x.x.77(我是内网拨号上网,这个是运营商的IP)

linux下全局代理,使用proxychains进行socket连接,在配置文件:/etc/proxychains.conf添加一条:socks5 127.0.0.1 7777

执行命令的时候,前面加proxychains就进行了代理

下面我用hydra做个实验,不加proxychains执行爆破

加上proxychains进行爆破,可以看到多了一条127.0.0.1:7777,这是我设置的socket代理

通过代理访问的目标机,IP为198.x.x.90,查看ssh登录记录,可以看到27.x.x.77(本地),然后紧接着是94.x.x.147(中间代理)

2.1.5.  优点

配置一个代理服务就可以访问远端机器和与其所在子网络的所有服务

2.1.6.  缺点

应用程序需要额外配置SOCKS代理,若应用程序不支持代理配置则无法使用

2.2. 本地映射(正向)

属于Port 2 Port,也就是本地端口到目标端口的隧道

本地指定端口(Sport)->流量转发(Tunnel-IP)->目标指定端口(Dip:Dport)

所有通过本地指定端口(Sport)的流量,都会通过SSH服务端(Tunnel)转发到目标的指定端口(Dip:Dport)。

正向:这里相当于我们本机Sip主动(正向)连接SSH服务器(Tunnel-IP),并将目标端口(Dip:Dport)通过SSH服务器映射到本地指定端口(Sport)。

2.2.1.  命令

命令在本机执行,也就是Sip

ssh -L [Sip]Sport:Dip:Dport user@Tunnel-IP

2.2.2.  相关参数说明

Sip、Sport代表源,Dip、Dport代表目的,Tunnel-IP代表SSH服务IP。

2.2.3.  意义

将目的IP的某个端口通过隧道映射到本地指定端口。

2.2.4.  运用场景

Sip是本机,Tunnel-IP是SSH服务器(假设被我们拿下的企业外部WEB服务器),Dip是我们Sip不能够直接访问到的,但是Tunnel-IP可以访问(假设是企业内网设备,开启了3389RDP服务),并且Tunnel-IP的SSH服务22端口对外可访问,我们就可以主动连接它的22端口。如果它只对外开放了80端口,我们就要用到下面的远程映射,也就是反向。

1、Sip - Tunnel-IP - Dip (Sip和Dip不通)

  • Sip:10.10.10.11
  • Dip:192.168.0.30
  • Tunnel:10.10.10.10、192.168.0.28(将Sip和Dip隔离)

在Sip本地执行命令:将Dip的3389端口通过隧道映射到本地8888端口

plink.exe -L 8888:192.168.0.30:3389 test@10.10.10.10

mstsc /v 127.0.0.1:8888

2.2.5.  优点

无需设置代理

2.2.6.  缺点

每个服务都需要配置不同的端口转发

2.3. 远程映射(反向)

属于Port 2 Port,也就是本地端口到目标端口的隧道

本地指定端口(Sport)->流量转发(Tunnel-IP)->目标指定端口(Dip:Dport)

所有通过本地指定端口(Sport)的流量,都会通过SSH服务端(Tunnel)转发到目标的指定端口(Dip:Dport)。

反向:流量转发方式和本地映射是一样的,不一样的是实现的方式,远程映射是通过Tunnel-IP跳板机反向连接我们本机Sip的SSH服务,将目标Dip的Dport映射到本机Sip的Sport。

2.3.1.  命令

命令在跳板机执行,也就是Tunnel-IP上执行

ssh -R Sport:Dip:Dport user@Sip

2.3.2.  相关参数说明

Sport代表源,Dip、Dport代表目的,在这里Sip充当 SSH服务角色。

2.3.3.  意义

将目的IP的某个端口通过隧道映射到本地端口。(和本地映射一样,只不过实现方式不同)

2.3.4.  运用场景

Sip是本机,Tunnel-IP是跳板机(假设被我们拿下的企业外部WEB服务器),Dip是我们Sip不能够直接访问到的,但是Tunnel-IP可以访问(假设Sip是企业内网设备,开启了HTTP服务54321端口),和本地映射场景不同的是,Tunnel-IP仅对外提供HTTP服务,而我们拿到了它的shell权限,这个时候通过执行shell远程映射,反向连接我们本机Sip,并将目标Dip:Dport映射到Sip:Sport。

1、Sip - Tunnel-IP - Dip (Sip和Dip不通)

  • Sip:10.10.10.138
  • Dip:198.211.33.90
  • Tunnel-IP:10.10.10.1(将Sip和Dip隔离)

在Tunnel-IP跳板机执行命令:将Dip的54321端口通过隧道映射到本地6666端口

plink.exe -R 6666:198.211.33.90:54321 test@10.10.10.128

在本机Sip:10.10.10.138查看6666端口

目标Dip:198.211.33.90的54321端口

2.3.5.  优点

可以穿越防火墙和NAT设备

2.3.6.  缺点

每个服务都需要配置不同的端口转发。

第3章   总结

3.1. 动态映射(Socks代理)

假设我们搞定了一台secz外网的WEB服务器(这台服务器和secz内网互通),这个时候通过动态映射,可以横扫内网(一切和WEB服务器互通的目标)。(需要Socks代理访问)

3.2. 本地映射(正向)

假设我们搞定了一台secz外网的WEB服务器(这台服务器和secz内网互通,并且开启了SSH服务对外),内网有一个目标机开启了3389RDP服务,通过本地映射(正向),把3389端口转发出来,直接远程登陆内网RDP服务器。(每次只能映射一个服务端口)

3.3. 远程映射(反向)

假设我们搞定了一台secz外网的WEB服务器(这台服务器和secz内网互通,但是没有SSH服务),内网有一个目标机开启了3389RDP服务,在WEB服务器上通过远程映射(反向连接),把3389端口转发出来,直接远程登陆内网RDP服务器。(每次只能映射一个服务端口)

3.4. 实际应用场景

实际上,本地映射、远端映射和动态映射都可以灵活应用,跳板机、目标主机的角色是可以互相转换的。

流量操控之SSH隧道与端口转发的更多相关文章

  1. SSH隧道:端口转发功能详解

    SSH系列文章: SSH基础:SSH和SSH服务 SSH转发代理:ssh-agent用法详解 SSH隧道:端口转发功能详解 1.1 ssh安全隧道(一):本地端口转发 如下图,假如host3和host ...

  2. ssh隧道实现端口转发

    ssh隧道实现端口转发 本地转发 # 本地转发 ssh -g -f -N -L : root@ # -L 本地端口转发,转发172.16.1.1主机可以访问的资源,这里为转发172.16.1.2的80 ...

  3. 使用 SSH 隧道实现端口转发、SOCKS 代理

    SSH隧道 本地端口转发 本地客户端通过 local_port 连接到 MobaXterm: MobaXterm 绕过防火墙,使用 user 用户连接到 ssh_server_ip:ssh_serve ...

  4. ssh隧道(端口转发)

    本地转发: ssh -Nf -L [bind_address:]port:host:hostport sshServer -Nf 后台运行 -L 本地转发 [bind_address] 绑定本地地址, ...

  5. SSH隧道技术----端口转发,socket代理

    原文的原始出处不详,本文也是在复制引用了某篇转载,并做了必要的整理与编辑. 本文的受众 如果你遇到了以下问题,那么你应该阅读这篇文章 我听说过这种技术,我对它很感兴趣 我想在家里访问我在公司的机器(写 ...

  6. [Linux] SSH隧道本地端口转发访问远程服务中的数据库

    当我的本地没有安装任何数据库服务的时候,可以直接通过我本地的端口访问远程机器上的数据库服务,实现这样的效果就可以使用本地转发功能 实际测试本地端口转发,把本地的9006端口转发给远程服务器的115.1 ...

  7. 基于SSH协议的端口转发

    [前言] 最近一直在使用ssh协议的端口转发(隧道)功能,完成对内网空透等.这篇文章将主要讲解3种常用的ssh tunnelling使用方法和基本原理. 在介绍具体内容前,我先奉上端口转发的常用情景: ...

  8. 通过SSH隧道的本地转发实现Django连接远程数据库

    SSH连接命令 默认连接的端口为22 1. 使用私钥 ssh -p connect_port user_name@host -i your_private_identity 2. 使用用户密码 ssh ...

  9. SSH 内网端口转发实战

    导读 大家都知道SSH是一种安全的传输协议,用在连接服务器上比较多.不过其实除了这个功能,它的隧道转发功能更是吸引人. 如果两个内网之间的linux服务器需要互相登录,或需要互相访问内网某个端口,担忧 ...

随机推荐

  1. Inconsistent accessibility

    Inconsistent accessibility: return type 'ConsoleApplication17.IBacklight' is less accessible than me ...

  2. Android基础Activity篇——Intent

    1.显式的Intent intent是用来各各活动之间切换的,还可以用来传递参数. 项目还是使用之前创建的ActivityTest项目,这里新建一个活动SecondActivity.java,并且勾选 ...

  3. Android基础Activity篇——Toast

    1.Toast Toast在英文中有烤面包的意思,而在安卓开发中是用来提醒用户的消息显示.我猜这里之所以用Toast为该功能命名可能是因为消息的弹出方式就像面包烤好了从面包机中弹出来一样. 2.使用T ...

  4. 夜色的 cocos2d-x 开发笔记 04

    本章会把游戏的基本功能结束,前面实现了子弹发射,产生敌人. 接下来我们要,检测子弹与敌人碰撞,让玩家移动,实现这个游戏的基本功能. 于是多出了这几个方法,当然还是写在.h文件里 首先实现触摸监听的方法 ...

  5. 关于ubuntu安装软件的问题:apt-get和dpkg区别?

    两者的区别是dpkg绕过apt包管理数据库对软件包进行操作,所以你用dpkg安装过的软件包用apt可以再安装一遍,系统不知道之前安装过了,将会覆盖之前dpkg的安装.1.dpkg是用来安装.deb文件 ...

  6. 用iSee图片专家制作淘宝店标教程

    普通的淘宝店铺都会有店标.店标都显示在店铺首页的显现位置,买家在逛淘宝店的时候,一眼都会瞄到店标.因此,如果可以制作一个专属于自己店铺的店标,可以吸引买家的眼光,也更好地宣传了店铺. 下面就用iSee ...

  7. PHP:__get()、__set()、__isset()、__unset()、__call()、__callStatic()六个魔术方法

    哎呀呀,今天小仓鼠学到了魔术方法,简称魔法,哈哈哈哈,神经病啊~ 平时在面试的时候,也会遇到问魔术方法有哪些的问题哦!今天我们来了解一下下~ 1.__get() 形式: __get($objName) ...

  8. Association, Composition and Aggregation in UI5, CRM, S/4HANA and C4C

    UI5 UI5使用Association和Aggregation描述控件之间的关系. Aggregation:parent和子控件在lifecycle上存在依赖关系: When a ManagedOb ...

  9. R cannot be resolved的几种可能 R not generated

    项目又爆红了,Eclipse真是够操心,顺便看一下R cannot be resolved的几种可能 这次是SVN合并的问题 2015-12-24 主要看 Console 输出的问题位置即可,一般都是 ...

  10. memcache 基本操作

    输入 telnet  localhost 11211 步骤: 1.输入 set hans 0 0 3 回车 2. 输入 123  回车 3. get  hans 回车 删除操作,输入 delete h ...