端口转发AND内网隧道搭建
reGeorg 工具
前置知识
reGeorg
的好处是通过 HTTP 协议建立 socks5
隧道,当我们能通过外网访问服务器A,但是我们并不能与位于内网的主机交互,这时 reGeorg 就派上了用场,假设此时我们拿到了服务器 A 的 webshell,但是该内网主机的 icmp、DNS 、tcp 和 udp 协议等都不能出网,唯一的数据通道是 webshell 搭建正向代理。
reGeorg 的下载
下载地址:https://github.com/sensepost/reGeorg
reGeorg 的利用
reGeorg提供了PHP、ASPX、JSP脚本,直接访问显示 Georg says, 'All seems fine'
,表示脚本运行正常
首先将 reGeorg 服务端脚本利用上传漏洞或者其他方法上传到服务器中,脚本运行正常如下:
如果网页出现PHP如下的 waring
警告,也不用着急,只要出现 All seems fine 即可。
访问成功之后,使用 python2
版本启动 reGeorgSocksProxy.py
,如果提示如下错误,需要安装 urllib3
库,但是在kali中运行一般是不需要安装的,因为已经内置。
执行如下命令安装:
1 | pip2 install urllib3 -i https://pypi.mirrors.ustc.edu.cn/simple/ |
使用 python2 reGeorgSocksProxy.py -h
查看帮助:
1 | _____ |
使用如下命令:
1 | python reGeorgSocksProxy.py -u http://192.168.1.10/tunnle.php -l 127.0.0.1 -p 7070 |
接着将程序代理本机的 7070 端口即可。具体应用
SSH 端口转发工具
前置知识
ssh 除了用于远程连接、文件上传和下载以外,还可以用于端口转发。
SSH端口转发参数
- -L 本机端口 本地端口转发
- -R 服务端口 远程端口转发
- -D 动态 socks5 端口,动态端口转发
- -f 后台启用,可以在本机直接执行命令,无需另外新的终端
- -N 不打开远程shell,只建立隧道
- -g 启用网关功能
- -q 安静模式,不输出任何信息
本地端口转发
本地端口转发示例:
1 | # ssh -L 本地端口:远程IP:远程端口 username@远程ssh服务器 |
此时访问本机的8090端口,就类似于访问 172.72.23.22
主机的80端口,是一个端口映射。
远程端口转发
远程端口转发示例:
1 | # ssh -R 远程端口:远程IP:远程端口 username@远程ssh服务器 |
动态端口转发(代理)
动态端口转发和本地远程不同的是,他是动态的,也就是我们访问的任何IP、任何端口都是经过这个 socks5 隧道去访问的。
动态端口转发示例:
1 | # ssh -D 本地端口 username@ssh远程服务器 |
FRP端口转发、代理工具
为什么需要内网渗透
我们的物理机、服务器可能处于路由器后或者处于内网之中。如果我们想直接访问到这些设备(远程桌面、远程文件、SSH等等),一般来说要通过一些转发或者P2P(端到端)组网软件的帮助。
其实,对于FRP穿透工具来说,它和端口转发有所不同,端口转发是只会进行单个端口的流量转发,但是这在渗透中往往是不行的,我们通过通过FRP进行内网的全流量的数据代理,像FRP可以代理全端口、全流量的数据,这样我们就可以使用 SocksCap 或者 Proxifier 以及 Proxychains 等工具进行连接。
FRP工具的介绍
frp 是一个可用于内网穿透的高性能的反向代理应用,支持TCP、UDP协议,为 HTTP 和 HTTPS 应用协议提供了额外的能力,且尝试性支持了点对点穿透。frp 采用 go 语言开发。更多的人使用 frp 是为了进行反向代理,满足通过公网服务器访问处于内网的服务,如访问内网web服务,远程 ssh 内网服务器,远程控制内网NAS等,实现类似花生壳、ngrok等功能。而对于内网渗透来讲,这种功能恰好能够满足我们进行内网渗透的流量转发。FRP 最大的一个特点是使用SOCKS 代理,而 SOCKS 是加密通信的,类似于做了一个加密的隧道,可以把外网的流量,通过加密隧道穿透到内网。效果有些类似于 VPN。又由于 frp 程序是基于 go 语言开发的,所以是可跨平台的。
FRP工具下载地址:https://github.com/fatedier/frp/releases
正反向代理【了解】
正向代理
概念
正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从目标服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转发请求,将获得的内容返回给客户端。正向代理的情况下,客户端必须要进行一些特殊的设置才能使用。
特点
正向代理需要主动设置代理服务器ip或者域名进行访问,由设置的服务器ip或者域名去访问内容并返回。
反向代理
概念
反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。
特点
正向代理需要配置代理服务器,而反向代理不需要做任何设置。反向代理是代理服务器,为服务器收发请求,使真实服务器对客户端不可见。
FRP包内容介绍
根据自己操作系统类型的下载并解压 FRP 程序,解压之后发现如下内容。
其中 frpc
是 frp 程序的客户端,而 frps
则是 frp 程序的服务端,供客户端连接,其余的 frpc.ini
和 frps.ini
则是 frp 程序对应的配置文件,其中 full
则是完全的配置文件。
FRP端口转发配置
FRP服务端配置
配置文件解释:
1 | [common] |
精简后的配置文件示例:
1 | [common] |
运行服务端:
FRP客户端配置
配置文件解释:
1 | [common] |
精简后的配置文件示例:
1 | [common] |
运行客户端:
实现的效果
- 访问 FRP 服务端的 2022 端口 = 访问 FRP 客户端的22端口
相关配置:
1 | [ssh-server] |
- 访问 FRP 服务端的 8080 端口 = 访问 FRP 客户端内网中主机 172.72.23.22 的 80 端口
相关配置:
1 | [forward-server] |
FRP搭建隧道
FRP服务端配置
1 | [common] |
运行服务端:
客户端配置
配置文件解释:
1 | [common] |
精简后的配置文件:
1 | [common] |
运行客户端:
实现的效果
请配合 代理工具进行使用。
详细教程:https://zhuanlan.zhihu.com/p/403361038
代理工具
隧道的搭建
以下使用 frp 搭建的socks5隧道进行演示
网络拓扑:
场景: 攻击者无法访问 存在 SSRF 漏洞的内网,但是 SSRF 服务器将自己的80端口,映射到了公网(以内网地址 192.168.1.10代替)的 8080端口。攻击者可以访问到 192.168.1.10。
通过漏洞利用,成功拿下 内网中的任意一台服务器,并在该服务器上搭建socks5隧道,进行内网渗透。
这里假设我们拿到了 192.168.1.10 的服务器控制权限(web网站的权限 或系统的权限),通过 frp 程序进行流量穿透:
第一步:准备一个服务器作为FRP的服务端:
1 | [common] |
第二步:将沦陷的 192.168.1.10 作为FRP的客户端,搭建socks隧道:
1 | [common] |
第三步:先启动服务端,再启动客户端:
此时已经在 FRP的服务端的 9090 端口,搭建了socks隧道。通过该隧道直接可通 192.168.1.10 的内网
Proxifier
工具介绍
Proxifier
是一款代理客户端软件,可以让不支持代理服务器工作的程序变的支持代理。支持各种操作系统和各代理协议,它的运行模式可以指定端口,指定程序的特点。
Proxifier
的主要用途是在系统级别通过代理服务器强制 Web 请求,从而使来自不支持代理的应用程序的请求通过代理访问其预期网站。
工具安装
官网下载地址:http://www.proxifier.com/
汉化PJ版本:https://x1ong.lanzouq.com/iO2dZ17w16mf
**激活码: **
用户名:www.3322.cc
5EZ8G-C3WL5-B56YG-SCXM9-6QZAP
YTZGN-FYT53-J253L-ZQZS4-YLBN9
用户名:zxi
注册码:
LYZGL-F2KX3-JW5W4-A33MC-25QHH
Proxifier v3.21 便携版(稳定版序列号)
LAZ83-4292V-AKEWR-UBJR9-ZEBCJ
LMZ7G-9WCYD-57329-FSMDN-AZA4W
VGZFC-22W8M-DR8W5-ZSMFP-CCUVZ
ZZZAK-UWY2F-83K2M-GVS2K-XU7S5
V7ZHQ-6WVHH-ZDC25-F2NDQ-MJYU3
JWZFJ-R3WTY-D4HYU-G4UPR-98LJS
工具使用
在使用该工具之前,请确保你已经通过上方建立了 socks5 隧道(比如使用 reGeorg、SSH动态端口转发、FRP搭建的socks5 隧道)。
打开 Proxifier工具,点击菜单栏中的 <配置文件 > 选择 <代理服务器>
接着点击 <添加>
填写 frp 服务器的地址 以及对应的端口,这里也可以点击检查,没问题的话可以点击确定。 <用户名 密码> 可选项,需要看你隧道有没有设置密码,我们这里没有设置。
最后会问你是否将此代理作为默认代理(所有程序都走该代理),点击是即可,后续可更改。
效果:
原本访问不到 192.168.1.10
的内网,但是现在可以访问了。
Proxychains
工具介绍
ProxyChains 是 Linux 和其他 Unix 下的代理工具。 它可以使任何程序通过代理上网, 允许 TCP 和 DNS 通过代理隧道, 支持HTTP、 SOCKS4 和 SOCKS5 类型的代理服务器, 并且可配置多个代理。 ProxyChains 通过一个用户定义的代理列表强制连接指定的应用程序, 直接断开接收方和发送方的连接。
ProxyChains 是一个强制应用的 TCP 连接通过代理的工具,支持 Tor、HTTP、与 Socks 代理。与 sshuttle 不同的是,ProxyChains 只会将当前应用的 TCP 连接转发至代理,而非全局代理。
工具安装
编译安装(新手不推荐):
1 | git clone https://github.com/rofl0r/proxychains-ng |
apt 命令安装(推荐):
1 | apt-get install proxychains |
工具的使用
ProxyChains
的配置文件位于 /etc/proxychains.conf
,打开后你需要在末尾添加你使用的代理。例如:
1 | [ProxyList] |
接着 在使用任何需要走代理的命令前面加上 proxychains
即可,例如:
这里可能会输出一些 proxychains
的信息,如果不要输出 proxychains 的信息,则使用 -q
参数。
浏览器插件
Firefox
这里我们使用 Firefox 浏览器的 FoxyProxy 插件进行配置:
接着使用该代理,此时 Firefox 的流量,都会经过该代理。
Chrome
这里我们使用 Chrome 浏览器的 SwitchyOmega 插件进行配置:
接着使用该代理,此时 Chrome 的流量,都会经过该代理。
kali 的 Firefox
这里我们使用 kali 自带的 Firefox 进行代理配置演示:
此时 Firefox 的流量,都会经过该代理。