【WAF绕过-1】信息收集之反爬虫延时代理池技术

在这里插入图片描述
网站部署waf时,采用进程抓包工具抓取webpathbrute数据包分析,一般有2种结果:
1.直接误报或者无结果
2.扫描一段时间后突然误报
扫描探针机制
数据包拦截
速度过快拦截
WebPathBrute-Web路径暴力探测工具:https://github.com/7kbstorm/7kbscan-WebPathBrute

在这里插入图片描述

使用WebPathBrute扫描网站目录,当网站服务器分别部署了以下waf时,对拦截机制进行测试分析,结果如下:
1.safedog-默认拦截机制-未开CC
扫描结果:出现误报,全部200状态码
原因:浏览器采用get方法,工具扫描采用head方法。
绕过方法:更改提交方式(改为get方法)或模拟用户
2.safedog-默认拦截机制-开启CC
扫描结果:误报
绕过方法:延时或代理池或爬虫引擎。
2.1 延时
可开启延时扫描,慢速扫描,缺点是速度过慢。
2.2 代理池
网上搜索代理池,写python脚本,添加代理池。确定是WAF可能开启了防代理,无法绕过。
2.3 爬虫引擎
可在软件中自定义添加爬虫引擎头部(但是扫描不出现结果)
各大搜索引擎的User-Agent:https://www.cnblogs.com/iack/p/3557371.html
3.Aliyun_os-默认拦截机制
扫描结果:对部署在阿里云上的网站进行目录扫描时,扫着扫着网站就打不开了,大约1个小时后才能重新打开,重启服务器也不能使网站重新打开,只能等一个小时,猜测这是因为阿里云自己有一套防护体系。
绕过方法:无法模拟搜索引擎爬虫绕过,只能采用延时或代理池
4.BT(防火墙插件)-默认拦截机制
拦截机制举例:
60秒内,请求同一URL超过120次,封锁IP 100秒。
60秒内,恶意请求6次,封IP 600秒。
什么是恶意请求?比如宝塔检测到用户频繁请求index.php.bak等备份文件,即判断为恶意请求,拦截。对于这种拦截,绕过方法为字典重写(参考于upload-labs做字典)
绕过方法:爬虫未知,延时可以,代理池可以
5.阿里云(免费)+ safedog + 宝塔(付费插件)
绕过方法:延时或代理池
6.python编写绕过脚本,进行目录扫描
自定义headers头部,模拟用户
休眠3秒,模拟延时(测试发现,阿里云至少休眠3秒,否则拦截)
添加proxy,从网上爬取代理池,按需添加,比如一个代理发10个请求,接着换另一个代理。
脚本如下

import requests
import time

headers = {
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'Cache-Control': 'max-age=0',
    'Connection': 'keep-alive',
    'Cookie': 'PHPSESSID=4d6f9bc8de5e7456fd24d60d2dfd5e5a',
    'sec-ch-ua': '"Chromium";v="92", " Not A;Brand";v="99", "Microsoft Edge";v="92"',
    'sec-ch-ua-mobile': '?0',
    'Sec-Fetch-Dest': 'document',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-Site': 'none',
    'Sec-Fetch-User': '?1',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)'
}

for paths in open('php_b.txt', encoding='utf-8'):
    url = "http://127.0.0.1/pikachu"
    paths = paths.replace('\n', '')
    urls = url + paths
    proxy = {
        'http': '127.0.0.1:7777'
    }
    try:
        code = requests.get(urls, headers=headers, proxies=proxy).status_code
        # time.sleep(3)
        print(urls + '|' + str(code))
    except Exception as err:
        print('connect error')
        time.sleep(3)

在这里插入图片描述
代理池多个ip循环调用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值