WAF的思考 – 作者:耍性子是现在

0x00 WAF有那些

云WAF:阿里云,百度云,360网站卫士等
传统厂商的硬件WAF以及IPS,IDS等设备:绿盟,启明,深信服等
主机防御软件:安全狗,云锁等
软WAF:nginx-lua-waf,Modsecurity等
这些写了那么多,没见过是不是,我这里有宝典:
看图识WAF-搜集常见WAF拦截页面:https://mp.weixin.qq.com/s/3uUZKryCufQ_HcuMc8ZgQQ
感谢大佬总结的

0x01 WAF在哪里

用户从浏览器发出一个请求之后,最终到达服务器,这其中经历了很多设备,这些设备有的就有我们的WAF,这些WAF对服务器进行保驾护航,是很多企业都要买来用来保护自己网站的。

1607496244_5fd0723489fcbbfed076a.png!small?1607496244699

0x02 WAF Bypass的理解

用户从浏览器发出的请求到达服务器的过程中,中间如果经历了WAF,WAF就会根据自己的规则库去匹配用户提交的请求,如果命中规则的话,WAF就会把这个请求做相应的处理,使其到达服务器不能按照用户的意图来执行。如果用户提交的请求在WAF的规则库中没有规则,WAF就会放行,使其正常的到达服务器,而我们bypass就是想要不命中WAF规则库中的规则并且到达服务器能够按照我们的意图来正确执行。

1607496259_5fd07243456b7874edf62.jpg!small?1607496259795

0x04 WAF Bypass

说实话,WAF Bypass是一个永恒的话题,因为攻防一直在对抗,我们可以Bypass,开发人员也可以Bypass The Bypass。

一、老一套
*编码、大小写、双写、替换关键字、等价函数、字符串替换
*等价函数:
* hex()、bin()==>ascii()
* sleep()==>benchmark()
* concat_ws()==>group_concat()
* mid()、substr()==>substring()
* @@user==>user()
* @@datadir==>datadir()
*select if((select 3,\n) > (select 1, \n),30,40) //懂我意思把,就是利用select 3结果的真实性(True or False)来判断的

二、新一套
* 特殊符号:(``),(-+.),(@),
* ``:特殊符号,可以绕过空格和正则
* -+.:这三个符号可以当作连接符,可以逃过空格和关键字
* @:@可以用于定义变量,一个@表示用户定义,两个@@表示系统变量
* 等价符号:
* and==>&&,or==>||,()
* %20(空格),%09(TAB),%0a(linefeed),%0b,%0c,%0d,%a0,/**/,TAB
* 静态资源:当文件后缀为jpg,png时,WAF为了提高检测效率,不检测这类文件,所以可以在这个后面进行注入
* 注释绕过
* /*!select*/
* union/*%aa*/select,要确保%aa不能构造成一个汉字
* /*!12345select*/:在MySQL下,比如5.5.53,一般数据库认为50553,当我们输入的数字小于这个数时,里面的字符串就会被注释掉,如果大于50553时,里面的东西就没有被注释掉
* HTTP参数污染
* id=1/**/union/*&id=*/select/*&id=*/pwd/*&id=*/from/*&id=*/users
* URL参数溢出
* 比如某WAF默认情况下只能获取前100个参数进行检测,当提交第101个参数时,WAF就会无法进行安全检测
* GET+POST
* 当同时提交GET,POST请求时,进入POST逻辑,而忽略了GET请求的有害参数输入,可以轻易的Bypass,在GET里面进行正常的注入,POST里面提交一些无用数据即可
* multipart/form-data格式,将POST,GET数据包转换为上传multipartr/from-data个数数据包,利用协议解析的差异,从而绕过SQL防御
* SQL注入脚本:
* 大佬都是写tamper脚本的,我等菜鸡只能跪求了......
* SQL预处理:这个在CTF比赛中可能会有,我们实战的时候也可以试试
* 声明预处理:prepare 预处理名字 from '要执行的SQL语句';
* prepare select_student from 'select * from students';
* 执行预处理:exec 预处理名字;
* execute select_student;
* 销毁预处理:drop prepare 预处理名字;
* drop/deallocate prepare select_student;

* 通过变量进行传递
* SET @tn = 'flag';                     存储表名
* SET @sql = concat('select * from ', @tn);         存储SQL语句
* PREPARE sqla from @sql;         预定义SQL语句
* EXECUTE sqla;                 执行预定义SQL语句
* (DEALLOCATE || DROP) PREPARE sqla;     删除预定义SQL语句 * PREPARE语句准备好一条SQL语句,并分配给这条SQL语句一个名字供之后调用。
* 准备好的SQL语句通过EXECUTE命令执行,通过DEALLOCATE PREPARE命令释放掉。
* 在实际情况中,单一的技术可能无法绕过过滤机制,我们可以多种技术的配合使用,成功的可能性就会增加不少,菜鸡就写出这些,希望大佬们指教,一起学习交流

0x05 总结

当然,WAF还可以根据不同的WAF来思考来如何过WAF。

WAF的对抗一直存在,只有这样,我们的实力才会提高,不对,我们跪舔大佬的实力才会提高。

1607496274_5fd072527744edd93fc6b.jpg!small?1607496274455

来源:freebuf.com 2020-12-09 15:09:47 by: 耍性子是现在

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论