5号黯区-致力于网络安全[红队攻防]技术研究的博客

ssh隧道详解与案例利用讲解

2019-06-28

你是否有过自己身处内网,却想整个远控上线?你是否有过身处目标内网,却想把目标的内网的Linux的ssh转发出来?你是否想过穿透多层网络代理?那么,ssh隧道技术你值得学习。

镇帖图

I:SSH隧道是什么

  • 专业一点:
    SSH隧道是一种通过加密的SSH连接传输任意网络数据的方法。它可用于为遗留应用程序添加加密。它还可用于实现VPN(虚拟专用网络)和跨防火墙访问Intranet服务。原文:https://www.ssh.com/ssh/tunneling/
  • 半吊子一点:
    咱也知道怎么解释,咱也不知道问谁。ssh隧道就是以ssh协议为基础的隧道,比如高速公路隧道,就是以高速公路为基础的隧道。有什么用?高速公路隧道有什么用?是不是穿透一些山体(阻碍物)以达到通行的目的?那么ssh隧道也是如此,通过ssh协议去到本来不可达的目的地。

II:SSH隧道能干嘛

能干的事情非常多,举些具体例子:

  1. 本地远控上线,不需要什么花生壳,什么路由器映射。
  2. 把本地搭建的网站映射到外网,让网友访问。
  3. 能做代(fan)理(qiang)。
  4. 在内网渗透中,可以穿透多层网络,直达目标网络根部。

III:SSH隧道分三种

  • 本地ssh隧道
  • 远程ssh隧道
  • 动态ssh隧道(代理)

IV:SSH隧道相关命令

  • Linux下的ssh命令参数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    root@vultr:~# ssh
    usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
    [-D [bind_address:]port] [-E log_file] [-e escape_char]
    [-F configfile] [-I pkcs11] [-i identity_file]
    [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]
    [-O ctl_cmd] [-o option] [-p port]
    [-Q cipher | cipher-auth | mac | kex | key]
    [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]
    [-w local_tun[:remote_tun]] [user@]hostname [command]
  • windows下的SSH
    由于windows下是没有ssh的,但是有plinkhttps://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html,命令的话跟ssh多少会有点出入。

  • ssh隧道常用选项

    1
    2
    3
    4
    5
    6
    7
    -N #告诉SSH客户端,这个连接不需要执行任何命令。仅仅做端口转发
    -f #告诉SSH客户端在后台运行
    -L #本地转发
    -R #远程转发
    -D #动态转发
    -C #数据压缩
    -g #在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。注:这个参数我在实践中似乎始终不起作用。

V:SSH隧道详解与实例应用

本地ssh隧道

本地ssh隧道

假设victim210.10.2.2要从hacker_vps3.3.3.5下载东西,且victim2无法直接访问到hack_vps,那么正常情况是在victim下载,然后从victim传到victim2,可如果架设本地ssh隧道,那一切都简单了。

victim2执行:ssh -C -N -L 0.0.0.0:8080:3.3.3.5:80 -p 22 root@10.10.10.10
该命令释义: 本地全部网卡监听8080端口,然后把本地网卡监听的8080的数据通过VPS10.10.10.10发送的3.3.3.580端口。
隧道咦打通
现在,victim2只需要在浏览器访问http://127.0.0.1:8080就可以访问到3.3.3.580端口开放的web服务了。

远程SSH隧道

远控上线
 hacker机执行:ssh -C -N -R 0.0.0.0:8080:192.168.1.5:443 -p 22 root@3.3.3.5
该命令释义: hacker_VPS会全端口监听8080端口并把来自该端口的全部数据传到192.168.1.5这台机器的443端口。
 那么如果我们的远控生成服务端的时候,IP就要填我们的hacker_vps这台机器的IP,在本例中就是3.3.3.5,填写端口在本例中的端口就是8080注意,在远控的客户端(本地界面端)监听端口是:443;而且,如果需要做远程SSH隧道,是需要配置VPS的ssh服务的,比如配置本案例中的3.3.3.5/etc/ssh/sshd_config,需要加上如下配置:

1
2
3
4
5
6
# all completed and restart ssh service:/etc/init.d/ssh restart
# vi /etc/ssh/sshd_config
AllowTcpForwarding yes
GatewayPorts yes
TCPKeepAlive yes
PasswordAuthentication yes

动态SSH隧道

动态SSH隧道

如上图,hacker是无法直接访问Victim210.10.2.2等内网机器的,那么如果我们想在hacker192.168.1.5这台机器直接访问到这些机器,我们可以用本地SSH隧道,但是这技术只能是点对点的,也就是一个对端口对应一个端口,没办法做的一对多,所以就有了动态SSH隧道技术

hacker机执行:plink.exe -C -N 1080 -P 22 root@3.3.3.5该命令释义: 在本地监听1080作为代理端口,该端口监听到数据都会通过Victim_out发送出去,所以就可以达到一对多的效果,也可以用来做网络(fan)代理(qiang),比如访问外网。使用方法是配合proxifer,这个的使用另开课程讲解。


说完了单个的SSH隧道的实现和案例,就要涉及多个SSH隧道的配合使用,比如远程SSH隧道配合本地SSH隧道,又或者是三种隧道方式一起使用,打通深层次的网络。使用姿势请加入培训观看。


关于我们

5号黯区是一支致力于红队攻防研究与培训的团队,官网:http://www.dark5.net

加入QQ群

加入QQ群

关注公众号

关注公众号