【问题标题】:SQL Server vs MySQL - SQL Injection Vulnerabilities in Classic ASPSQL Server vs MySQL - 经典 ASP 中的 SQL 注入漏洞
【发布时间】:2009-09-01 00:01:17
【问题描述】:

最近,由于未能清理提供给页面的查询字符串参数,我们客户的一个网站成为 SQL 注入攻击的牺牲品。易受攻击的代码已被识别并正在被纠正,但它让我想知道 MySQL 和 SQL Server 如何处理多查询字符串之间的一些差异。

易受攻击的代码在几十个网站上使用,其中两个在 SQL Server 上运行,其余在 MySQL 上。有了这段代码,我们以前从未遭受过注入攻击(上帝的恩典),但是一旦我们发布了在 SQL Server 上运行的两个网站(具有相同的代码库),该网站很快就被利用了。注入的方法很简单:

page.asp?param=1;delete from [some_table];

就像我说的,易受攻击的代码在许多网站上共享,但是如果我尝试在我们的 MySQL 网站上执行相同类型的注入,ASP 会抛出一个不错的服务器错误,让我们知道查询中存在错误:

SELECT * FROM Table1 WHERE ID = 1;DELETE FROM TABLE1;

进一步测试我能够验证 MySQL ODBC 3.51 驱动程序不允许在 ADODB.Connection 对象调用 Execute("") 时在同一语句中执行两个 SQL 查询,而 SQL Server Native Client (10.1 ) 运行两个并排查询没有任何问题。这实际上只是提供程序的一种配置,它使 SQL 服务器以这种方式易受攻击,而 MySQL 没有,还是源于其他地方?

【问题讨论】:

标签: mysql sql-server asp-classic sql-injection security


【解决方案1】:

默认情况下,MySQL 客户端 API 不允许多查询。您必须明确启用此功能,否则在尝试执行如您所见的查询时会出错。这对于降低 SQL 注入攻击的风险是一件好事。

MySQL ODBC 驱动程序 3.51.18(2007 年 8 月)增加了对连接选项 FLAG_MULTI_STATEMENTS 的支持以启用多语句。见http://dev.mysql.com/doc/refman/5.1/en/connector-odbc-configuration-connection-parameters.html。

另请参阅 http://bugs.mysql.com/bug.php?id=7445 了解此选项的历史。

另请参阅我对“Mysql change delimiter for better SQL INJECTION handling?”的回答。请注意,多语句只是获取 SQL 注入漏洞的一种方法。禁用多语句并不能 100% 证明这些缺陷。

【讨论】:

    【解决方案2】:

    支持一行多条语句是SQL server 的一个特点。解决方案与其说是清理输入,不如说是使用参数化查询或存储过程。如果查询是

    SELECT * FROM Table1 WHERE ID = @id
    

    然后传递“1;DELETE FROM TABLE1;”会产生错误,因为这不是有效的整数值。

    【讨论】:

    • 或使用 cInt() 或 cLng() 进行投射
    【解决方案3】:

    我认为这是因为 SQL Server 支持 MARS。据我了解 MySQL 不支持这一点。 Mars 是加速数据库查询的一个很好的特性,因此往返次数更少。您可以在 sql 语句中放置多个查询。

    【讨论】:

      【解决方案4】:

      可以在不堆叠查询的情况下利用 SQL 注入。一种非常常见的方法是使用“Union Select” 这是我编写的一个使用联合选择的mysql注入漏洞: http://milw0rm.com/exploits/3002 联合选择允许您在其他语句中创建选择语句: select 1 union select Password from mysql.user

      您还可以进行子选择: 插入一些表 (some,col,id) 值 ((select Password from mysql.user),1,1)-- )

      盲注 sql 注入适用于所有平台,但是根据数据库的不同,漏洞利用会有所不同。这是一个针对 mysql 的盲 SQL 注入漏洞利用:" milw0rm.com/exploits/4547

      这是一篇关于 MySQL 的 SQL 注入主题的非常好的论文: www.ngssoftware.com/papers/HackproofingMySQL.pdf

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-05
        • 2010-09-14
        • 2020-08-21
        • 2019-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-02
        相关资源
        最近更新 更多