文章来源|MS08067 Web漏洞挖掘班 第3期
本文作者:Cream(web漏洞挖掘班讲师)
本文章仅当做教学和学习交流之用,请勿使用文中工具做非法测试!文中有不当之处,烦请指出,谢谢!
安全演练和某些特殊场景下均需要代理池来辅助测试,代理池可以理解多个代理IP的集合。代理池的目的是防止被封锁,其基本的工作机制是从各大代理网站抓取免费IP或者以购买的方式获取,将这些IP集合存放在数据库或者文本中,后续的步骤就是测试有效性和后续利用。
文章中主要测试的工具是proxy_pool,其主要功能为定时采集网上发布的免费代理验证入库,定时验证入库的代理保证代理的可用性,提供API和CLI两种使用方式。其中CLI模式主要用于扩展代理源以增加代理池IP的质量和数量,API模式主要用于调用代理池的IP源,其返回值是JSON格式,后续使用需要处理。
工具链接:
https://proxy-pool.readthedocs.io/zh/latest/
测试使用:
#下载工具
git clone git@github.com:jhao104/proxy_pool.git #或者在releases 中下载均可。
cd proxy_pool
#安装依赖:
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
#测试
python proxyPool.py -h
Bash
按需求修改配置文件setting.py
HOST = "0.0.0.0"
##这里是当前监听的主机IP,可直接使用0.0.0.0。
PORT = 5010
###监听的端口,主机内不冲突就行。
DB_CONN = 'redis://:@127.0.0.1:6379/0'
##代理池使用的数据库所在的位置,可支持Redis和ssdb,修改的方式如下:
######Redis: redis://:[email protected]:port/db
######Ssdb: ssdb://:[email protected]:port
###我本地Redis没有设置密码,不写即可
# proxy table name
TABLE_NAME = 'use_proxy'
# ###### config the proxy fetch function ######
PROXY_FETCHER = [
"freeProxy01"
,"freeProxy02"
,"freeProxy03"
,"freeProxy04"
,"freeProxy05"
,"freeProxy06"
,"freeProxy07"
,"freeProxy08"
,"freeProxy09"
,"freeProxy10"
]
Bash
在github上也写的很清楚,具体也参考README.md
另外也可以使用docker来运行该环境:
docker pull jhao104/proxy_pool#拉取镜像资源
docker run --env DB_CONN=redis://:password@ip:port/0 -p 5010:5010 jhao104/proxy_pool:2.4.0#运行环境,注意修改redis的信息
Bash
收集IP资源:python proxyPool.py schedule
注意在收集IP的时候要开启Redis服务器。等获取一段时间后可查看Redis数据保存情况。
调用代理池中IP:python proxyPool.py server
http://target_IP:5010,页面显示内容如下,其中使用不同的参数得到的处理结果。
另外在获取代理IP时可以过滤掉HTTPS的代理:?type=https,具体的介绍不多说,可以参考reedme.md.
代理池测试:使用如下github提供的Python测试代码(做了一点修改!)
# -*- coding: utf-8 -*-
from pip import main
import
requests
def get_proxy():
return requests.get("http://127.0.0.1:5010/get/").json()
def delete_proxy(proxy):
requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))
# your spider code
def getHtml():
# ....
retry_count = 5
proxy = get_proxy().get("proxy")
while retry_count > 0:
try:
html = requests.get('http://1XXXXXXXX.48/', proxies={"http": "http://{}".format(proxy)})
print("使用"+proxy+"请求成功!!!")
# 使用代理访问
return
htmlexcept Exception:
retry_count -= 1
# 删除代理池中代理
delete_proxy(proxy)
return None
getHtml()
Python
注意:http://1XXXXXXXX.48/是VPS服务器,并开启日记记录功能。python proxy_test.py
可知当前的请求是113.125.152.179:8888,也即意味着当前的请求使用的IP是它。在API接口终端可以看到请求的记录,如下所示。
打开apache 的日志文件查看请求情况。
到这里就可以感受到代理池的基本功能,好多网络爬虫就是使用代理池,在HVV中扫描目录、SQLmap注入等场景下都需要使用代理池。浏览器中如果要使用代理池呢?需要一个中间工具将代理池的IP再次代理到浏览器中,这里大家使用或者测试的工具有AutoProxy和JCRandomProxy。
Auto Proxy 是一个自动切换代理的一个浏览器插件, 专为测试人员使用,资源地址:https://github.com/cleverbao/AutoProxy
JCRandomProxy是配合proxy_pool项目开发的图形化代理工具,目前支持Win、Linux和MAC,最新版本是3.3.6,资源地址:https://github.com/chroblert/JCRandomProxy
本次测试是第一个工具—Auto Proxy
下载该程序解压并添加到浏览器中
设置代理池代理:
配置中心
代理池代理:将http://127.0.0.1:5010/all/设置远程地址中,并测试
配置成功之后,点击面板中的“随机代理”即可刷新使用的代理:
注意:收集过来的代理可能不是很稳定,如果无法使用可以点击面板中的“删除代理”。
其他项目:
https://github.com/iamhmx/MXProxyPool
https://github.com/jhao104/proxy_pool
https://github.com/xiaobeibei26/dynamic_ip_pool
https://github.com/henson/proxypool
扩展学习小建议:
1.测试文中提到的第二个工具;
2.思考如何将代理池如何应用到目录扫描工具或者某些漏扫工具中(直接动手操作吧)?
Cream老师主讲的 Web漏洞挖掘第3期
1.27号 开班报名中~
第三期,主要突出了学员最关心的“实战打靶”练习,第三期我们新增加了快速打点方法+脚本思路、打靶机模拟实战等内容,并配备了专门的“实战靶场”以供同学们练习!
最新课程目录3.0版
*大纲仅作为参考,会根据当期进度有所变化(加客服获取高清课程导图)
课程费用
每期班定价2499,新年价:1999(前30名送399元Web安全知识星球名额)
每个报名学员都可享受一次后续任意一期课免费重听权益,一次没学懂就再来一遍,后续培训可任选一期来听。请有意参加培训的学员抓紧报名!
凡是MS08067旗下任意星球学员或其他培训课程学员,可享内部VIP价1799;
支持支付宝、信用卡、花呗分期,对公转账,可开发票!
第二期班部分学员作业
上课时间
上课方式
你距离大佬,只差一个决定
报名咨询请联系小客服
扫描下方二维码加入星球学习
加入后邀请你进入内部微信群,内部微信群永久有效!