SQL注入漏洞的自动化测试:输入变异方法

Posted 51Testing软件测试网

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入漏洞的自动化测试:输入变异方法相关的知识,希望对你有一定的参考价值。

摘要

  Web服务越来越多地应用于各种领域,从nance和e-government到社交媒体。由于它们是基于Web技术构建的,因此它们也遭受了前所未有的攻击和渗透。在这些攻击中,那些针对SQL注入漏洞的攻击在过去几年一直排名第一。在上线Web服务之前进行测试以检测此类漏洞至关重要。我们在本文中提出了一种自动化测试方法,即μ4SQLi,以及它的基础变异算子集。μ4SQLi可以产生有效的输入,从而导致可执行和有害的SQL语句。可执行性是关键,否则不能利用注入漏洞。我们的评估表明,该方法对于检测SQL注入漏洞并产生绕过现实世界中常见配置的应用程序防火墙是有效的。

SQL注入漏洞的自动化测试:输入变异方法

介绍

  在本文中,我们提出了一种针对SQLi漏洞的黑盒自动化测试方法,称为 μ4SQLi。

  从一般的初始测试用例开始,我们的方法应用了一组特定设计的变异算子,以增加产生成功SQLi攻击的可能性。

  更具体的说,这种新的攻击模式是通过在同一输入上应用多个变异算子来生成。此外,我们的一些变异算子旨在模糊注入的SQL代码片段以绕过安全过滤器,例如Web应用程序防火墙(WAF),而其他则旨在修复可能由先前突变引起的SQL语法错误。因此,我们的方法可以生成测试输入,这些输入可以生成语法正确且可执行的SQL语句,这些语句可以揭示SQL漏洞(如果存在)。通过产生绕过防火墙并导致可执行SQL语句的SQLi攻击,我们确保找到可利用的漏洞而不是无法利用的漏洞,例如因为过滤器阻止了所有攻击。此外,我们的方法产生的具体样本攻击可以帮助开发人员x源代码或安全过滤器的配置。我们的方法是完全自动化的,并且由名为 Xavier3的工具提供支持。

  我们已经在一些暴露Web服务接口的开源系统上评估了我们的方法。与称为Std的基线方法相比,该方法由最新的137种已知SQLi攻击模式组成,我们的方法更快,并且显着更有可能在有限的时间预算内检测漏洞。此外,当主题系统受到WAF保护时,Std产生的泄露漏洞的任何输入都不能通过防火墙,而我们的方法仍然可以产生大量输入,通过防火墙并显示全部已知的漏洞。

  本文的其余部分安排如下:第2部分提供了有关SQLi漏洞和审查相关工作的背景知识。第3节介绍了我们提出的变异算子和安全测试方法和工具。第4节介绍了评估以及对结果和有效性威胁的讨论。最后,第5节总结了这项工作。

背景和相关工作

  本节提供有关Web服务和SQLi漏洞的简要背景,并回顾以前有关SQLi测试的工作。

背景

在使用数据库的系统(例如基于Web的系统)中,用于访问后端数据库的SQL语句通常由本机应用程序代码视为字符串。这些字符串是通过根据用户选择或应用程序的控制来连接不同的字符串片段而形成的流。一旦形成SQL语句,就会使用特殊函数将SQL语句发送到要执行的数据库服务器。例如,SQL语句形成如下(在案例研究中,我们的一个Web服务的简化示例):

$sql = "Select * From hotelList where country ='";

$sql = $sql . $country;

$sql = $sql . '"';

$result = mysql_query($sql) or die(mysql_error());

  变量$country是用户提供的输入,它与SQL语句的其余部分拼接,然后存储在字符串变量$sql中。字符串然后传递给函数 mysql_query 查询,该查询将SQL语句发送到要执行的数据库服务器。

  SQLi是一种攻击技术,攻击者将恶意SQL代码片段注入这些输入参数。当输入参数直接在SQL语句中使用而没有经过适当的验证或消毒时,这种攻击是可能的。攻击者可能以改变生成的SQL语句行为的方式构造输入值,使攻击者能够对数据库执行操作,而不是应用程序开发人员所希望的操作。这些操作可能导致敏感数据暴露,未经授权插入或更改数据,丢失数据,甚至控制数据库服务器。

  在前面的示例中,如果输入$country的值为 ‘ or 1 = 1 – 生成的SQL语句将是:

Select * From hotelList where country='' or 1 = 1 --'

  第一个引号闭合原语句中的引号,最后的双短划线注释掉原语句最后的一个引号,使得结果SQL语句在语法上有效。子句 or 1 = 1 是重言式,即条件将始终为真,绕过where子句中的原始条件并返回表中的所有行。

  为避免此类攻击,应用程序开发人员使用过滤器来防止恶意输入影响应用程序的行为。开发人员必须小心,不要阻止可能类似于恶意输入的有效输入。例如,使用拒绝单引号输入的过滤器可以防止前一个示例中的攻击。但是,过滤器也会拒绝单引号参与的有效输入(例如,O’Brian)

  Web服务是面向服务的体系结构的基本模块,它提供了在Web上轻松访问和交换信息的工具。每个Web服务都提供一组可由客户端调用的操作。操作类似于传统编程语言中的方法,它具有一组输入参数并返回结构化输出。 Web服务的接口和功能通常由公共可用的Web服务描述语言(WSDL)文件描述。

  在本文中,我们考虑被测服务的输入参数的SQLi漏洞:如果输入参数在服务实现的任何SQL语句中使用,并且通过此参数,攻击者可以发送,则输入参数容易受到SQLi攻击恶意输入,可以更改SQL语句的预期逻辑。要利用此类漏洞,攻击者必须提供导致可执行SQL语句的输入。否则,结果语句将被数据库拒绝,因此无法访问或更改数据。

