群里发了一篇 WAF攻防之SQL注入篇 里面对各个厂商的WAF都过了一遍。本来一开始也以为是常规操作,匆匆扫一眼就没怎么在管了。
但是挖漏洞的同事仔细研究里面的几种饶法后,觉得其中的阿里云盾d的绕法十分诡异,让我看了一下,我这才注意留意到这个特殊的绕法 。
原文写的是 利用–+%0a、@自定义变量、{a key}组合进行绕过。
http://192.168.20.81/user.php?id=@a:=(select @b:=`table_name`from{a information_schema.`TABLES` }limit 0,1)union select '1',@a
通过拆解sql语句我们知道,最后的结果是通过自定义的变量a和union返回。
这里对于 @自变量 有几个知识点,这是以前没留意的操作
第一层是@a=(xxxxxxx) 这里略过不看
第二层是select @b:=`table_name`from{a information_schema.`TABLES` } limit 0,1
@b:=`table_name`
和 直接 写 table_name 效果是一样的。 原因上面提到了 。第二个是 { a key }的写法。我一直很疑惑 这个{a key}是什么东西。关于这个,我找了很多资料,都没找到。问了几个朋友也没发现,最终在mysql的官网手册中找到了。
https://dev.mysql.com/doc/refman/5.7/en/expressions.html
这个确切的写法是 {identifier expr}
SELECT * FROM table1 WHERE datefield = {d '1995-09-12'}