mysql_query函数上的SQL注入只能检索数据


SQL Injection on mysql_query function can only retrieve data?

一位潜在客户昨晚允许我访问他的FTP,以检查一个小型网络软件,看看我是否可以执行他想要的更改,我在代码中发现了以下行

$query = mysql_query("SELECT * FROM request WHERE MD5(CONCAT(id, code)) = '{$_GET['r']}' LIMIT 1");

我在这个问题中读到mysql_query不支持多查询,所以这就是为什么我不能擦除我自己创建的一个测试表的原因。

我确实使用了老技巧' or 1 = 1 --,但软件界面设计为只列出一个查询结果,这意味着我无法获得所有数据。但在这个主题上,应用程序是一个处理请求的小型网络软件。

  • 你得到一个链接
  • 您单击"立即付款"
  • 你在另一个网站上还债
  • 您返回网站
  • 你会收到一封收据电子邮件

该应用程序不包含敏感度数据,如果你能找到并加载别人的请求也没关系,因为你不愿意支付他们的账单,你也无能为力。不涉及密码,不涉及信用卡,什么都没有。从数据库中窃取的东西都不重要。

问题是

在这种情况下,我有什么可以支持直接将数据输入SQL不安全的指控吗?有没有办法使用SQL注入来绕过deleteupdate(在损坏的情况下更新)数据,这样我就可以证明它实际上是不安全的?或者我们不得不承认在这种情况下软件是足够安全的?

问题是设计来帮助我决定是否应该报告,解释客户端应该花钱请人修复所有SQL注入漏洞。但如果它没有坏,他就不会花钱修理它,显然我无法证明它坏了。

编辑1:

在回复@James的评论时,该网站不会处理你的所有账单,只处理你与特定客户的账单。为了便于论证,我们可以放心地假设,没有人会只为修复select漏洞付费,因为事实上,你不会发现他们的任何客户担心他们的账单会被泄露。

您可以更改查询的结构和含义;您可以添加或删除其中的条件等,并通常使其以作者不打算的方式运行无论你怎么看,这都是一个安全问题。可能找不到针对它的临时漏洞,但它可以以某种方式给某人提供帮助,而这是目前没有人预料到的。例如,它可以用于探测数据库中是否存在数据或表和列。仅此一点就可以为攻击者提供额外的信息,以便在其他地方制定更具体的攻击。

这是一个安全风险。

例如,

$_GET['r'] = "1 AND code LIKE '%_[^!_%/%a?F%_D)_(F%)_%([)({}%){()}£$&N%_)$*£()$*R"_)][%](%[x])%a][$*"£$-9]_%'";

我们有一个通配符攻击。

SQL通配符攻击是指通过使用几个通配符来迫使底层数据库执行CPU密集型查询。此漏洞通常存在于web应用程序的搜索功能中。成功利用此攻击将导致拒绝服务。

除此之外,攻击者还可以操纵$_GET['r']来了解数据库(如其他表、列甚至数据库)的更多信息,这本身就是一个巨大的安全漏洞。