0x00 简介
通常在实战中,当我们需要扫描对方子域名目录等的时候,常常被waf产品拦截,导致扫描结果不可用,出现很大的误报,这时候需要采取waf绕过扫描,
下面介绍aliyun-os,safedog,BT(宝塔)的目录绕过思路
0x01 扫描绕过waf思路
绕过分析:
1.抓包分析数据结构
2.熟悉waf产品绕过机制
3.FUZZ模糊测试
绕过手法-提交方式
1.修改请求方式
2.模拟用户请求
3.爬虫引擎请求
4.白名单机制
绕过手法-数据请求线程
1.延时请求
2.代理池请求
3.爬虫引擎延时
0x02 aliyun-os,safedog,BT绕过测试
安全狗测试:
修改请求方式绕过:
开启安全狗未开cc,扫描目录会出现误报,显示错误目录全部存在,
因为请求方式为head(head请求比get快),可以根据更改请求方式绕过目录扫描
模拟用户请求绕过:
开启安全狗开启cc,扫描目录get方式报错,网站请求过快IP被封,
可以调整线程,扫描间隔时间,模拟延时扫描即可
利用爬虫引擎绕过:
waf开启cc,因为网站需要被百度收录,需要设置爬虫白名单,不会拦截百度的引擎爬虫
定义爬虫User-lgent的head头请求
各大搜索引擎的User-Agent:https://www.cnblogs.com/iack/p/3557371.html
补充知识点:因为网站考虑到被百度等浏览器收录必须允许百度引擎的爬虫爬取他的网站信息,也就不拦截百度的引擎爬虫,从而我们就可以使用百度的user-agent头模拟爬虫请求爬取即可绕过
代理池绕过:
数据到代理池(多个IP,被封下一个继续上),再到目标,返回也一样
使用代理池多个代理请求,被封IP下一个代理继续请求为止
宝塔绕过: 爬虫未知 延迟请求可以 代理池请求可以
阿里云盾绕过: 代理池请求 延时请求可以 爬虫引擎无效
综合上述,当网站具备多个waf设备可以考虑延时请求,代理池请求
有些网站识别字典里面的敏感字符类似于bak敏感字符,这时候考虑优化字典,采用字符截断,换行等思路优化
python-exp:
import requests
import time
headers={
'Connection': 'keep-alive',
'Cache-Control': 'max-age=0',
'Upgrade-Insecure-Requests': '1',
#模拟用户 Kit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36
#模拟引擎 Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)
#更多爬虫引擎:https://www.cnblogs.com/iack/p/3557371.html
'User-Agent': 'Mozilla/5.0 (compatible; Baiduspider-render/2.0;+http://www.baidu.com/search/spider.html)',
'Sec-Fetch-Dest': 'document',
'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',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-User': '?1',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'Cookie': 'xxx',#根据当前访问 cookie
}
for paths in open('字典',encoding='utf-8'):
url='http://www.kxsy.work'
paths=paths.replace('\n','')
urls=url+paths
#如需测试加代理,或加入代理池需加代理
proxy = {
'http': '127.0.0.1:7777'
}
try:
code=requests.get(urls,headers=headers,verify=False).status_code
print(urls+'|'+str(code))
if code==200 or code==403:
print(urls+'|'+str(code))
except Exception as err:
print('connecting error')
#time.sleep(3)模拟用户需延时 引擎可用可不用(根据请求速度)
遇到实际情况可以根据抓取数据包分析,采用人工+工具分析
以上提供思路,无法绕过说明任然有waf规则拦截,需要再寻找方法
交流学习:
博客:www.kxsy.work
CSND社区:告白热