首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >代理池工具测试和后续利用

代理池工具测试和后续利用

作者头像
Ms08067安全实验室
发布2022-02-10 09:03:57
发布2022-02-10 09:03:57
2K1
举报

文章来源|MS08067 Web漏洞挖掘班 第3期

本文作者:Cream(web漏洞挖掘班讲师)

本文章仅当做教学和学习交流之用,请勿使用文中工具做非法测试!文中有不当之处,烦请指出,谢谢!

安全演练和某些特殊场景下均需要代理池来辅助测试,代理池可以理解多个代理IP的集合。代理池的目的是防止被封锁,其基本的工作机制是从各大代理网站抓取免费IP或者以购买的方式获取,将这些IP集合存放在数据库或者文本中,后续的步骤就是测试有效性和后续利用。

文章中主要测试的工具是proxy_pool,其主要功能为定时采集网上发布的免费代理验证入库,定时验证入库的代理保证代理的可用性,提供API和CLI两种使用方式。其中CLI模式主要用于扩展代理源以增加代理池IP的质量和数量,API模式主要用于调用代理池的IP源,其返回值是JSON格式,后续使用需要处理。

工具链接:

https://proxy-pool.readthedocs.io/zh/latest/

测试使用:

代码语言:javascript
复制
#下载工具
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

代码语言:javascript
复制
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://:password@ip:port/db
######Ssdb:  ssdb://:password@ip: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来运行该环境:

代码语言:javascript
复制
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测试代码(做了一点修改!)

代码语言:javascript
复制
# -*- 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.思考如何将代理池如何应用到目录扫描工具或者某些漏扫工具中(直接动手操作吧)?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Ms08067安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档