socks5
文章目录
一、什么是socks5
socks是”socketS”的缩写,因此socks5也叫sockets5。
socks是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。根据OSI七层模型来划分,SOCKS属于会话层协议,位于表示层与传输层之间。
当防火墙后的客户端要访问外部的服务器时,就跟socks代理服务器连接。该协议设计之初是为了让有权限的用户可以穿过过防火墙的限制,使得高权限用户可以访问外部资源。经过10余年的时间,大量的网络应用程序都支持socks5代理。
这个协议最初由David Koblas开发,而后由NEC的Ying-Da Lee将其扩展到版本4,最新协议是版本5,与前一版本相比,socks5做了以下增强:
增加对udp协议的支持;
- 支持多种用户身份验证方式和通信加密方式;
- 修改了socks服务器进行域名解析的方法,使其更加优雅;
二、socks5协议
[推荐-写的全面仔细]SOCKS5代理原理探索
参考URL: https://blog.csdn.net/cszhouwei/article/details/74362427
[推荐]socks5协议理解(TCP/UDP)
参考URL: https://www.jianshu.com/p/6fc3fd5dd5ea
官方参考: https://www.ietf.org/rfc/rfc1928.txt
RFC地址:
rfc1928
rfc1929
SOCKS 服务端缺省侦听在 TCP 1080 端口。
客户端发起连接之后,首先需要和服务端协商认证方法
认证协商完成以后,客户端开始发送具体的请求
服务端收到请求后,处理后返回
至此,客户端和服务端的连接已经建立完成,后续客户端可以通过 SOCKS5 服务端与目的地址进行数据传输。
三、socks5 应用场景
设计SOCKS协议的初衷是在保证网络隔离的情况下,提高部分人员的网络访问权限,但是国内似乎很少有组织机构这样使用。一般情况下,大家都会使用更新的网络安全技术来达到相同的目的。
目前来说,人们利用SOCKS协议的主要是为了:突破网络通信限制,这和该协议的初衷实际上正好相反。
Socks在渗透测试中使用特别广泛,能够很方便让我们与目标内网计算机之间通信,避免了一次又一次使用端口转发的麻烦。
在实际渗透测试过程中,当我们成功的拿下第一台堡垒机后,此时我们又想对目标内网进一步渗透测试时,socks能够帮助我们更加快速的,方便的访问目标内网的各种资源,比传统的端口转发更加实用。
1. 突破内网只容许访问80端口的限制
一些场景下,防火墙仅允许部分端口(如http的80端口)通信,那么可以利用SOCKS5协议和一个打开80端口监听的SOCKS5服务器连接,从而可以连接公网上其他端口的服务器。
2. ftp通过socks5代理访问
四、常见的Socks5服务工具
- Earthworm 工具网址:http://rootkiter.com/EarthWorm
EW 是一套便携式的网络穿透工具,具有 SOCKS v5服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透。该工具能够以“正向”、“反向”、“多级级联”等方式打通一条网络隧道,直达网络深处,用蚯蚓独有的手段突破网络限制,给防火墙松土。工具包中提供了多种可执行文件,以适用不同的操作系统,Linux、windows、MacOS、Arm-Linux 均被包括其内,强烈推荐使用。
目前已经有了最新版Termite,工具网址:http://rootkiter.com/Termite/
2.reGeorg 工具网址:https://github.com/Nonenotnull/reGeorg
reGeorg是reDuh的升级版,主要是把内网服务器的端口通过http/https隧道转发到本机,形成一个回路。用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口。它利用webshell建立一个socks代理进行内网穿透,服务器必须支持aspx、php或jsp这些web程序中的一种。
3.sSocks 工具网址:http://sourceforge.net/projects/ssocks/
sSocks是一个socks代理工具套装,可用来开启socks代理服务,支持socks5验证,支持IPV6和UDP,并提供反向socks代理服务,即将远程计算机作为socks代理服务端,反弹回本地,极大方便内网的渗透测试,其最新版为0.0.13。
4.SocksCap64 工具网址:http://www.sockscap64.com (需翻墙)
SocksCap64是一款在windows下相当好使的全局代理软件。SocksCap64可以使Windows应用程序通过SOCKS代理服务器来访问网络而不需要对这些应用程序做任何修改, 即使某些本身不支持SOCKS代理的应用程序通过SocksCap64之后都可以完美的实现代理访问。
1. EarthWorm
内网穿透大杀器–EarthWorm
参考URL: https://blog.csdn.net/nzjdsds/article/details/82025651
EarthWorm,(简称EW)是一套轻量便携且功能强大的网络穿透工具,基于标准C开发,具有socks5代理、端口转发和端口映射三大功能。
支持多平台间的转接通讯,Linux、Windows、MacOS、Arm-Linux均支持。
2. ProxyChains-ng
github地址:https://github.com/rofl0r/proxychains-ng
[讲解具体如何使用]ProxyChains 实现自动添加代理逃避检测
参考URL: https://www.freebuf.com/articles/network/159199.html
ubuntu系统中使用ProxyChains设置网络代理
参考URL: https://www.jianshu.com/p/3f392367b41f
用proxychains-ng为程序设置代理
参考URL: https://www.jianshu.com/p/f7902bba9499
ProxyChains是一个开源代理工具,能够强制使任何应用的TCP连接使用SOCKS4,SOCKS或者HTTP(S)代理进行连接。
ProxyChains是Linux和其他Unices下的代理工具。 它可以使任何程序通过代理上网, 允许TCP和DNS通过代理隧道, 支持HTTP、 SOCKS4和SOCKS5类型的代理服务器, 并且可配置多个代理。 ProxyChains通过一个用户定义的代理列表强制连接指定的应用程序, 直接断开接收方和发送方的连接。
ProxyChains 是一个强制应用的 TCP 连接通过代理的工具,支持 Tor、HTTP、与 Socks 代理。与 sshuttle 不同的是,ProxyChains 只会将当前应用的 TCP 连接转发至代理,而非全局代理。
proxychains 只会代理 TCP 连接,而 ping 使用的是 ICMP。
proxychain和 proxifier很类似,proxychain相当于linux下的proxifier (Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。)
ProxyChains 原先在sourceforge上已经不维护了,现在github上维护proxychains ng (new generation) ,github地址https://github.com/rofl0r/proxychains-ng
github官方描述部分翻译:
ProxyChains is a UNIX program, that hooks network-related libc functions
in DYNAMICALLY LINKED programs via a preloaded DLL (dlsym(), LD_PRELOAD)
and redirects the connections through SOCKS4a/5 or HTTP proxies.
It supports TCP only (no UDP/ICMP etc).
The way it works is basically a HACK; so it is possible that it doesn’t
work with your program, especially when it’s a script, or starts
numerous processes like background daemons or uses dlopen() to load
“modules” (bug in glibc dynlinker).
It should work with simple compiled (C/C++) dynamically linked programs
though.
If your program doesn’t work with proxychains, consider using an
iptables based solution instead; this is much more robust.
Supported Platforms: Linux, BSD, Mac.
proxychains是一个UNIX程序,它钩住与网络相关的libc函数在通过预加载的dll(dlsym(),ld_preload)动态链接的程序中并通过socks4a/5或http代理重定向连接。它只支持TCP(没有UDP/ICMP等)。
它的工作方式基本上是一个HACK;所以它可能不会使用您的程序,尤其是当它是脚本或启动时许多进程,如后台守护进程或使用dlopen()加载“模块”(glibc dynlinker中的错误)。它应该与简单编译(C/C++)动态链接程序一起使用。
如果您的程序不适用于proxychains,请考虑使用基于iptables的解决方案替代;这更为强大。
支持的平台:Linux、BSD、Mac。
When to use it ?
- When the only way to get “outside” from your LAN is through proxy server.
- To get out from behind restrictive firewall which filters outgoing ports.
- To use two (or more) proxies in chain:
like: your_host <–> proxy1 <–> proxy2 <–> target_host
- To “proxify” some program with no proxy support built-in (like telnet)
- Access intranet from outside via proxy.
- To use DNS behind proxy.
- To access hidden tor onion services.
什么时候用?
1)当从局域网访问“外部”的唯一方法是通过代理服务器时。
2)在防火墙过滤一些出口端口情况下,访问外部网络。
3)要在链中使用两个(或更多)代理:、
比如:你的主机<->代理1<->代理2<->目标主机
4)要“代理”一些没有内置代理支持的程序(如telnet)
5)通过代理从外部访问内部网。
6)使用DNS隐藏代理。
7)访问隐藏的洋葱服务。
Some cool features:
- This program can mix different proxy types in the same chain
like: your_host <–>socks5 <–> http <–> socks4 <–> target_host
- Different chaining options supported
random order from the list ( user defined length of chain ).
exact order (as they APPear in the list )
dynamic order (smart exclude dead proxies from chain)
- You can use it with most TCP client applications, possibly even network
scanners, as long as they use standard libc functionality.
pcap based scanning does not work.
- You can use it with servers, like squid, sendmail, or whatever.
- DNS resolving through proxy.
一些很酷的特性:
-
这个程序可以在同一个链中混合不同的代理类型
例如:您的主机<->socks5<->http<->socks4<->目标主机
-
支持不同的链接选项
列表中的随机顺序(用户定义的链长度)。
精确顺序(如列表中所示)
动态顺序(智能从链中排除死代理)
-
您可以将它用于大多数TCP客户端应用程序,甚至网络扫描器,只要它们使用标准的libc功能。基于PCAP的扫描不工作。
-
您可以将它与服务器一起使用,如squid、sendmail等。
-
通过代理解析DNS。
2.1 proxyChains-ng编译安装
#下载
git clone https://github.com/rofl0r/proxychains-ng.git
#编译安装
cd proxychains-ng
./configure
make && make install
#拷贝配置文件
cp ./src/proxychains.conf /etc/proxychains.conf
编译安装完之后,可以输入命令proxychains4,显示如下,说明编译安装成功
2.2 proxychains-ng使用
proxychains4运行的所有配置都在 /etc/proxychains.conf 中。
在[ProxyList]下面添加代理IP和端口,可以任意添加代理,一行一个记录。
各配置项用法:
dynamic_chain:该配置项能够通过ProxyList中的每个代理运行流量,如果其中一个代理关闭或者没有响应,它能够自动选择ProxyList中的下一个代理;
strict_chain:该配置为ProxyChains的默认配置,不同于dynamic_chain,也能够通过ProxyList中的每个代理运行流量,但是如果ProxyList中的代理出现故障,不会自动切换到下一个。
random_chain:该配置项会从ProxyList中随机选择代理IP来运行流量,如果ProxyList中有多个代理IP,在使用proxychains的时候会使用不同的代理访问目标主机,从而使主机端探测流量更加困难。
大致了解了proxychains的配置项之后,可以测试一下proxychains使用代理访问的情况,proxychains使用起来也非常简单,命令形式为:
proxychains4 <运行的命令> <命令参数>
2.2.1 利用linux ftp命令进行测试proxychains
环境
ftp client的ip是: 11.12.117.100
ftp服务的ip是: 11.12.112.184
socks5服务的ip: 11.12.111.101
[root@xxx proxychains-ng]# ftp 11.12.112.184
Connected to 11.12.112.184 (11.12.112.184).
220-filezilla server 0.9.60 beta
220-written by Tim Kosse ([email protected])
220 Please visit https://filezilla-project.org/
Name (11.12.112.184:root): ftp1
331 Password required for ftp1
Password:
230 Logged on
Remote system type is UNIX.
ftp>
在不加proxychains时候,我们用ftp直接登录,ftp服务器端看到连接ip就是我们的真实ip,如下图:
我们的socks5 环境为 11.12.117.101:1080
我们首先配置 /etc/proxychains.conf,如下配置,socks5服务的ip和端口
配置完成后,如下所示,我们在我们正常的命令前面加上proxychains4 即可
[root@xxx proxychains-ng]# proxychains4 ftp 11.12.112.184
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/local/lib/libproxychains4.so
[proxychains] DLL init: proxychains-ng 4.14-git
[proxychains] Strict chain ... 127.0.0.1:9050 ... timeout
ftp: connect: Connection refused
ftp> quit
[root@xxx proxychains-ng]# vi /etc/proxychains.conf
[root@xxx proxychains-ng]# proxychains4 ftp 11.12.112.184
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/local/lib/libproxychains4.so
[proxychains] DLL init: proxychains-ng 4.14-git
[proxychains] Strict chain ... 11.12.117.101:1080 ... 11.12.112.184:21 ... OK
Connected to 11.12.112.184 (11.12.112.184).
220-FileZilla Server 0.9.60 beta
220-written by Tim Kosse ([email protected])
220 Please visit https://filezilla-project.org/
Name (11.12.112.184:root): ftp1
331 Password required for ftp1
Password:
230 Logged on
Remote system type is UNIX.
ftp>
在服务器端,我们看连接ip已经变成socks5服务的ip
五、常见socks5客户端工具
socks5代理IP如何使用,请看这几款常用软件
参考URL: https://www.jianshu.com/p/d77a899f973a
Simple C code with iptables make this tool proxifier which tunnels whole system traffic through proxy server ,with out configuring inpidual application
带有iptables的简单C代码使该工具成为代理程序,它通过代理服务器传输整个系统流量,不配置单个应用程序。
1. Proxifier
Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。
Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。支持 64位系统,支持Xp,Vista,win7,MAC OS ,支持socks4,socks5,http代理协议,支持TCP,UDP协议,可以指定端口,指定IP,指定域名,指定程序等运行模式,兼容性非常好。有点类似SOCKSCAP。
这个软件是windows下软件。
2. sockscap64
巧用SocksCap64打开Google听语音
参考URL: https://jingyan.baidu.com/article/2c8c281dd62db60008252a25.html
Sockscap64是一款由Taro开发的免费的应用程序外壳。 Sockscap64可以使Windows网络应用程序来访问网络而不需要对这些应用程序做任何修改(即使某些本身不支持SOCKS代理的应用程序通过Sockscap64之后都可以完美的实现代理访问), 例如: Web Browsers IM程序, FTP Clients, e-mail programs or games。 Sockscap64当前只支持Socks4/5代理协议, 目前仅支持TCP链接( 接下来的版本中会支持UDP协议 )。
Windows下使用sockscap64,有图形化界面,简单易用。
SocksCap32 软件是由美国 NEC USA, Inc. 公司出品的代理服务器第三方支持软件。拥有功能强大的 SOCKS 调度,使用它就可以让 169 用户达到使用 163 代理的要求,通过它几乎可以让所有基于 TCP/IP 协议的软件象 ICQ、MUD、FTP、IE、NEWS……都能通过 Socks 代理服务器连接到Ineternet,甚至是代理猎手还可以通过它去搜索 163 的代理服务器,是 169 用户的理想工具。
六、参考
【技术分享】内网漫游之SOCKS代理大结局
参考URL: https://www.anquanke.com/post/id/85494
socks5代理IP如何使用,请看这几款常用软件
参考URL: https://www.jianshu.com/p/d77a899f973a
A software like Proxifier for linux? [closed]
参考URL: https://superuser.com/questions/424045/a-software-like-proxifier-for-linux
相关阅读
代理服务器地址写入shell配置文件.bashrc或者.zshrc直接在.bashrc或者.zshrc添加下面内容1 2 export http_proxy="http://localho
CentOS下配置SS5(SOCKS5)代理服务器,绝对可行
本文内容将详细说明如何向自己的服务器添加代理功能(SOCKS5)。 嫌啰嗦的直接拉到最下,有干货。 环境: 服务器主机 :腾讯云 1核 1GB
要了解SOCKS5协议的全部内容,请移步 RFC 1928 - SOCKS Protocol Version 5 ,内容很短,一共才 8 页,建议大家浏览一遍。 备注:相比 S