相关工作

  之前关于SQLi检测的研究使用了白盒和黑盒方法来检测漏洞。几种白盒方法使用污点分析来识别无效输入

  进入SQL语句。 Fu和Qian 建议使用符号执行来识别需要满足的约束以导致SQLi攻击。 Shar等人。 使用源代码的数据挖掘来预测漏洞。除了要求访问源代码之外,正如我们之前提到的那样,并非总是可能的,这些方法中的大多数在其算法的某些方面依赖于一组已知的漏洞模式。

  在生成测试用例时,现有的黑盒方法也依赖于已知的注入模式。Ciampa等提出了一种方法,分析合法和恶意测试用例的输出,包括错误消息,以了解有关后端数据库的类型和结构的更多信息。然后,此信息用于制作更有可能成功揭示漏洞的攻击输入。 Antunes等还分析了使用恶意和合法输入来检测漏洞时应用程序行为的差异。黄等人使用了一种使用已知攻击模式的测试生成方法。

  各种学术和在线安全源已经列举和讨论了已知的 SQLi 模式。但是,依赖这些模式可能不足以测试应用程序,因为攻击者总是找到利用漏洞的新技术。此外,对于相同的模式,可能存在大量不同的表示,例如,使用不同的编码

  一些方法提出了运行时预防技术而不是测试技术。在大多数这些方法中,静态分析用于收集程序可以生成的所有可能形式的SQL语句。在运行时,如果SQL语句的结构与这些收集的表单中的任何一个都不匹配,则该语句为被视为潜在的攻击。 Sekar结合了污点分析和策略来检测运行时的注入攻击。运行时预防方法是测试方法的补充,也可以用作测试的有效预言。

  在我们之前的论文中,我们发现使用运行时预防技术为 oracle 提高了 SQLi 测试的检测率。我们还确定了对更复杂的 oracle 的需求,该 oracle 可以推断已发现漏洞的可利用性。在本文中,我们尝试通过增强 oracle 来评估形成的攻击的可执行性来解决这个问题。恶意输入可以成功地规避所有安全机制,但由此产生的攻击可能会产生不可执行的SQL语句,因此不会提供漏洞可利用的证据。

  已经提出并广泛研究了变异测试作为评估测试套件充分性的方法,其中测试程序被变异以模拟故障。 Shahriar和Zulkernine 定义了SQLi特定的变异算子来评估测试套件在解决SQLi漏洞方面的有效性。 Fonseca等人也使用突变分析比较商业安全测试工具的有效性。我们在本文中提出的变异算子会改变测试输入,以增加触发漏洞的可能性,而不是测试中的程序,以评估测试套件在发现故障时的有效性。

  霍勒等人提出了一种名为 LangFuzz 的方法,通过改变输入代码来测试解释器的安全漏洞,例如内存安全问题。该方法已成功应用于发现 Mozilla javascriptphp解释器中的缺陷。但是,我们的方法在各方面都有所不同:

  (1)我们针对需要不同变异算子和测试生成技术的SQL注入漏洞; 

       (2)在SQL漏洞的情况下,失败的可观察性比寻找崩溃更具挑战性;

  我们需要拦截SUT与其数据库之间的通信,以分析SQL语句的可执行性和漏洞检测。

方法

  我们提出了一种自动化技术,即 μ4SQLi,用于检测SQLi漏洞。我们的技术依赖于一组变异操作符,这些操作符操纵输入(合法的)以创建新的测试输入以触发SQLi攻击。

  此外,这些运算符可以以不同的方式组合,并且多个运算符可以应用于相同的输入。这使得生成包含新攻击模式的输入成为可能,从而增加了检测漏洞的可能性。

  具体而言,我们希望生成可绕过Web应用程序防火墙并生成可执行SQL语句的测试输入。WAF可能会阻止SQLi攻击并阻止易受攻击的Web服务被利用。因此,有效的测试输入需要通过WAF才能到达服务。此外,它们应该导致可执行的SQL语句,否则不太可能出现安全问题,因为数据库引擎会拒绝它们,因此不会泄漏或泄露任何数据。

  本节介绍我们提出的用于生成测试数据的变异算子。对于每个变异算子及其定义,提供了一个具体的例子。在一些运算符中,我们还讨论了它们关于输入和先前应用的运算符的前提条件。然后,我们将讨论我们的测试生成技术和我们开发的支持该技术的自动化工具。


……


点击阅读原文查看全文


SQL注入漏洞的自动化测试:输入变异方法
推荐阅读

点击阅读☞

点击阅读☞

点击阅读☞

点击阅读☞

点击阅读☞

上文内容不用于商业目的,如涉及知识产权问题,请联系小编(021-64471599-8017)。

SQL注入漏洞的自动化测试:输入变异方法
“阅读原文”一起来充电吧!
SQL注入漏洞的自动化测试:输入变异方法
爱我请给我好看!


以上是关于SQL注入漏洞的自动化测试:输入变异方法的主要内容,如果未能解决你的问题,请参考以下文章

web实验4--SQL注入

appscan发现的sql漏洞 怎么利用

实战!使用burp macros和sqlmap绕过csrf防护进行sql注入

如何防范SQL注入漏洞及检测

3_SQL注入攻击_3_SQLmap自动化注入攻击

利用sqlmapapi打造自动化SQL注入工具