什么是WAF
WAF可以通过对Web应用程序的流量进行过滤和监控,识别并阻止潜在的安全威胁。WAF可以检测Web应用程序中的各种攻击,例如SQL注入、跨站点脚本攻击(XSS)、跨站请求伪造(CSRF)等,并采取相应的措施,例如拦截请求、阻止访问、记录事件等。
常见的waf拦截页面的汇总,可以根据waf的拦截页面进行判断waf的种类
参考下面链接里面的总结
微信公众平台 (qq.com)https://mp.weixin.qq.com/s/3uUZKryCufQ_HcuMc8ZgQQ
如图是文章中对于常见waf的拦截页面的页面的总结,当我们在进行测试的时候碰到了waf的情况,我们可根据不同waf的拦截页面去判断waf的种类
触发waf的条件--不正常的流量特征
信息收集的时候我们会进行目录扫描以获得网站的信息,这个时候我们有两种方式一种是主动收集,一种是被动收集,主动收集就是使用漏扫工具扫描网站的目录,这种方式一般会产生大量非正常的流量,一般的waf检测到这种流量后就会进行拦截封锁我们的IP,使得我们的信息收集无法进一步进行。被动收集就是使用fofa 360夸克等搜索引擎去获取网站的信息,这种方式就不需要我们主动进行扫描,而是从网站直接获得网站的相关信息从而也不会产生非正常的流量,也不会触发waf。
解决方案一:使用被动扫描
我们可以借助第三方搜索引擎去帮助我们进行信息收集,从而避免我们主动信息收集产生的恶意流量
平台推荐
1.奇安信的鹰图平台
鹰图平台 (qianxin.com)https://hunter.qianxin.com/
2.360测绘空间
360网络空间测绘 — 因为看见,所以安全https://quake.360.net/quake/#/index
3.fofa平台网络空间测绘,网络空间安全搜索引擎,网络空间搜索引擎,安全态势感知 - FOFA网络空间测绘系统https://fofa.info/
fofa平台如果要使用其全部功能需要开通会员,前两个平台只需要邀请用户可以获得一定次数的使用权限
解决方式二:使用搜索引擎的爬虫头
在有的信息收集的工具中,为了避免在信息收集的过程中被网站检测到,支持以指定的头部信息进行信息收集,我们采用大型的网站的爬虫头信息加入到我们的信息收集工具中,模拟爬虫进行爬取,因为网站对于百度谷歌这样的搜索引擎的爬虫一般是允许的,因为这样有利于增加网站的曝光度给网站地带来一定的经济效益,为此,我们可以使用这种方法饶过一定的waf拦截
相关搜索引擎的爬虫头参考以下的网站
搜索引擎蜘蛛头(user-agent)大全 - 易学在线工具 (e-learn.cn)https://www.e-learn.cn/tools/user-agent
例如7kbscan工具就支持这个功能
这样即可以指定大型网站的爬虫的形式进行爬虫去获取网站的目录相关信息,可以绕过部分WAF的检测
解决方式三:代码伪造
如果还被拦截的话我们就需要使用代码伪造正常的网站对于浏览器去对于网站进行访问检测,这样的话就需要使用代码编写来进一步将我们的请求伪造成合法的请求,消除一些工具上的流量特征
示例代码
import requests
import time
headers={
'Connection': 'keep-alive',
'Cache-Control': 'max-age=0',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36',
'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': 'bdshare_firstime=1581597934650; PHPSESSID=ncsajdvh39qse0qlsgqokshuc4; yx_auth=dc4fq8FAEkyiAUZ54b5zl9GGStCxXoRb1TFaAaozygMiSc5uZYHjR3gCQm%2BtKNz3bcjbTi8BRgcd%2F7LvR0lHN1j319CI6x29Z2QDI38',
}
for paths in open('php_b.txt',encoding='utf-8'):
url='http://www.testxiaodi.fun/'
paths=paths.replace('\n','')
urls=url+paths
proxy = {
'http': 'tps686.kdlapi.com:15818',
}
try:
code=requests.get(urls,headers=headers,proxies=proxy).status_code
#req=requests.get(urls, headers=headers, proxies=proxy)
#print(urls)
#print(req.text)
#time.sleep()
print(urls+'|'+str(code))
if code==200 or code==403:
print(urls+'|'+str(code))
except Exception as err:
print('connecting error')
time.sleep(3)
解决方案四:代理延迟
延迟就是在工具中进行简单的设置比如我们可以控制信息收集的时候流量的速度,当然如果我们想要达到最佳效果可以进行反复测试到达最佳的值
许多工具都支持这个功能,查询相关文章手册进行设置即可
解决方案五:使用代理
为了保证代理的稳定可靠性,我们可以到代理池网站上购买代理来进行操作
我们可以在网站上购买代理池,然后在工具中进行配置即可
awvs中的代理设置
goby中的代理设置
需要注意的是goby一般是进行端口探针不是走的http/https协议,一般配置为sokets协议,其他的工具也是如从,如果有代理配置的功能的话就可以进行代理设置
使用代理池的好处就是我们在进行测试的时候及时触发了waf设置的规则,网站也不会对于我们自己的主机进行封锁,他封锁的是我们使用代理池中的IP,在进行大量测试的时候,我们主机不会受到影响,我们可以使用代理池中合法的测试结果在我们的主机上进行进一步测试即可
写在最后
如有错误,请及时指出,感谢