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 服务端脚本利用上传漏洞或者其他方法上传到服务器中,脚本运行正常如下:

image-20230909180454492

如果网页出现PHP如下的 waring 警告,也不用着急,只要出现 All seems fine 即可。

image-20230909180601133

访问成功之后,使用 python2 版本启动 reGeorgSocksProxy.py,如果提示如下错误,需要安装 urllib3 库,但是在kali中运行一般是不需要安装的,因为已经内置。

image-20230909184439409

执行如下命令安装:

1
pip2 install urllib3 -i https://pypi.mirrors.ustc.edu.cn/simple/

使用 python2 reGeorgSocksProxy.py -h 查看帮助:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
                     _____
_____ ______ __|___ |__ ______ _____ _____ ______
| | | ___|| ___| || ___|/ \| | | ___|
| \ | ___|| | | || ___|| || \ | | |
|__|\__\|______||______| __||______|\_____/|__|\__\|______|
|_____|
... every office needs a tool like Georg

willem@sensepost.com / @_w_m__
sam@sensepost.com / @trowalts
etienne@sensepost.com / @kamp_staaldraad


usage: reGeorgSocksProxy.py [-h] [-l] [-p] [-r] -u [-v]

Socks server for reGeorg HTTP(s) tunneller

optional arguments:
-h, --help show this help message and exit
-l , --listen-on The default listening address
-p , --listen-port The default listening port
-r , --read-buff Local read buffer, max data to be sent per POST
-u , --url The url containing the tunnel script
-v , --verbose Verbose output[INFO|DEBUG]

使用如下命令:

1
python reGeorgSocksProxy.py -u http://192.168.1.10/tunnle.php -l 127.0.0.1 -p 7070
image-20230909193010785

接着将程序代理本机的 7070 端口即可。具体应用

SSH 端口转发工具

前置知识

ssh 除了用于远程连接、文件上传和下载以外,还可以用于端口转发。

SSH端口转发参数

  • -L 本机端口 本地端口转发
  • -R 服务端口 远程端口转发
  • -D 动态 socks5 端口,动态端口转发
  • -f 后台启用,可以在本机直接执行命令,无需另外新的终端
  • -N 不打开远程shell,只建立隧道
  • -g 启用网关功能
  • -q 安静模式,不输出任何信息

本地端口转发

image-20230909200132802

本地端口转发示例:

1
2
3
# ssh -L 本地端口:远程IP:远程端口 username@远程ssh服务器
ssh -L 8090:172.72.23.22:80 root@192.168.1.10 -f -N
# 实现功能: 将172.72.23.22主机的80端口转发到SSH服务器的 8089端口

image-20230909195705956

此时访问本机的8090端口,就类似于访问 172.72.23.22主机的80端口,是一个端口映射。

远程端口转发

image-20230909202344268

远程端口转发示例:

1
2
3
# ssh -R 远程端口:远程IP:远程端口 username@远程ssh服务器
ssh -R 8090:172.72.23.23:80 root@192.168.1.103 -f -N
# 实现功能: 192.168.1.103访问自己的8090端口,就能访问到172.72.23.23的80端口

动态端口转发(代理)

image-20230909203710307

动态端口转发和本地远程不同的是,他是动态的,也就是我们访问的任何IP、任何端口都是经过这个 socks5 隧道去访问的。

动态端口转发示例:

1
2
3
# ssh -D 本地端口 username@ssh远程服务器
ssh -D 1080 root@192.168.1.10 -f -N
# 实现功能: 本地端口1080的流量都转发给192.168.1.10去访问

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

正反向代理【了解】

正向代理

概念

​ 正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从目标服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转发请求,将获得的内容返回给客户端。正向代理的情况下,客户端必须要进行一些特殊的设置才能使用。

image-20230909210041320
特点

正向代理需要主动设置代理服务器ip或者域名进行访问,由设置的服务器ip或者域名去访问内容并返回。

反向代理

概念

​ 反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。

image-20230909210128435
特点

正向代理需要配置代理服务器,而反向代理不需要做任何设置。反向代理是代理服务器,为服务器收发请求,使真实服务器对客户端不可见。

FRP包内容介绍

根据自己操作系统类型的下载并解压 FRP 程序,解压之后发现如下内容。

image-20230909212034353

其中 frpc 是 frp 程序的客户端,而 frps 则是 frp 程序的服务端,供客户端连接,其余的 frpc.inifrps.ini 则是 frp 程序对应的配置文件,其中 full 则是完全的配置文件。

FRP端口转发配置

FRP服务端配置

配置文件解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[common]
# frp监听的主机
bind_addr = 0.0.0.0
# frp监听的端口
bind_port = 7080
# 客户端连接的授权码
token = shadow

################ 以下参数可选
# frp 的web管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true

精简后的配置文件示例:

1
2
3
4
5
6
[common]
bind_addr = 0.0.0.0
bind_port = 7080
token = shadow

# 开放FRP服务,端口为7080 授权码为shadow

运行服务端:

image-20230909213940565

FRP客户端配置

配置文件解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[common]
# FRP服务器的IP
server_addr = FRP服务器的IP
# 请换成设置的服务器端口
server_port = FRP服务器的端口
# 连接服务器的授权值
token = FRP服务器的授权值

# 加密传输
use_encryption = true
use_compression = true

# 配置ssh服务
[配置名]
type = 连接类型
local_ip = 本地IP
local_port = 22
remote_port = 自定义的远程服务器端口

精简后的配置文件示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[common]
server_addr = FRP服务器的IP
server_port = FRP服务器的端口
token = FRP服务器的授权值
use_encryption = true
use_compression = true
[ssh-server]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2022
[forward-server]
type = tcp
local_ip = 172.72.23.22
local_port = 80
remote_port = 8080

