基于Ngrok的内网穿透

基于Ngrok的内网穿透

背景:

在日常渗透测试或个人服务搭建过程中,常常需要一个公网IP。经常遇到以下场景:

  1. 渗透测试中的反弹shell,需要一个公网IP接收shell;
  2. 是已经拿到目标服务器一定权限需要进一步动作时,由于目标服务器在内网,从公网上无法直接连接其22/23/3306/1521/1433/3389等端口,这时就需要目标服务器进行端口转发;
  3. 在家里搭建私有云盘存放资料,需要外出和在家里都能访问时;
  4. 在家里搭建个人博客,需要随时随地都能进行编辑;
  5. 在家里搭建VPN,需要进行端口转发时。

总之,我们常常会遇到需要从公网访问内网的情况,而现如今我国对私有网络的管制非常严格,已经很难对动态IP进行静态绑定了,并且也非常耗时。在此需求下,内网穿透工具也就应运而生了。

Ngrok简述

Ngrok 是一个反向代理,通过在公共端点和本地运行的 Web 服务器之间建立一个安全的通道,实现内网主机的服务可以暴露给外网。Ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放,所以Ngrok可以很方便地协助服务端程序测试。直白一点说,Ngrok就是内网穿透工具。

选择

目前市面上有着非常多的内网穿透工具或方法。如:

  1. 国内版Ngrok;
  2. 花生壳;
  3. Teamviewer搭建VPN实现内网访问(严格意义上来说不算是内网穿透);
  4. 家用路由器自带端口转发功能。

但是通过上述背景介绍后,我们整理出对内网穿透的需求应如下:

  1. 简易,最好能在最短时间内搭建完成;
  2. 小巧,尽量不占用系统资源,以及在渗透过程中能快速上传;
  3. 需要相对稳定的网络环境’
  4. 在资金缺乏的情况下,最好可以免费或资费低;

基于上述需求以及前辈们的经验来看,Ngrok是一款非常不错的内网穿透工具。

方法论

基于使用需求,Ngrok的搭建方法也非常简单,主要分为6个步骤进行:

  1. 进入Ngrok官网,注册或使用GitHub/Gmail登陆;

传送门:https://ngrok.com/


  1. 下载Ngrok。可以选择windows/Linux/MAC等平台脚本,这里以Linux平台为例。下载解压后会得到一个名为”Ngrok”的脚本。


  1. 回到Ngrok的用户页面,在”Auth”中复制自己的授权码,并在命令行中运行命令。授权码和账户是绑定的,在授权命令运行后,ngrok会将授权码保存在~/.ngrok2/ngrok.yml中,所以只需要运行一次,以后都可以使用。

./ngrok authtoken 6MR1eqERvtihneapsBW2M_7HHPrcqEFBEozgdk8ttd9


  1. 根据自己的需求进行端口转发。如我现在要从公网访问我本设备中搭建的web服务。所以就需要访问本设备的80端口,并使用http协议。因此需要运行下列命令

./ngrok http 80

  1. 做完以上操作后,该服务也运行成功了,公网也就可以访问该内网了。如下图所示,其中http://9fc6ac6d.grok.io就是我在公网上的域名了。现在只需访问该域名就等于是访问我该设备的80端口了。


  1. 现在内网穿透已经完成了,最后可以在Ngrok网站的用户界面查看自己所有的端口转发情况;

缺点:

任何事物都很难做到完美,Ngrok虽然可以傻瓜化进行内网穿透,但也有一定的局限性:

  1. 如自定义域名等更高级的需求,需要付费使用。单基本的端口转发功能已能满足;


  1. 在免费版中,不能同时进行多个端口转发;
  2. 同时连接用户数较少;
  3. 数据流量经Ngrok服务器,对敏感数据仍需谨慎使用。

总结:

在日常的工作和生活中,Ngrok已基本能实现日常需求,其稳定性、实用性、实惠性都不错,个人还是比较推荐该款工具。