標籤:不能 其他 形式 use 圖片 頁面 彙總 表名 原因
第五關:這關的重點是有聯集查詢的注入漏洞,但是頁面不會顯示查詢資訊,但是會有報錯資訊顯示在頁面上
這關是雙查詢注入,其實用報錯注入和盲注都是可以注入的,但是我覺得這個雙查詢注入還是很有意思的,所以這關我們還是用雙查詢注入
的流程來走。
https://www.2cto.com/article/201303/192718.html
這裡有篇文章講的很不錯了,我就不複述他的話了,裡面有一句很重要:簡單的一句話原理就是有研究人員發現,當在一個彙總函式,比如count函數後面如果使用分組語句就會把查詢的一部分以錯誤的形式顯示出來。
第一步:依然是使用order by判斷表的列數
第二部:輸入
id=1‘%20union%20select%20count(*),concat((select%20user()),floor(rand()*2))%20as%20a,count(*)%20from%20information_schema.schemata%20group%20by%20a%23
比較長,不急,慢慢解釋:主體依然是id=1‘ union select 1,2,3 from information_schema.schemata #
只不過這裡講1,2,3分別替換成了彙總函式,然後再後面加了個group by ,至於原因就是我們上面所提到的很重要的一句話(簡單的一句話原理就是有研究人員發現,當在一個彙總函式,比如count函數後面如果使用分組語句就會把查詢的一部分以錯誤的形式顯示出來。)
這裡的a是我們給concat((select%20user()),floor(rand()*2))起的一個別名(利用as)
rand()取0到1的隨機值,floor()取整 ,這樣的話使用concat將子查詢(select user())的結果與0或1進行拼湊,組成xxx0或xxx1,所以結果是變化的。至於這樣做的原因是為了讓後面可以進行分組(也就是可以使用group by)。
現在知道整句話的意思後就可以進行後面的操作了,只需要將子查詢換成其他的查詢操作。
第三步:查詢出所有的資料庫名
http://localhost/sqli-labs-master/Less-5/
?id=1‘%20union%20select%20count(*),concat((select%20schema_name%20from%20information_schema.schemata%20limit%201,1),floor(rand()*2))%20as%20a,count(*)%20from%20information_schema.schemata%20group%20by%20a%23
值得注意的是,子查詢中不能使用group_concat了,不然就不會報錯了,只能使用limit 來一行一行的查詢
後面的查詢表名,欄位名以及資料內容的步驟我就不進行了,和前面幾關一樣
第六關:
和第五關是一樣的,只不過將單引號換成了雙引號
sqli-labs(三)