运行客户端:

image-20230909214253206

实现的效果

  1. 访问 FRP 服务端的 2022 端口 = 访问 FRP 客户端的22端口

image-20230909214523264

相关配置:

1
2
3
4
5
[ssh-server]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2022
  1. 访问 FRP 服务端的 8080 端口 = 访问 FRP 客户端内网中主机 172.72.23.22 的 80 端口

image-20230909214700275

相关配置:

1
2
3
4
5
[forward-server]
type = tcp
local_ip = 172.72.23.22
local_port = 80
remote_port = 8080

FRP搭建隧道

FRP服务端配置

1
2
3
4
[common]
bind_addr = 0.0.0.0
bind_port = 7080
token = shadow

运行服务端:

image-20230909220916883

客户端配置

配置文件解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[common]
server_addr = FRP服务器的IP
server_port = FRP服务器的端口
token = FRP服务器的授权值
use_encryption = true
use_compression = true
[sock5-proxy]
# 协议类型
type = tcp
# sock5的端口
remote_port = 1080
plugin = socks5
# 加密传输
use_encryption = true
use_compression = true

精简后的配置文件:

1
2
3
4
5
6
7
8
9
10
[common]
server_addr = FRP服务器的IP
server_port = FRP服务器的端口
token = FRP服务器的授权值
use_encryption = true
use_compression = true
[sock5-proxy]
type = tcp
remote_port = 1080
plugin = socks5

运行客户端:

image-20230909220939852

实现的效果

请配合 代理工具进行使用。

详细教程:https://zhuanlan.zhihu.com/p/403361038

代理工具

隧道的搭建

以下使用 frp 搭建的socks5隧道进行演示

网络拓扑:

image-20230910102113753

场景: 攻击者无法访问 存在 SSRF 漏洞的内网,但是 SSRF 服务器将自己的80端口,映射到了公网(以内网地址 192.168.1.10代替)的 8080端口。攻击者可以访问到 192.168.1.10。

通过漏洞利用,成功拿下 内网中的任意一台服务器,并在该服务器上搭建socks5隧道,进行内网渗透。

这里假设我们拿到了 192.168.1.10 的服务器控制权限(web网站的权限 或系统的权限),通过 frp 程序进行流量穿透:

第一步:准备一个服务器作为FRP的服务端

1
2
3
4
[common]
bind_addr = 0.0.0.0
bind_port = 7080
token = shadow

第二步:将沦陷的 192.168.1.10 作为FRP的客户端,搭建socks隧道:

1
2
3
4
5
6
7
8
9
10
[common]
server_addr = 192.168.1.6
server_port = 7080
token = shadow
[sock5-proxy]
type = tcp
remote_port = 9090
plugin = socks5
use_encryption = true
use_compression = true

第三步:先启动服务端,再启动客户端:

image-20230910102919979

此时已经在 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工具,点击菜单栏中的 <配置文件 > 选择 <代理服务器>

image-20230910103117574

接着点击 <添加>

image-20230910103144686

填写 frp 服务器的地址 以及对应的端口,这里也可以点击检查,没问题的话可以点击确定。 <用户名 密码> 可选项,需要看你隧道有没有设置密码,我们这里没有设置。

image-20230910103255136

最后会问你是否将此代理作为默认代理(所有程序都走该代理),点击是即可,后续可更改。

image-20230910103324882

效果:

原本访问不到 192.168.1.10 的内网,但是现在可以访问了。

image-20230910103737905

Proxychains

工具介绍

ProxyChains 是 Linux 和其他 Unix 下的代理工具。 它可以使任何程序通过代理上网, 允许 TCP 和 DNS 通过代理隧道, 支持HTTP、 SOCKS4 和 SOCKS5 类型的代理服务器, 并且可配置多个代理。 ProxyChains 通过一个用户定义的代理列表强制连接指定的应用程序, 直接断开接收方和发送方的连接。

ProxyChains 是一个强制应用的 TCP 连接通过代理的工具,支持 Tor、HTTP、与 Socks 代理。与 sshuttle 不同的是,ProxyChains 只会将当前应用的 TCP 连接转发至代理,而非全局代理。

工具安装

编译安装(新手不推荐):

1
2
3
4
git clone https://github.com/rofl0r/proxychains-ng
cd proxychains-ng
./configure
sudo make && make install

apt 命令安装(推荐):

1
apt-get install proxychains

工具的使用

ProxyChains 的配置文件位于 /etc/proxychains.conf ,打开后你需要在末尾添加你使用的代理。例如:

1
2
3
4
5
6
7
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
#socks4 127.0.0.1 9050
# example
socks5 192.168.1.6 9090

接着 在使用任何需要走代理的命令前面加上 proxychains 即可,例如:

image-20230910105419764

image-20230910105538025

image-20230910105613479

这里可能会输出一些 proxychains 的信息,如果不要输出 proxychains 的信息,则使用 -q 参数。

image-20230910105720043

浏览器插件

Firefox

这里我们使用 Firefox 浏览器的 FoxyProxy 插件进行配置:

image-20230910105831568

接着使用该代理,此时 Firefox 的流量,都会经过该代理。

image-20230910105921176

Chrome

这里我们使用 Chrome 浏览器的 SwitchyOmega 插件进行配置:

image-20230910110054030

接着使用该代理,此时 Chrome 的流量,都会经过该代理。image-20230910110120359

kali 的 Firefox

这里我们使用 kali 自带的 Firefox 进行代理配置演示:

image-20230910110329576

image-20230910110422087

image-20230910110503192

此时 Firefox 的流量,都会经过该代理。

image-20230910110519690