【问题标题】:PHP/MySQL Injection examplePHP/MySQL 注入示例
【发布时间】:2012-01-10 13:44:34
【问题描述】:

这是对这个问题的后续跟进:Is PHP's addslashes vulnerable to sql injection attack?(感谢所有回复的人)。

同样的场景,但我有这段代码(在另一页):

             $ID = $_GET['id'];
             $sql = "SELECT * FROM blog WHERE id='$ID'";
             $result = mysql_query($sql);

这应该很容易被利用,对吧?

如果我没记错的话,我不能在 mysql_query() 中运行第二个查询,但我应该可以做一些其他恶意的事情,对吧?希望能够将用户插入管理表或更改密码或其他内容,但我认为除了触摸博客表之外我无法做任何事情。那是对的吗?有什么建议可以帮助我解决问题并进行调整以证明存在问题吗?

【问题讨论】:

  • 请避免与其他问题无关。
  • @Marco - “mysql_query() 发送一个唯一查询(不支持多个查询)”(来源:php.net/manual/en/function.mysql-query.php
  • Slideshare 上Advanced SQL Injection 上的一些(93 个!)有趣的幻灯片。
  • 这个问题有味道。我们没有证据表明它实际上是安全审计(由完全不了解安全性的人执行)
  • @col - 这就是我在这里问你们的确切原因。我以前没有做过安全审计,虽然我做过网络开发,而且我有一个客户要求我用最佳实践更新他们的网站。他们的要求是我向他们展示一个漏洞。我做了一堆谷歌研究,但无法提出任何可以证明我的观点的东西。你们给了我足够的东西去做我需要做的事情,我很感激。

标签: php mysql sql sql-injection


【解决方案1】:

我认为没有人会认为您正在尝试破解某人 - 这是一个合理的问题。

你不能在这里运行第二个查询,但你可以做一些恶意的事情。例如,如果查询是这样的身份验证查询:

SELECT * FROM `users` WHERE `username` = '$username' AND `password` = '$password';

您可以很容易地使用' OR 1 = 1 登录并访问该网站。

此外,如果查询是 DELETE 或 UPDATE 查询,您可能会操纵它以在没有 WHERE 子句的情况下运行。

【讨论】:

  • 其实可以运行第二个查询。
  • “mysql_query() 发送一个唯一查询(不支持多个查询)”(来源:php.net/manual/en/function.mysql-query.php)。如果那是错误的,请原谅我按照 PHP 手册所说的内容进行操作。
  • 你可以使用UNION - 这是一个SQL的东西,可以让你执行多个查询。
  • 啊,我没有意识到你把它算作第二个查询。我说的是经典的 SQL 注入攻击,现在大多数库都使这种攻击变得多余了,在这种攻击中,您使用 '; DROP TABLE users; -- 登录到一个站点
【解决方案2】:

它被称为UNION,允许您使用第二个查询从额外的表中提取。

我猜像1' UNION ALL SELECT username title, password body FROM users WHERE '1'='1 这样的东西会起作用。 (从users 表中提取并将用户名和密码值映射到它们的blog“等价物”)。

【讨论】:

  • UNION 绝对有帮助。我不确定在这种情况下的构造,但我很感激朝着正确的方向轻推。
猜你喜欢
  • 2013-03-23
  • 2013-10-09
  • 2011-02-12
  • 2012-10-11
  • 1970-01-01
  • 2012-10-22
相关资源
最近更新 更多