1.1 ProxyChains简介
ProxyChains是一款Linux系统下的代理工具,强制由任一程序发起的TCP连接请求必须通过诸如 SOCKS4, SOCKS5 或HTTP(S) 代理。支持的认证方式包括:SOCKS4/5的用户/密码认证,HTTP的基本认证。允许TCP和DNS通过代理隧道,并且可配置多个代理。由于很多优秀的程序位于GitHub社区,使用国内服务器部署GitHub上面的程序时,经常会在拉取安装包时下载超时失败,或是访问国外网站非常慢,例如用git、wget等等,这个时候就可以通过proxychain工具来使用socks或http代理进行网络加速访问。ProxyChains早期版本在https://proxychains.sourceforge.net/可以下载,后续基于该版本开发了一些新的代码,例如https://github.com/haad/proxychains及https://github.com/rofl0r/proxychains-ng。
1、ProxyChains的工作原理
ProxyChains的工作原理是在用户执行的网络请求前插入一个代理层。当用户在终端执行一个程序时,该程序的网络请求会首先被ProxyChains捕获。然后,ProxyChains会根据配置文件中指定的代理服务器信息,将这些请求转发给代理服务器。代理服务器会对请求进行处理,并将处理后的结果返回给ProxyChains,最终由ProxyChains将结果传递给原始程序。这样,用户就可以通过ProxyChains来控制终端应用程序的网络访问行为。
其工作原理可以分为以下几个关键部分:
(1) 动态链接库劫持 (LD_PRELOAD)
ProxyChains 使用动态链接库劫持技术(LD_PRELOAD)来拦截和重定向应用程序的网络请求。具体来说,它通过在应用程序启动时加载一个特殊的动态链接库(通常是 libproxychains.so),这个库会拦截标准的网络函数调用(如 connect, send, recv 等),并将其重定向到代理服务器。
(2) 配置文件
ProxyChains 的配置文件(通常是 /etc/proxychains.conf)定义了代理服务器的列表和其他相关设置。配置文件中可以指定一个或多个代理服务器,以及它们的类型(如 SOCKS4, SOCKS5, HTTP 等)和认证信息。
例如,一个典型的配置文件可能如下所示:
# /etc/proxychains.conf
[ProxyList]
socks5 127.0.0.1 1080
http 192.168.1.1 8080
(3)拦截和重定向
当应用程序发起网络请求时,ProxyChains 的动态链接库会拦截这些请求,并根据配置文件中的设置将请求发送到指定的代理服务器。具体步骤如下:
●拦截请求:当应用程序调用 connect 函数尝试建立网络连接时,ProxyChains 的动态链接库会拦截这个调用。
●查找代理:动态链接库会读取配置文件中的代理列表,确定应该使用哪个代理服务器。
●建立代理连接:动态链接库会通过选定的代理服务器建立连接。如果是多个代理服务器,它会按照配置文件中的优先级顺序依次尝试。
●转发请求:一旦与代理服务器建立连接,动态链接库会将应用程序的网络请求通过代理服务器转发到目标服务器。
●接收响应:代理服务器将目标服务器的响应返回给动态链接库,动态链接库再将响应传递回应用程序。
示例
假设有一个配置文件 /etc/proxychains.conf,内容如下:
[ProxyList]
socks5 127.0.0.1 1080
http 192.168.1.1 8080
[ProxyDNSServers]
1.1.1.1
8.8.8.8
[IgnoreHosts]
127.0.0.1
localhost
当您使用 proxychains 前缀运行命令时,例如:
proxychains wgethttp://example.com
ProxyChains 的工作流程如下:
●拦截 connect 调用:动态链接库拦截 wget 发起的 connect 调用。
●查找代理:读取配置文件,确定使用第一个代理服务器 127.0.0.1:1080。
●建立代理连接:通过 127.0.0.1:1080 建立连接。
●转发请求:将 wget 的请求通过 127.0.0.1:1080 转发到 example.com。
●接收响应:从 example.com 接收到的响应通过 127.0.0.1:1080 返回给动态链接库,再传递给 wget。
2.ProxyChains的适用场景
需要通过代理上网,或者需要突破诸如设置了端口限制的防火墙;或者要使用telnet,ssh,wget,vnc,apt,ftp,nmap等应用;事实上,甚至可以通过ProxyChains设置反向代理来让你能够从外部访问你的内部局域网。突破防火墙限制访问互联网。
3.特点
(1)多协议及认证方式支持
支持多种代理协议,包括SOCKS4、SOCKS5和HTTP(S)。支持的认证方式包括:SOCKS4/5的用户/密码认证,HTTP的基本认证。
(2)透明代理
可以拦截并修改终端应用程序的网络请求,使得这些请求通过代理服务器进行转发,而无需修改应用程序本身的设置。
(3)防止DNS泄漏
通过代理服务器处理DNS请求,确保DNS查询不会泄露用户的实际IP地址,从而增强隐私保护。
(4)多代理支持
可以配置多个代理服务器,并指定优先级顺序,当某个代理失效时,自动切换到下一个可用的代理。
(5)自定义忽略列表:
允许用户指定某些域名或IP地址不通过代理服务器访问,这对于访问本地资源或内部网络服务非常有用。
1.2ProxyChains安装及使用
1.Linux及手工安装
(1)Debian/Ubuntu系统安装
apt update apt install proxychains -y
apt install proxychains4 -y
(2)Centos系统安装
yum install -y proxychains-ng
(3)手动安装
git clonehttps://github.com/rofl0r/proxychains-ng.git
yum install gcc
cd proxychains-ng
./configure --prefix=/usr --sysconfdir=/etc
make
make install
make install-config
cd .. && rm -rf proxychains-ng
which proxychains
2.ProxyChain配置使用
(1)提前准备好一个可用的socks或http代理。
(2)安装后默认配置文件在 /etc/proxychains.conf 或 /etc/proxychains4.conf ,通过vi或nano编辑该文件,拉到最下面填入自己的代理信息,如果没设置用户密码认证则省略,添加后保存退出。
socks5 连接IP地址 连接端口 用户名 密码
3.测试及使用proxychains
proxychains4 curl google.com
proxychains4 bash
4.配置别名
(1)编辑profile文件,增加别名配置:
vi /etc/profile
alias pc=proxychains4
(2)查看profile
source /etc/profile
(3)测试使用
pc curl google.com
1.3 免费代理IP验证
1.获取socks5代理IP地址
(1)通过一些免费提供socks5代理的网页获取
https://www.lumiproxy.com/zh-hans/free-proxy/
(2)通过资产测绘工具获取
https://quake.360.net/中搜索service: "socks5"可以获取提供socks5服务的IP地址,如图1所示。
图1 获取socks5 IP地址
2.编写check_proxies.sh脚本
#!/bin/bash
# 代理列表
proxies=(
"socks5://184.95.235.194:1080"
"socks5://23.19.244.109:1080"
"socks5://172.104.209.44:1080"
"socks5://45.43.11.72:1080"
"socks5://38.113.171.88:57775"
"socks5://100.1.53.24:5678"
"socks5://38.83.108.88:5678"
"socks5://8.39.228.25:39593"
)
# 测试URL(可选择一个通常能正常响应的URL)
test_url="http://example.com"
# 扫描每个代理
for proxy in "${proxies[@]}"; do
echo "正在测试代理: $proxy"
if curl -s --proxy "$proxy" --connect-timeout 5 "$test_url" > /dev/null;
then
echo "代理可用: $proxy"
else
echo "代理不可用: $proxy"
fi
done
3.执行测试获取可用的socks5代理IP及端口
chmod+x check_proxies.sh
./check_proxies.sh
执行效果如图2所示,可以看到代理可用的地址为172.104.209.44
图2 对socks5代理进行校验
2.查看及编辑proxychains4
cat /etc/proxychains4.conf
sudo vi /etc/proxychains4.conf
socks5 172.104.209.44 1080
如图3所示,加入socks5的代理地址及端口,如果socks5有用户名及密码验证,则需要添加用户名及密码信息。
图3 编辑proxychains配置文件
3.检验proxychains
对proxychains进行访问测试,例如执行“proxychains curlhttp://ifconfig.me”,如图4所示,显示代理可以使用。
图4 检验proxychains
4.实际使用
(1)更新git
proxychains4 git
clonehttps://github.com/your_username/your_repository.git
(2)内网穿透使用
proxychains4 msfconsole //启动msfconsole
利用msf下的smb_login模块进行扫描,配置信息如下,执行后结果如图5所示。
use auxiliary/scanner/smb/smb_login
show options
set smbuser administrator
set smbpass 11111111
set rhosts 192.168.22.16
图5 内网穿透进行smb口令扫描
(3)其他一些内网渗透使用参考命令
查看共享文件:
proxychains smbclient -L //192.168.22.16 -U .\administrator%11111111
proxychains smbclient -L //192.168.22.16/d$ -U .\administrator%11111111
使用wmiexec模块:
auxiliary/scanner/smb/impacket/wmiexec