內(nèi)網(wǎng)穿透好工具——ProxyChains
1.1 ProxyChains簡(jiǎn)介
ProxyChains是一款Linux系統(tǒng)下的代理工具,強(qiáng)制由任一程序發(fā)起的TCP連接請(qǐng)求必須通過(guò)諸如 SOCKS4, SOCKS5 或HTTP(S) 代理。支持的認(rèn)證方式包括:SOCKS4/5的用戶/密碼認(rèn)證,HTTP的基本認(rèn)證。允許TCP和DNS通過(guò)代理隧道,并且可配置多個(gè)代理。由于很多優(yōu)秀的程序位于GitHub社區(qū),使用國(guó)內(nèi)服務(wù)器部署GitHub上面的程序時(shí),經(jīng)常會(huì)在拉取安裝包時(shí)下載超時(shí)失敗,或是訪問國(guó)外網(wǎng)站非常慢,例如用git、wget等等,這個(gè)時(shí)候就可以通過(guò)proxychain工具來(lái)使用socks或http代理進(jìn)行網(wǎng)絡(luò)加速訪問。ProxyChains早期版本在https://proxychains.sourceforge.net/可以下載,后續(xù)基于該版本開發(fā)了一些新的代碼,例如https://github.com/haad/proxychains及https://github.com/rofl0r/proxychains-ng。
1、ProxyChains的工作原理
ProxyChains的工作原理是在用戶執(zhí)行的網(wǎng)絡(luò)請(qǐng)求前插入一個(gè)代理層。當(dāng)用戶在終端執(zhí)行一個(gè)程序時(shí),該程序的網(wǎng)絡(luò)請(qǐng)求會(huì)首先被ProxyChains捕獲。然后,ProxyChains會(huì)根據(jù)配置文件中指定的代理服務(wù)器信息,將這些請(qǐng)求轉(zhuǎn)發(fā)給代理服務(wù)器。代理服務(wù)器會(huì)對(duì)請(qǐng)求進(jìn)行處理,并將處理后的結(jié)果返回給ProxyChains,最終由ProxyChains將結(jié)果傳遞給原始程序。這樣,用戶就可以通過(guò)ProxyChains來(lái)控制終端應(yīng)用程序的網(wǎng)絡(luò)訪問行為。
其工作原理可以分為以下幾個(gè)關(guān)鍵部分:
(1) 動(dòng)態(tài)鏈接庫(kù)劫持 (LD_PRELOAD)
ProxyChains 使用動(dòng)態(tài)鏈接庫(kù)劫持技術(shù)(LD_PRELOAD)來(lái)攔截和重定向應(yīng)用程序的網(wǎng)絡(luò)請(qǐng)求。具體來(lái)說(shuō),它通過(guò)在應(yīng)用程序啟動(dòng)時(shí)加載一個(gè)特殊的動(dòng)態(tài)鏈接庫(kù)(通常是 libproxychains.so),這個(gè)庫(kù)會(huì)攔截標(biāo)準(zhǔn)的網(wǎng)絡(luò)函數(shù)調(diào)用(如 connect, send, recv 等),并將其重定向到代理服務(wù)器。
(2) 配置文件
ProxyChains 的配置文件(通常是 /etc/proxychains.conf)定義了代理服務(wù)器的列表和其他相關(guān)設(shè)置。配置文件中可以指定一個(gè)或多個(gè)代理服務(wù)器,以及它們的類型(如 SOCKS4, SOCKS5, HTTP 等)和認(rèn)證信息。
例如,一個(gè)典型的配置文件可能如下所示:
# /etc/proxychains.conf
[ProxyList]
socks5 127.0.0.1 1080
http 192.168.1.1 8080
(3)攔截和重定向
當(dāng)應(yīng)用程序發(fā)起網(wǎng)絡(luò)請(qǐng)求時(shí),ProxyChains 的動(dòng)態(tài)鏈接庫(kù)會(huì)攔截這些請(qǐng)求,并根據(jù)配置文件中的設(shè)置將請(qǐng)求發(fā)送到指定的代理服務(wù)器。具體步驟如下:
●攔截請(qǐng)求:當(dāng)應(yīng)用程序調(diào)用 connect 函數(shù)嘗試建立網(wǎng)絡(luò)連接時(shí),ProxyChains 的動(dòng)態(tài)鏈接庫(kù)會(huì)攔截這個(gè)調(diào)用。
●查找代理:動(dòng)態(tài)鏈接庫(kù)會(huì)讀取配置文件中的代理列表,確定應(yīng)該使用哪個(gè)代理服務(wù)器。
●建立代理連接:動(dòng)態(tài)鏈接庫(kù)會(huì)通過(guò)選定的代理服務(wù)器建立連接。如果是多個(gè)代理服務(wù)器,它會(huì)按照配置文件中的優(yōu)先級(jí)順序依次嘗試。
●轉(zhuǎn)發(fā)請(qǐng)求:一旦與代理服務(wù)器建立連接,動(dòng)態(tài)鏈接庫(kù)會(huì)將應(yīng)用程序的網(wǎng)絡(luò)請(qǐng)求通過(guò)代理服務(wù)器轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器。
●接收響應(yīng):代理服務(wù)器將目標(biāo)服務(wù)器的響應(yīng)返回給動(dòng)態(tài)鏈接庫(kù),動(dòng)態(tài)鏈接庫(kù)再將響應(yīng)傳遞回應(yīng)用程序。
示例
假設(shè)有一個(gè)配置文件 /etc/proxychains.conf,內(nèi)容如下:
[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
當(dāng)您使用 proxychains 前綴運(yùn)行命令時(shí),例如:
proxychains wgethttp://example.com
ProxyChains 的工作流程如下:
●攔截 connect 調(diào)用:動(dòng)態(tài)鏈接庫(kù)攔截 wget 發(fā)起的 connect 調(diào)用。
●查找代理:讀取配置文件,確定使用第一個(gè)代理服務(wù)器 127.0.0.1:1080。
●建立代理連接:通過(guò) 127.0.0.1:1080 建立連接。
●轉(zhuǎn)發(fā)請(qǐng)求:將 wget 的請(qǐng)求通過(guò) 127.0.0.1:1080 轉(zhuǎn)發(fā)到 example.com。
●接收響應(yīng):從 example.com 接收到的響應(yīng)通過(guò) 127.0.0.1:1080 返回給動(dòng)態(tài)鏈接庫(kù),再傳遞給 wget。
2.ProxyChains的適用場(chǎng)景
需要通過(guò)代理上網(wǎng),或者需要突破諸如設(shè)置了端口限制的防火墻;或者要使用telnet,ssh,wget,vnc,apt,ftp,nmap等應(yīng)用;事實(shí)上,甚至可以通過(guò)ProxyChains設(shè)置反向代理來(lái)讓你能夠從外部訪問你的內(nèi)部局域網(wǎng)。突破防火墻限制訪問互聯(lián)網(wǎng)。
3.特點(diǎn)
(1)多協(xié)議及認(rèn)證方式支持
支持多種代理協(xié)議,包括SOCKS4、SOCKS5和HTTP(S)。支持的認(rèn)證方式包括:SOCKS4/5的用戶/密碼認(rèn)證,HTTP的基本認(rèn)證。
(2)透明代理
可以攔截并修改終端應(yīng)用程序的網(wǎng)絡(luò)請(qǐng)求,使得這些請(qǐng)求通過(guò)代理服務(wù)器進(jìn)行轉(zhuǎn)發(fā),而無(wú)需修改應(yīng)用程序本身的設(shè)置。
(3)防止DNS泄漏
通過(guò)代理服務(wù)器處理DNS請(qǐng)求,確保DNS查詢不會(huì)泄露用戶的實(shí)際IP地址,從而增強(qiáng)隱私保護(hù)。
(4)多代理支持
可以配置多個(gè)代理服務(wù)器,并指定優(yōu)先級(jí)順序,當(dāng)某個(gè)代理失效時(shí),自動(dòng)切換到下一個(gè)可用的代理。
(5)自定義忽略列表:
允許用戶指定某些域名或IP地址不通過(guò)代理服務(wù)器訪問,這對(duì)于訪問本地資源或內(nèi)部網(wǎng)絡(luò)服務(wù)非常有用。
1.2ProxyChains安裝及使用
1.Linux及手工安裝
(1)Debian/Ubuntu系統(tǒng)安裝
apt update apt install proxychains -y
apt install proxychains4 -y
(2)Centos系統(tǒng)安裝
yum install -y proxychains-ng
(3)手動(dòng)安裝
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)提前準(zhǔn)備好一個(gè)可用的socks或http代理。
(2)安裝后默認(rèn)配置文件在 /etc/proxychains.conf 或 /etc/proxychains4.conf ,通過(guò)vi或nano編輯該文件,拉到最下面填入自己的代理信息,如果沒設(shè)置用戶密碼認(rèn)證則省略,添加后保存退出。
socks5 連接IP地址 連接端口 用戶名 密碼
3.測(cè)試及使用proxychains
proxychains4 curl google.com
proxychains4 bash
4.配置別名
(1)編輯profile文件,增加別名配置:
vi /etc/profile
alias pc=proxychains4
(2)查看profile
source /etc/profile
(3)測(cè)試使用
pc curl google.com
1.3 免費(fèi)代理IP驗(yàn)證
1.獲取socks5代理IP地址
(1)通過(guò)一些免費(fèi)提供socks5代理的網(wǎng)頁(yè)獲取
https://www.lumiproxy.com/zh-hans/free-proxy/
(2)通過(guò)資產(chǎn)測(cè)繪工具獲取
https://quake.360.net/中搜索service: "socks5"可以獲取提供socks5服務(wù)的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"
)
# 測(cè)試URL(可選擇一個(gè)通常能正常響應(yīng)的URL)
test_url="http://example.com"
# 掃描每個(gè)代理
for proxy in "${proxies[@]}"; do
echo "正在測(cè)試代理: $proxy"
if curl -s --proxy "$proxy" --connect-timeout 5 "$test_url" > /dev/null;
then
echo "代理可用: $proxy"
else
echo "代理不可用: $proxy"
fi
done
3.執(zhí)行測(cè)試獲取可用的socks5代理IP及端口
chmod+x check_proxies.sh
./check_proxies.sh
執(zhí)行效果如圖2所示,可以看到代理可用的地址為172.104.209.44
圖2 對(duì)socks5代理進(jìn)行校驗(yàn)
2.查看及編輯proxychains4
cat /etc/proxychains4.conf
sudo vi /etc/proxychains4.conf
socks5 172.104.209.44 1080
如圖3所示,加入socks5的代理地址及端口,如果socks5有用戶名及密碼驗(yàn)證,則需要添加用戶名及密碼信息。
圖3 編輯proxychains配置文件
3.檢驗(yàn)proxychains
對(duì)proxychains進(jìn)行訪問測(cè)試,例如執(zhí)行“proxychains curlhttp://ifconfig.me”,如圖4所示,顯示代理可以使用。
圖4 檢驗(yàn)proxychains
4.實(shí)際使用
(1)更新git
proxychains4 git
clonehttps://github.com/your_username/your_repository.git
(2)內(nèi)網(wǎng)穿透使用
proxychains4 msfconsole //啟動(dòng)msfconsole
利用msf下的smb_login模塊進(jìn)行掃描,配置信息如下,執(zhí)行后結(jié)果如圖5所示。
use auxiliary/scanner/smb/smb_login
show options
set smbuser administrator
set smbpass 11111111
set rhosts 192.168.22.16
圖5 內(nèi)網(wǎng)穿透進(jìn)行smb口令掃描
(3)其他一些內(nèi)網(wǎng)滲透使用參考命令
查看共享文件:
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