利用icmp隧道转发绕过限制

本文详细介绍如何在特定环境中利用ICMP隧道绕过简单的规则封锁,实现数据传输的方法。包括在两端机器上编译安装PingTunnel,以及通过ICMP隧道转发常规TCP端口的具体步骤。

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

步骤

1. icmp隧道实战应用场景。

2. 在建立icmp隧道的两端机器上分别编译安装PingTunnel。

3. 通过icmp隧道来转发常规tcp端口。

基础环境准备

ubuntu16-LAMP

入侵者为公网的一台vps(ubuntu 16.04.3 LTS),相当于隧道客户端,公网 ip: 192.168.3.110。

heightlamp

目标边界的一台 linux web 机器(centOS 7), 相当于隧道服务端,公网 ip: 192.168.3.76,内网 ip: 192.168.4.17 192.168.5.17。

WebServer-IIS7

目标内网下的一台 win 服务器,内网 ip: 192.168.5.2。

Tomcat8

目标内网下的一台数据库服务器,内网 ip: 192.168.4.32 192.168.5.32。

win10-client

目标内网下的一台 windows 客户机,内网 ip: 192.168.5.5。

Win7-Tools

入侵者本地内网的一台 windows 客户机,本地内网 ip: 192.168.122.138。

环境拓扑:

关于 icmp 隧道,经常会用到的一些具体渗透场景:

反复尝试了其它的各类上层隧道全部无效,七层的http隧道、四层的dns隧道、ssh隧道、socks隧道、常规正反向端口转发都不行。

唯独允许icmp数据的正常进出,可以尝试把一些tcp/udp数据封装在icmp隧道里面进行传递,到了隧道另一端再进行解封装,这样一来就可以很好的绕过某些简单的规则封锁。

1. 在需要建立 icmp 隧道的两端机器上同时编译安装好 PingTunnel

2. 在目标边界的heightlamp机器上把icmp隧道的一端起来,把入向的icmp数据转成tcp再进行转发

# ptunnel -x lion &

1606840767_5fc671bf5c84d5b81a005.png!small

    2.1回到ubuntu16-LAMP机器上执行,监听在 0.0.0.0的1080端口,当外部来访问本地的 1080 端口时,把流量通过icmp隧道转到内网指定机器的指定端口上。如下

    -x 指定 icmp 隧道连接验证密码

    -lp 指定要监听的本地 tcp 端口

    -da 指定要转发到的机器的 ip 地址

    -dp 指定要转发到的机器的 tcp 端口

    -p icmp 隧道另一端机器的 ip 地址

    # ptunnel -p 192.168.3.76 -lp 1080 -da 127.0.0.1 -dp 22 -x klionsec &

    putty 192.168.3.110 1080

    1606840824_5fc671f8e26cbe62ded39.png!small

    # ptunnel -p 192.168.3.76 -lp 1080 -da 192.168.5.2 -dp 3389 -x klionsec &

    mstsc 192.168.3.110 1080

   

    2.2如目标内网有linux机器,就无需一个个端口的转了。可以直接通过icmp隧道把指定的本地端口转到目标内网指定的linux机器ssh隧道的socks端口上。如下:

    先去内网的Tomcat8把ssh tunnel的socks端口起起来:

    # ssh -qTfnN -D 0.0.0.0:1081 root@127.0.0.1 -p 22

    # netstat -tulnp | grep grep ":1081"

    回到ubuntu16-LAMP机器上开始通过 icmp 隧道执行转发:

    # ptunnel -p 192.168.3.76 -lp 1080 -da 192.168.4.32 -dp 1081 -x klionsec &

    # netstat -tulnp | grep ":1080"

    最后回到本地Win7-Tools拿 proxifier连到ubuntu16-LAMP的1080端口,这就相当于连到目标内网Tomcat8机器的1081 socks端口上。我们也完全可以通过这种方式直接把整个msf都代到目标内网,此时的msf相当于被包裹在两层隧道内,从外到内分别是icmp 隧道+ssh 隧道(加密)

    proxifier SocksServer 192.168.3.110 1080

    mstsc 192.168.5.5:3389

小结

还可以通过icmp隧道进行脱库,反弹shell等等。原理都是相似的。

比如我们事先已经通过webshell提权拿到了目标边界的 windows 机器,一看3389是正常开着的就想连上去看看,但目标的rdp做了ip访问限制。

但我们发现从外部ping是能ping得通的,此时就可以利用icmp隧道来突破这种简单的访问限制。

还可以通过icmp隧道把指定的端口转到它本地127.0.0.1的3389上,目标本身不可能限制自己访问自己的3389端口。

### 无公网IP的内网穿透解决方案 在没有公网IP的情况下,实现内网穿透可以通过多种技术手段完成。以下是几种常见的方案及其适用场景: #### 1. 使用第三方内网穿透服务 第三方内网穿透服务如 ngrok[^4] 提供了简单易用的解决方案,用户无需拥有公网IP即可实现内网服务的外网访问。ngrok 支持 HTTPS 和自定义域名,并且内置了访问控制功能以增强安全性。然而,需要注意的是,ngrok 更适合开发和测试环境,生产环境中应谨慎使用,因为可能存在安全性和稳定性问题。 #### 2. 借助拥有公网IP的中间服务器 如果没有直接的公网IP,可以借用一台拥有公网IP的中间服务器作为中转站。FRP(Fast Reverse Proxy)[^2] 是一种高效的内网穿透工具,它通过将内网服务的流量转发到中间服务器上,从而实现外网访问。FRP 的配置相对简单,支持多种协议和端口转发,适用于大多数场景。 #### 3. 利用 DNS 隧道技术 DNS 隧道是一种通过 DNS 协议传输数据的技术[^1]。即使网络环境对其他协议进行了严格限制,通常也会允许 DNS 请求通过。通过构建 DNS 隧道,可以绕过防火墙的限制,使内网主机与外部通信。不过,DNS 隧道的带宽和延迟性能较差,仅适用于特定场景。 #### 4. 反向代理结合 Nginx 如果需要同时管理多个内网服务,可以考虑使用 Nginx 作为反向代理[^3]。Nginx 能够将外网请求转发到不同的内网服务端口,从而实现更灵活的流量管理。在这种架构下,FRP 或 Ngrok 可以作为后端服务运行,而 Nginx 则负责前端流量分发。 #### 5. ICMP 隧道 ICMP 隧道利用 ICMP 协议进行数据传输,适合在网络环境对 ICMP 协议开放但限制其他协议的情况下使用[^1]。尽管 ICMP 隧道的实现较为复杂,但在某些特殊场景下可能是唯一可行的选择。 以下是一个基于 FRP 的简单配置示例: ```ini # frpc.ini (客户端配置文件) [common] server_addr = x.x.x.x # 中间服务器的公网IP server_port = 7000 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000 ``` ```ini # frps.ini (中间服务器配置文件) [common] bind_port = 7000 ``` 运行上述配置后,可以通过中间服务器的 `x.x.x.x:6000` 访问内网的 SSH 服务。 --- ### 注意事项 - **安全性**:无论选择哪种方案,都应确保隧道或代理的安全性,避免敏感信息泄露。 - **性能**:DNS 和 ICMP 隧道的性能较差,仅适用于低带宽需求的场景。 - **合法性**:在实施内网穿透前,请确保操作符合相关法律法规及公司政策。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值