一、前言
网络上关于内网穿透的文章很多,但大部分都是侧重于工具的使用,原理提及较少。本文将从内网穿透的原理开始探讨,根据不同的内网出网入网情况,灵活设计对应的内网穿透方案。
二、内网穿透原理
内网穿透是:利用各种隧道技术,以网络防火墙允许的协议,绕过网络防火墙的封锁,实现访问被封锁的目标网络。
什么是隧道技术呢?我们看一下百科词条的解释
隧道技术是一种通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将这些其他协议的数据帧或包重新封装在新的包头中发送。新的包头提供了路由信息,从而使封装的负载数据能够通过互联网络传递。被封装的数据包在隧道的两个端点之间通过公共互联网络进行路由。被封装的数据包在公共互联网络上传递时所经过的逻辑路径称为隧道。一旦到达网络终点,数据将被解包并转发到最终目的地。注意隧道技术是指包括数据封装、传输和解包在内的全过程。
我们进行内网渗透常用的隧道技术有dns隧道、http隧道、ssh隧道、icmp隧道等容易被网络防火墙放行的协议。
这些隧道技术可以按所处的协议层分层。
- 网络层隧道
ICMP隧道等
- 传输层隧道
TCP隧道、UDP隧道
- 应用层隧道
HTTP、DNS、SSH等隧道
内网主机所有可能的出网方式
- 允许ICMP协议出网
网络防火墙允许ICMP协议出网,即能ping通外网主机,一般都能出网
- 允许特定的TCP或UDP协议端口出网
网络防火墙允许特定的TCP或者UDP端口出网,比如连接外网的22、53、80、443、3389等常见应用的默认监听端口。在一个不能出网的网络环境里面,将所有的TCP和UPD端口都探测一遍,通常都能发现有一两个常见的端口能出网。这通常是由于网络管理员的错误配置和偷懒行为导致。比如配置的防火墙规则前后矛盾,解析的时候遇到匹配规则就退出执行;比如网络管理员配置允许web服务器访问另一子网的mysql数据库的3306端口。网络管理员配置时偷懒,可能会直接放行web服务器到任意ip地址的3306端口
-
允许特定的应用层协议出网(比如HTTP、SSH、DNS等应用层协议)
这种网络防火墙能识别应用层的协议,放行允许出网的协议,比如HTTP、SSH、DNS、RDP等应用层协议;通常办公网是允许HTTP协议出网的,可能会域名白名单限制
内网主机所有可能的入网方式 -
允许ICMP协议入网
能ping通目标主机
- 允许特定的TCP或UDP协议端口入网
NAT端口映射公网IP端口到内网主机的服务端口,比如将web服务、mysql服务NAT映射到公网
- 允许特定的应用层协议入网
这种网络防火墙能识别应用层的协议,放行允许入网的协议。比如HTTP反向代理,将公网收到的HTTP流量反向代理进内网主机。当前主流的入网方式,通常会加层WAF审查入网流量
三、内网穿透常用工具
3.1、网络层隧道工具
-
能通过ICMP协议反弹cmd,功能单一,反弹回来的cmd极不稳定,不推荐使用
-
创建虚拟网卡通过ICMP协议传输网卡流量,基于ICMP隧道的vpn,需要root权限,动静极大,不推荐使用
-
tcp、udp、socks5 over ICMP,速度快,连接稳定,跨平台,client模式不需要管理员权限即可正常使用,推荐使用
3.2、传输层隧道工具
- netcat
网络工具中的瑞士军刀,不多介绍,