SQL注入 order by後的注入(Less-46)

常見注入雖然都是在用戶id,帳號密碼等地方進行注入,但有時也可能出現注入點在order by語句之後,如下圖所示:


由於order by往往是放在語句的最後,後面能輸入的內容十分有限,所以此時我們就不能用原先那樣傳統的方式進行注入了,但只要稍微改變一下結構還是可以進行注入的。不過在此之前我們需要學會判斷其是否在order by後面,方法很簡單,在參數後面加個asc(結果升序顯示)、desc(結果降序顯示)來觀察其順序是否改變就行了,如圖(這裏傳入參數不是id,是sort)。


(升序)

(降序)

此時說明其爲order by後的注入,接下來我們判斷order by後面接的參數有沒有影響,嘗試注入:left(version(),1)和right(version(),1),發現結果沒影響,說明後面參數隨意,則此時我們可以進行注入,有以下三種注入方式:
① 直接在sort的參數裏注入,如:sort=(select username from users limit 0,1)--+,此時將會顯示當前表的內容,如圖。

這裏要注意不論我們注入任何查詢,結果能顯示的基本都是有限的,我們無法查詢到我們查詢的信息,例如這裏我們注入:sort=(select group_concat(email_id) from emails)--+,結果依舊是隻能看當前表的內容。

所以這裏就是相當於一種只有通過盲注才能獲取到信息的狀態,於是對於這種order by後的注入我們一般使用盲注,這裏我們使用報錯注入(當然其他盲注也都可以嘗試):sort= (updatexml (1, concat (0x7e,(select database()),0x7e),1))--+,如圖發現成功報錯:。

② 使用一些函數,如rand()等,例如:sort=rand(updatexml(1,concat(0x7e,(select database()),0x7e),1))--+,結果一樣,就不贅述了。
③ 在後面加and,再加入其他語句,例如:sort=1 and updatexml (1,concat (0x7e, (select database()),0x7e),1)--+,結果也一樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章