0x01 一些前言
以前虽然也使用过一些数据转发的工具,但其实一直对数据转发的一些东西缺乏深入的了解,于是打算开始看着巨佬的博客进行一些学习,并进行一些简单的数据转发实验。
首先我们需要了解几个概念
- 端口转发(port forwarding)
端口转发有时候也被叫做隧道,是安全壳为网络安全通信使用的一种方法,我们像假设我们有个拥有公网IP的路由器,下面连着多台内网主机。内网主机和外网进行通信的时候,当外网发送信息回来时,路由器时怎么分辨这些信息是给哪台内网主机的呢?,这个时候,在路由器中就会有一个内网IP和路由器端口对应的一张表,当路由器的某个端口收到消息时,就把这个消息发给端口对应的IP,这就是端口转发的过程,不同的端口收到的消息,转发给相对应的不同的主机。
- 端口映射(port mapping)
指将一台主机的内网主机(LAN)的IP地址映射成一个公网主机(WAN)的IP地址,当用户访问公网IP的配置好的某个端口时,服务器就把请求转移到本地设置好的某台内网主机的某个端口,比如我的路由器有一个公网IP:172.16.1.1,上面接有一台服务器,分配的局域网ip为:192.168.1.2,我们就可以在路由器上配置一个端口映射,设置路由器的80端口映射到192.168.1.2这台内网主机的80端口,这样我们在公网直接访问172.16.1.1:80,路由器就会主动把流量转到内网服务器上的80端口上,并且此时在路由器上也会存在一个session,当内网主机返回数据给路由器时,路由器能准确的将消息发送给外网请求用户的主机,这个过程中路由器充当的是一个反向代理的作用。
- 反弹
假设存在两台主机A&B,A为攻击机器,B为受害机器,A监听端口、B监听端口,由于某些条件触发,使B主动去连接A主机,这就是一个反弹的过程
0x02 网络层&数据层转发
1. SSH
- 一些参数
-c | 启用压缩 |
---|---|
-N | 只做转发,不执行命令 |
-g | 允许远程主机连接本地转发端口,如果访问受害机本地端口就需要指定此端口 |
-q | 静默模式 |
-T | 禁用伪终端,使用who看不到的伪终端用户 |
- 修改sshd配置文件
文件路径:/etc/ssh/sshd_config
配置一下三项内容,去掉注释并设置为yes
AllowAgentForwarding yes
AllowTcpForwarding yes
GatewayPorts yes
重启sshd
service sshd restart
- 本地转发
我们有三台主机
主机A:192.168.2.180
主机B:192.168.2.127
主机C:192.168.2.188
在主机A上执行:ssh -g -L 5555:192.168.2.188:80 [email protected]
在A主机上监听5555端口,设置ssh-server(B主机)将tcp数据转发到C主机的80端口之上,最终A访问localhost:5555,就可以直接访问到C主机的80端口
- 远程转发
还是上面三台主机,
主机A:192.168.2.180
主机B:192.168.2.127
主机C:192.168.2.188
我们在A主机上执行:ssh -R 9999:192.168.2.188:80 [email protected]
远程转发是在SSh-server(B主机)端建立监听端口(9999),访问9999端口的数据包通过ssh隧道由ssh-server(B主机)发往ssh-cilent(A主机),ssh-cilent(A主机)端收到数据包后,再与指定的地址(192.168.2.188:80)建立新的连接转发数据包。在B主机上访问localhost:9999,就可以直接访问到C主机的80端口