背景
对于腾讯的业务来说,有两个方面决定着WAF能否发挥效果,一个是合适处理海量流量的架构,另一个关键因素则是规则系统。架构决定着WAF能否承受住海量流量的挑战,这个在之前的篇章中简单介绍过(详情见主流WAF架构分析与探索、WAF应用层实现的架构漫谈)。而规则系统则决定着WAF能否发挥完善的防护功能。
SQL注入是由于开发人员没有对用户的输入进行相关的过滤,而使用户的输入可以被带入到SQL语句中执行,所引发的一种高危漏洞。可能造成信息泄露,数据库数据泄露,入侵等重大影响的后果。腾讯WAF对此种类型漏洞的防护目标就是确保不造成上述重大影响。
本文介绍腾讯WAF如何针对SQL注入这种攻击进行防护。同时,最近TSRC与白帽子小伙伴们举办了一场SQL注入绕过挑战赛,发现了WAF规则系统一些不足之处,这里将详细介绍。
感谢各位参与的白帽子小伙伴的大力支持。
关键字防护
SQL注入最简单、粗暴但实用的方式就是检测一些关键字,通过把这些能造成影响的关键字加入黑名单,可以阻断大部分的利用代码。这类关键字主要包含几种:
1、SQL语句的关键保留字,如select from,union select,drop table,into outfile等。
2、MySQL等DBMS的内建函数,如version(),load_file(),sleep(),benchmark()等
3、MySQL等DBMS内建变量,如@@version等。
4、MySQL所识别的内联注释,如/*!union*/ /*!select*/或/*!50000union*/等
真假条件防护
上述的关键字方法