在《WAF攻防之SQL注入篇》中几个有意思的发现
群里发了一篇 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=1 判断 变量a 是否 等于 1
- @a:=1 等同于 set @a = 1 (只有在set的语句下 = 才是赋值)
第一层是@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}- {identifier expr} is ODBC escape syntax and is accepted for ODBC compatibility. The value is expr. The curly braces in the syntax should be written literally; they are not metasyntax as used elsewhere in syntax descriptions.
- 简单点说,这个写法主要是为了兼容ODBC才会有的写法。并不是标准的sql语法。
- 那么在ODBC中是怎么使用的呢,我又寻找了一下 http://web.synametrics.com/winsqlescapeclause.htm
- 文中提到 ODBC中的写法
-
SELECT * FROM table1 WHERE datefield = {d '1995-09-12'}
前面的d是告诉ODBC这个数据的格式是啥。 虽然说一般是用一到两个字母去表示,例如 - Date {d 'yyyy-mm-dd'}
- Time {t 'hh:mm:ss'}
- Timestamp {ts 'yyyy-mm-dd hh:mm:ss[.f...]'}
-
- 但是我试了一下。写很长,mysql也可以认。
- 更重要的是,只要是支持ODBC,那么 {identifier expr} 理论上都可以使用。这就大大增加了 {identifier expr} 搞事情的机会。
多谢师傅,get到知识了
{
version
}???@三顿 如果你的回复对别人没有帮助,就不要回复了。
@wstart 懂了,谢谢师傅!
@ADog 反引号就是mysql里面标志符号的一个写法吧。。
这个在写sql语句中比较常见 。
主要是为了避免一些关键字的混淆。
比如你有一个表命名成 select
那么查询的语句就写成
select from select
那就很奇怪 。 所以加上
select from
select
这样子去区分一下。@ADog
你说的这2个问题都是{}的衍生用法
{identifier expr} 说明了,第一个是标示符,第二个是表达式
1.and {
`op} 的意思就是 表示标示符为空,后面直接拼接表达式
version`length()} 也是 {identifier expr} 的用法 只是他的标识符写成了version而已。2 version length准确的写法是 {
@phithon =.= 肝谢大佬 。
主要是感觉 {} 这个语法特别奇怪 。。
不知道有啥用途。所以写了一下。
乌云那篇bypass也只是说了用法。
没深入说明这个用途。
@ADog 因为这些技巧基本以前社区都有说过,想起来就发一下
@phithon 谢p牛
文章写得很好,不过那篇文章有几个问题想请教师傅
1.
and {``op}
这个是个什么意思呢,中括号和里面的反引号(区分保留字符?)是什么作用?
2.
version
length这是个啥?在mysql手册里也没找到这函数。。
对这块研究不深,望师傅解惑~
心疼没赶上乌云社区的同学,可以多翻翻以前的文章
http://drops.xmd5.com/static/drops/tips-7883.html