一个潜在客户昨晚让我访问他的 FTP,以检查一个小型网络软件,看我是否可以执行他想要的更改,我在代码中发现了以下行
$query = mysql_query("SELECT * FROM request WHERE MD5(CONCAT(id, code)) = '{$_GET['r']}' LIMIT 1");
我读了in this question mysql_query 不支持多查询,所以这就是我无法删除自己创建的一个测试表的原因。
我确实设法使用了老把戏 ' or 1 = 1 --
但软件界面设计为仅列出 1 个查询结果,这意味着我无法动手所有的数据。但在这个主题上,该应用程序是一个处理请求的小型网络软件。
- 你得到一个链接
- 您点击立即付款
- 您在另一个网站上还债
- 您返回网站
- 您会收到一封收据电子邮件。
该应用程序不保存敏感数据,您是否可以找到并加载其他人的请求并不重要,因为您不愿意支付他们的账单,您也无能为力。不涉及密码,不涉及信用卡,什么都没有。您可以从数据库中窃取任何内容。
问题是
在这种情况下,我有什么可以支持将你的数据直接输入到SQL中不安全的指控吗?有什么方法可以使用 SQL 注入(inject)来删除
或更新
(在损坏的情况下更新)数据,这样我就可以证明它实际上是不安全的?还是我们不得不承认在这种情况下该软件足够安全?
这个问题旨在帮助我决定是否应该向我报告,解释客户应该花钱请人来修复所有的 SQL 注入(inject)漏洞。但如果它没有坏,他就不会付钱修理它,显然我无法证明它坏了。
编辑 1:
在回复@James 的评论时,该网站不会处理您的所有账单,只会处理您与特定客户的账单。出于争论的目的,我们可以安全地假设没有人会只为修复 select
漏洞付费,因为实际上您不会发现他们的任何客户担心他们的账单被泄露。
最佳答案
您可以更改查询的结构和含义;您可以从中添加或删除条件等,并且通常可以使其以作者不希望的方式运行。 无论您怎么看,这都是一个安全问题。您可能无法找到针对它的临时利用,但它可以以现在没人预料到的某种方式帮助某人。例如,它可用于探测数据库中是否存在数据或表和列。仅此一项就可以为攻击者提供更多信息,以便在其他地方制定更具体的攻击。</p>
关于php - mysql_query 函数上的 SQL 注入(inject)只能检索数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29538604/