【技术分享】如何绕过WAF/NGWAF的libinjection实现SQL注入

栏目: 数据库 · 发布时间: 8年前

内容简介:【技术分享】如何绕过WAF/NGWAF的libinjection实现SQL注入
2017-05-16 10:03:17 阅读:209次
【技术分享】如何绕过WAF/NGWAF的libinjection实现 <a href='https://www.codercto.com/topics/18630.html'>SQL</a> 注入
作者:WisFree

【技术分享】如何绕过WAF/NGWAF的libinjection实现SQL注入

翻译: WisFree

预估稿费:100RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

写在前面的话

在我们开始之前,先给大家介绍一下libinjection。 libinjection 是一个非常流行的开源项目【 传送门 】,该项目由Signal Sciences公司的Nick Galbreath负责开发和维护。

在此之前,市场上绝大多数的WAF都是基于正则匹配(Regex)的,但是现在不一样了,很多的WAF(防火墙)以及NGWAF(下一代防火墙)出于性能方面的考虑,都会选择使用这个库来代替常规的正则表达式。 例如mod_security从2.7.4版本开始就支持libinjection(dectectSQLi-v2.7.4、detectXSS-v2.8.0)。

从技术角度来看, libinjection是一个基于 C语言 的SQLi词法解析分析器,它可以通过对不同语句进行词法分析和语法分析来实现对SQL语句以及HTML语句的解析。

但需要注意的是,某些情况下libinjection的效果可能并没有正则表达式好。接下来我会告诉大家我为什么会这样认为。

libinjection解析器的未知令牌(token)

函数令牌,这是找出未知令牌的一种最简单的方法了。我们曾尝试列出所有可能的SQL函数,但这不太可能实现,因为还有很多自定义函数存在。这是其中一个原因,而另一个原因是各种不同的SQL引擎(例如MariaDB、 MySQLSQLite 和PostgreSQL等等)都有很多不同的内置SQL函数。

下面是一个简单的例子:

?id=‘-sqlite_version() UNION SELECT password FROM users- -

libinjection解析器的未知语境(context)

括号语境

如果攻击者想要进行拒绝服务(DoS)攻击,并尝试通过SQL注入来拿下你的数据库,那么他可能会使用下面这种查询语句:

?id=sleep(9999)

但是,这种尝试是会被检测到的,而安全防护产品也能够有效地阻止这种攻击。但是,下面这种情况却是无法检测到的:

?id=)-sleep(9999

因为libinjection并不能理解这种括号语境。

同样的,在MySQL的文件写入中我们也可以利用类似的技术。比如说下面这个语句,它在一般情况下都会被检测到:

?id=1337 INTO OUTFILE ‘xxx’--

但是如果攻击者换成下面这种形式或语境的话,就无法被检测到了:

?id=1337) INTO OUTFILE ‘xxx’--

除了上面给出的这种情况之外,我们同样可以在批量查询语句或多层查询语句中使用同样的技巧。比如说下面这条语句,它是会被检测到并且被阻止的:

?id=123;DROP TABLE users--

但是下面这条语句却不会被发现,这样一来,你的用户表(users)就被攻击者拿到手了:

?id=123);DROP TABLE users--

简单的数据提取Payload样例如下所示:

?id=) OR (SELECT password FROM users ...

注释语境

在SQL语句的注释中执行注入

*/UNION SELECT password FROM users--

总结

实际上,我们经常可以在SQL语句的注释区域中发现可行的注入点。libinjection无法检测注释区域中的内容,因为它的SQL解析器根本就不支持这种语境。

正如大家在本文中看到的那样,想要保护Web应用不受网络攻击其实是一件非常困难的事情,即便是我们对SQL注入攻击已经有着足够的了解了,但我们仍然不能保证SQLi不会发生在我们自己的服务器身上。无论你所使用的库有多么的流行,无论这个库有多么的高级,攻击者永远都会有新的方法来绕过它们。

【技术分享】如何绕过WAF/NGWAF的libinjection实现SQL注入 【技术分享】如何绕过WAF/NGWAF的libinjection实现SQL注入

本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。

原文链接:https://medium.com/@d0znpp/how-to-bypass-libinjection-in-many-waf-ngwaf-1e2513453c0f

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C语言程序设计

C语言程序设计

K. N. King / 吕秀锋、黄倩 / 人民邮电出版社 / 2010-4 / 79.00元

时至今日, C语言仍然是计算机领域的通用语言之一,但今天的 C语言已经和最初的时候大不相同了。本书最主要的一个目的就是通过一种“现代方法”来介绍 C语言,书中强调标准 C,强调软件工程,不再强调“手工优化”。这一版中紧密结合了 C99标准,并与 C89标准进行对照,补充了 C99中的最新特性。本书分为 C语言的基础特性、 C语言的高级特性、 C语言标准库和参考资料 4个部分。每章末尾都有一个“问与......一起来看看 《C语言程序设计》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

html转js在线工具
html转js在线工具

html转js在线工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具