用于枚举数据库中可用表的 SQL 注入查询

SQL injection query for enumerating available tables in databases

提问人:Robot110010 提问时间:11/29/2022 最后编辑:Robot110010 更新时间:11/29/2022 访问量:2172

问:

我们有一个练习,正在努力想出一个sql注入,以从mySQL中的数据库中查找更多数据。

以下是我们已经走了多远: mySQL网页结果

在上图中,您可以看到我们已经设法让数据库泄露了 userid、user 和 passwd 值。

为此,我们在登录框中键入了:admin' --

然后:在密码框中' union select table_name from information_schema.tables --

然而,这并不是练习的全部目标。我们必须发现可用的数据库和表。 我们不确定为什么响应没有考虑我们的查询。union select table_name from information_schema.tables

下面是一个示例,说明如果未在登录名或密码框中键入任何内容,则响应是什么: 默认 mySQL 网页

我们的任务:

  1. 枚举数据库中的可用表
  2. 查找用户 ID 为 3 的用户名(完成 - 对吗?
  3. 查找包含 MD5 哈希值的表

有人能为我们指明正确的方向吗?

为什么我们不工作?select table_name from information_schema.tables

更新:在第一个登录框中重组初始查询后,我们设法返回了 238 行:

admin’ union select table_name,2,3 from information_schema.tables -- -

修复:列的数量必须在第一个选择查询和联合选择查询之间匹配。

MySQL 数据库 安全性 SQL 注入

评论


答:

0赞 dc-ddfe 11/29/2022 #1

您可能需要将整个注入放在用户名框中。目前,登录输入之后正在注释查询的其余部分。--admin'

即登录框应包含admin' UNION SELECT table_name FROM information_schema.tables --

您可能需要从中选择填充列,因为无法判断表有多少列。information_schema.tablesusers

评论

0赞 Robot110010 11/29/2022
填充列会是什么样子?只是table_name,2,3,4......直到达到正确的数字?此外,我们将整个注入放在用户名框中,但是根本没有返回任何内容......
0赞 Robot110010 11/29/2022
我们试过了......table_name,2,3 来自...现在返回了 238 行!
0赞 dc-ddfe 11/29/2022
然后你就完成了,对吧?当然,你可以从任何表格中将我的答案扩展到你想要的任何内容,只要你以同样的方式添加填充列。UNION SELECT
0赞 Robot110010 11/29/2022
我们找到了一个名为“sql_lab_tokens”的表,因此我们进行了查询:“admin' union select column_name,2,3 from information_schema.columns where table_nam = 'sql_lab_tokens' -- -”。这为我们提供了列名称的列表。我们现在想找出其中的数据。因此,我们尝试了以下查询:“admin' union select * from sql_lab_tokens -- -”,但这不起作用。我们想知道这个sql_lab_tokens表中的数据...
0赞 dc-ddfe 11/29/2022
你走在正确的轨道上,但我不会为你做所有的功课。相反,这里有一些问题应该引导你去你需要去的地方。1. 为什么我告诉你在查询中添加填充列?2. 为什么您的注射剂仅在添加时有效?3. 这是否告诉您有关“用户”表的任何信息?4. 和 和有什么不一样?为什么第一个有效,而第二个无效?5. 如何修改第二个查询以使其正常工作?,2, 3admin' union select table_name,2,3 from information_schema.tables --admin' union select * from sql_lab_tokens