ProxyChains是一个开源代理工具,能够强制使任何应用的TCP连接使用SOCKS4,SOCKS或者HTTP(S)代理进行连接。首先简单介绍一下ProxyChains的具体操作流程,如下:
一、ProxyChains下载与安装
由于Kali Linux系统测试这个系统中已经自带了ProxyChains,因此就不多说了,简单说下:
ProxyChains下载地址:https://github.com/rofl0r/proxychains-ng
二、ProxyChains 配置
ProxyChains运行的所有配置都在“/etc/proxychains.conf ”文件中;
在 [ProxyList] 下面添加代理IP和端口,可以任意添加代理,一行一个记录。
例如,我添加代理IP和端口,如下图
其它配置项用法如下:
- dynamic_chain:该配置项能够通过ProxyList中的每个代理运行流量,如果其中一个代理关闭或者没有响应,它能够自动选择ProxyList中的下一个代理;
- strict_chain:改配置为ProxyChains的默认配置,不同于dynamic_chain,也能够通过ProxyList中的每个代理运行流量,但是如果ProxyList中的代理出现故障,不会自动切换到下一个。
- random_chain:该配置项会从ProxyList中随机选择代理IP来运行流量,如果ProxyList中有多个代理IP,在使用proxychains的时候会使用不同的代理访问目标主机,从而使主机端探测流量更加困难。
三、ProxyChains 使用
大致了解了proxychains的配置项之后,可以测试一下proxychains使用代理访问的情况,proxychains使用起来也非常简单,命令形式为:
proxychains <运行的命令> <命令参数>
1、使用ProxyChains代理访问网站
root@kali:~# proxychains curl https://www.xxx.com
2、接下来,我们可以亲自实践一下sqlmap+proxychains代理的效果。
第一步:首先,直接运行sqlmap扫描目标地址,然后在某云上的WAF看到拦截日志及源IP:
第二步:接着,利用proxychains代理sqlmap扫描目标地址,然后在某云上的WAF上能过看到拦截日志及源IP已经变成了代理IP:
可以看到攻击IP已经变成了代理IP,所属地区也变成了代理IP的地区,试验成功。
四、ProxyChains自动添加代理
接下来就是说说,如何实现ProxyChains自动添加代理?大致分为以下几个步骤:
- 需要有一个提供免费代理的地址;
- 解析该地址提供的内容获取代理IP和端口;
- 将获取的代理IP和端口加入到proxychains.conf配置文件的ProxyList配置项中;
免费代理的网站百度或者谷哥就能得到很多答案,例如:
- 快代理:https://www.kuaidaili.com/free/
- ProxyList:https://proxy-list.org/english/index.php;PorxyList是国外的一个提供免费代理的网站,貌似需要翻墙访问,这里我使用快代理提供的IP和端口。
唯一需要注意的是:在使用proxychains代理转发过程中,如果目标对象为https,那么需要使用支持SSL/https协议的代理,快代理提供的免费代理均只支持http协议;Proxy List中有支持SSL/HTTPS协议且免费的代理。
ProxyChains自动添加代理具体步骤如下:
1、访问快代理并解析网页内容获取代理IP和端口;
2、将获取的代理IP和端口更新写入ProxyList配置项中;
3、查看代理IP是否写入配置文件成功?配置文件更新成功之后,就可以运行该脚本看看效果了,出现如下图结果,
整个Python脚本代码如下:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import json
import requests
import time
import os
from bs4 import BeautifulSoup
url = "https://www.kuaidaili.com/free/"
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'}
def get_proxy_datas():
r = requests.get(url,headers=headers)
content = r.content
soup = BeautifulSoup(content,'lxml')
ips =soup.find_all('td',attrs={'data-title':'IP'})
ports = soup.find_all('td',attrs={'data-title':'PORT'})
print('开始写入代理IP和端口......')
write_conf(ips,ports)
print("代理ID和端口写入完成,将退出......")
def write_conf(ips,ports):
for i in range(0,len(ips)):
print("--->IP:"+ips[i].string+"PORT:"+ports[i].string+"<---")
time.sleep(1)
with open('/etc/proxychains.conf','a+') as f:
f.write('http %s %s '%(ips[i].string,ports[i].string))
get_proxy_datas()