php - mysql_query 函数上的 SQL 注入(inject)只能检索数据?

标签 php mysql sql-injection

一个潜在客户昨晚让我访问他的 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/

相关文章:

mysql - 如何避免sql注入(inject)?

javascript - Ajax 从具有特定 ID 的远程文件加载数据

javascript - 仅在 AJAX 查询返回特定结果时播放 CSS 动画

javascript - 从数据库填充数据时,Jquery token 输入不起作用

javascript - 从日期选择器按天搜索

PHP 视频上传不将值存储在 DB 和 DIR 中

sql - sql注入(inject)的Rails brakeman警告

PHP PDO循环遍历SQL结果只显示最后一个

python - 如何为 Airflow 连接显式声明 charset=utf8

security - 用反斜杠引号替换所有引号——这样就足够了吗?