就在最近,我们的客户通过渗透测试公司对其网站进行了测试,并在报告中指出,在某些字段上可能会执行SQL注入。他们只说出数据库服务器版本和他们找到的一些表。
我试图在该字段上执行SQL注入如此困难,但我无法获得相关结果。 我猜这个字段上SQL注入的问题是:
SELECT 1 FROM table WHERE column = '{$value}'
)由于这一切,我不知道如何执行会返回一些数据的SQL注入...我知道我可以执行插入,更新,删除查询,所以确实有SQL注入,但是如何使用此字段及其验证方法
从选择查询中检索某些数据嘿嘿! 我不是在问“有没有SQL注入?”或者“SQL注入是一件坏事吗?” - 我知道有SQL注入,我知道它是非常糟糕的,但我的问题是我如何执行SQL注入,它会检索任何数据,而你知道上面的条件...
这些评论无用......
答案 0 :(得分:4)
很明显:
您没有使用OCI8 PHP扩展程序提供的预准备语句功能(否则,您将column = :value
而不是column = '{$value}'
)
您的验证是客户端的,因此可以轻松覆盖。
所以做有一个SQL注入漏洞。现在,这并不意味着我们必须窃取您的密码或信用卡号码。最小的影响是用户提供的参数可以让你的应用程序崩溃,这已经够糟糕了。
关于这种注射的确切潜力,很难说甚至不知道应用程序的作用。通常的可能性包括:
<强>更新强>
无需查看PHP代码的功能:
$value = "' UNION ALL SELECT credit_card FROM billing_info -- ";
答案 1 :(得分:2)
一旦发现漏洞,可能需要一段时间来设计一个完全控制数据库的方法,特别是如果攻击方必须欺骗/重写客户端代码以与易受攻击的服务器端验证兼容。这也可能不是安全任务的一部分:它的实际目标是找到漏洞,而不是漏洞利用漏洞。
因此,在这里花费资源是没有意义的,重点是你有一个漏洞,你必须纠正它。即使安全团队无法利用它,它也无法证明任何事情:一个更有经验和/或有动力的不法分子团队当然可以利用它。特别是,有一些工具可以在发现SQL注入漏洞后自动执行这一过程。
不要花太多时间来了解客户端更改的细节:最重要的部分是强大的服务器端验证。
也使用准备好的陈述,问题解决了。