【问题标题】:could someone explain this MySQL db Python injection query [closed]有人可以解释这个 MySQL db Python 注入查询 [关闭]
【发布时间】:2020-11-28 07:01:27
【问题描述】:

谁能解释一下这个 sql 注入查询是如何工作的

"Arizona'; TRUNCATE TABLE states ; SELECT * FROM states WHERE name = '"

【问题讨论】:

  • 它不会删除数据库。它会截断一张表。

标签: python mysql mysql-python code-injection


【解决方案1】:

它不会删除数据库,但会清空表states。在您的代码中,如果您采用未经处理的输入并将其附加到查询中,那么此输入会将您的 SQL 语句转换为批处理。 Arizona 之后的'; 将结束第一个语句。接下来,执行TRUNCATE TABLE states; 语句,清除states 中的所有数据。最后,最后一条语句像这样SELECT * FROM states WHERE name = '' 执行。您的代码提供了最终的 ',因此 SQL 批处理不会失败。

【讨论】:

  • 是的,但为什么我们要在 Arizona 之后添加 '?我们不能只用一个分号结束第一个语句吗?
  • 不,因为代码中的语句看起来像这样(不确定您使用的是什么语言,为简单起见,我将使用 VB):sql = "SELECT * FROM states WHERE name='" & form_input_data & "'" 所以您需要第一个 ' 或否则 SQL Server 会产生错误,并且不会执行注入。
  • 请回答最后一个问题:“Arizona' 我们为什么要使用”,然后是 '?它不会像“Arizona”或“Arizona”这样吗?
  • 你说得对,应该是“亚利桑那州”。我认为注入脚本周围的双引号只是表明它们之间的所有内容都是传递给应用程序的字符串。它们不会作为代码的一部分被执行;一旦将字符串分配给字符串变量,它们甚至根本不会出现。
【解决方案2】:

我认为它只是截断表擦除数据并重新启动自动增量索引

【讨论】:

    猜你喜欢
    • 2012-04-19
    • 2013-02-27
    • 1970-01-01
    • 2013-07-15
    • 2021-09-02
    • 2011-07-14
    • 2022-10-07
    • 2015-10-28
    • 2014-05-18
    相关资源
    最近更新 更多