关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客
0x01:NETSH 工具介绍
NETSH 是 Windows 系统自带自带的命令行程序,攻击者无需上传第三方工具即可利用 netsh 程序进行端口转发操作,将内网中其他服务器的端口转发至本地访问(该工具只能进行本地端口转发,适合正向连接)。值得注意的是,运行该工具需要管理员权限。
0x02:NETSH 本地端口转发(正向转发)
NETSH 本地端口转发条件:你拿到了本地的最高管理员权限 Shell。
0x0201:场景描述
现有如下网络,电脑 A 是攻击机(公网环境),电脑 B(Windows 系统,公网环境),电脑 C(Linux 系统,内网环境),电脑 A 与 B 是可以互通的,B 与 C 也是可以互通的,但是电脑 A 无法直接访问到电脑 C,不过由于 NAT 技术,所以电脑 C 是可以访问电脑 A 的(这个其实无所谓,即使 C 是纯内网机器,NETSH 技术也能让其出网):
面对上面那种情况,我们就可以使用 NETSH 本地端口转发技术,利用 B 电脑,将 C 电脑指定端口转发到 B 机器本地,这样攻击者就可以通过攻击 B 机器对应端口完成对 C 电脑指定端口的攻击了。
复现环境
攻击机 A - Kali Linux:IP 192.168.0.102 - VMWare 设置为桥接模式
边界机器 B - Windows 7 专业版:IP 192.168.0.105/172.16.0.100 - 一个桥接一个 NAT
内网机器 C - CentOS 7:IP 172.16.0.101 - VMWare 设置为 NAT 模式,且开启 SSH 服务
0x0202:实验步骤
1. 拿到内网机器 B 的 Shell
这里笔者是通过 Kali Linux 上的 Cobalt Strike 制作 Windows 恶意程序上传到靶机 B 上,模拟机器 B 被钓鱼上线的操作:
2. 执行 NETSH 本地端口转发
假设我们现在通过信息收集在 B 机器中发现了 C 机器的账号密码,同时我们还发现了 C 机器开放了 22 端口(SSH 服务)。那么下一步,我们就想通过 C 机器的 SSH 服务控制 C 机器,先分析一下:
目前我们攻击机 A 是无法直接访问对方内网中的 C 机器的,但是可以访问 B 机器,B 机器中有一张网卡与 C 机器处于相同网段,而我们又仅仅是想获得 C 机器 22 的端口服务。那么我们完全可以借助 B 机器,将 C 机器的 22 端口映射到 B 机器的 999(任意)端口上,这样我们访问 B 机器的 999 端口就等于是访问到 C 机器的 22 端口啦。
利用 Cobalt Strike 在 B 机器中执行下面这条命令(在过了 UAC 的会话中执行):
- # 将本地指定端口与目标 IP 指定端口做一个绑定,访问本地指定端口就等于访问目标指定端口
- netsh interface portproxy add v4tov4 listenaddress=<本地IP> listenport=<本地监听端口> connectaddress=<目标IP> connectport=<目标端口>
-
- 示例: netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=999 connectaddress=172.16.0.101 connectport=22
3. 查看 NETSH 本地端口转发状态
在 B 机器中输入下面这条命令可以查看 NETSH 远程端口转发的状态:
netsh interface portproxy show v4tov4
4. 正向连接访问内网 C 机器 SSH 服务
此时在 Kali Linux 中新开一个窗口,输入如下命令,尝试连接 C 机器的 SSH 服务:
ssh [email protected] -p 999
如上,我们成功访问到了 C 机器的 22 端口,并成功登录 C 机器。
5. 删除 NETSH 本地端口转发
删除指定的 NETSH 端口转发条件的命令如下:
- netsh interface portproxy delete v4tov4 listenaddress=<监听IP> listenport=<监听端口>
-
- 示例: netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=999



评论记录:
回复评论: