PHP + Oracle - 如何执行SQL注入?

时间:2012-11-15 11:39:45

标签: php oracle sql-injection

就在最近,我们的客户通过渗透测试公司对其网站进行了测试,并在报告中指出,在某些字段上可能会执行SQL注入。他们只说出数据库服务器版本和他们找到的一些表。

我试图在该字段上执行SQL注入如此困难,但我无法获得相关结果。 我猜这个字段上SQL注入的问题是:

  • 字段由AJAX on blur
  • 验证
  • 字段有一个JS验证,输入只能是一个数字(任何其他字符被剥离)
  • 该字段的AJAX验证要求数据库使用SQL是否可以在返回1时找到该值,如果是,则返回false,否则返回false(简单SELECT 1 FROM table WHERE column = '{$value}'
  • 验证方法然后返回true或错误消息,并以JSON格式返回到表单

由于这一切,我不知道如何执行会返回一些数据的SQL注入...我知道我可以执行插入,更新,删除查询,所以确实有SQL注入,但是如何使用此字段及其验证方法

从选择查询中检索某些数据

嘿嘿! 我不是在问“有没有SQL注入?”或者“SQL注入是一件坏事吗?” - 我知道有SQL注入,我知道它是非常糟糕的,但我的问题是我如何执行SQL注入,它会检索任何数据,而你知道上面的条件...

这些评论无用......

2 个答案:

答案 0 :(得分:4)

很明显:

  1. 您没有使用OCI8 PHP扩展程序提供的预准备语句功能(否则,您将column = :value而不是column = '{$value}'

  2. 您的验证是客户端的,因此可以轻松覆盖。

  3. 所以有一个SQL注入漏洞。现在,这并不意味着我们必须窃取您的密码或信用卡号码。最小的影响是用户提供的参数可以让你的应用程序崩溃,这已经够糟糕了。

    关于这种注射的确切潜力,很难说甚至不知道应用程序的作用。通常的可能性包括:

    • 检索您不应该看到的行
    • 注入数据操作语句

    <强>更新

    无需查看PHP代码的功能:

    $value = "' UNION ALL SELECT credit_card FROM billing_info -- ";
    

答案 1 :(得分:2)

一旦发现漏洞,可能需要一段时间来设计一个完全控制数据库的方法,特别是如果攻击方必须欺骗/重写客户端代码以与易受攻击的服务器端验证兼容。这也可能不是安全任务的一部分:它的实际目标是找到漏洞,而不是漏洞利用漏洞。

因此,在这里花费资源是没有意义的,重点是你有一个漏洞,你必须纠正它。即使安全团队无法利用它,它也无法证明任何事情:一个更有经验和/或有动力的不法分子团队当然可以利用它。特别是,有一些工具可以在发现SQL注入漏洞后自动执行这一过程。

不要花太多时间来了解客户端更改的细节:最重要的部分是强大的服务器端验证。

也使用准备好的陈述,问题解决了。