oracle注入中可以通過頁面響應的狀態,這裡指的是響應時間,通過這種方式判斷sql是否被執行的方式,便是時間盲注;
oracle的時間盲注通常使用dbms_pipe.receive_message(),而另外一種便是decode()與高耗時sql操作的組合,當然也可以是case,if 等方式與高耗時操作的組合,這裡的高耗時操作指的是,例如:(select count(*) from all_objects),對資料庫中大量資料進行查詢或其他處理的操作,這樣的操作會耗費較多的時間,然後通過這個方式來獲取資料。這種方式也適用於其他資料庫。
0x01 dbms_pipe.receive_message()函式延時盲注
dbms_lock.sleep()函式可以讓乙個過程休眠很多秒,但使用該函式存在許多限制。
首先,不能直接將該函式注入子查詢中,因為oracle不支援堆疊查詢(stacked query)。其次,只有資料庫管理員才能使用dbms_lock包。
在oracle pl/sql中有一種更好的辦法,可以使用下面的指令以內聯方式注入延遲:
dbms_pipe.receive_message('dbms_pipe.receive_message函式將為從rds管道返回的資料等待10秒。預設情況下,允許以public許可權執行該包。dbms_lock.sleep()與之相反,它是乙個可以用在sql語句中的函式。rds', 10)
延遲盲注中的應用:
如果頁面延時10秒返回,即存在注入。
來自官網的dbms_pipe.receive_message語法:
dbms_pipe.receive_message (
pipename in varchar2,
timeout in integer default maxwait)
return integer;
可以暫時理解成dbms_pipe.receive_message('任意值',延遲時間)
decode不僅可以在布林盲注中運用,也可以用在延遲盲注中。
在decode注入裡加入延時語句。這裡加入了我們的dbms_pipe.receive_message函式。
當然,這裡延遲的操作不一定用延遲函式,也可以使用花費更多時間去查詢所有資料庫的條目。例如:
通過這種明顯時間差也能判斷注入表示式的結果。
延時盲注(一)
適用於,無法回現和無法顯示錯誤頁面的場景 我們看到介面,首先在url欄進行get傳參,但是沒有任何回顯,介面沒有變化 然後使用延時注入,這裡我們用到了資料庫裡的if語句 有點類似於三元運算,條件成立,就執行第二個,條件不成立就執行第三個。結果 12時網頁睡眠,可以判斷當前庫名有12個字元 結果 10...
滲透測試 SQL盲注基於布林的盲注
普通sql注入和sql盲注的區別 sql盲注的思路 基於時間的盲注 通過構造真or假判斷條件的sql語句,且sql語句中根據需要聯合使用sleep 函式一同向伺服器傳送請求,觀察伺服器響應結果是否會執行所設定時間的延遲響應,以此來判斷所構造條件的真or假 若執行sleep延遲,則表示當前設定的判斷條...
2020 07 13 SQL盲注 延時注入
思路 判斷是否存在注入,注入是字元型還是數字型 猜解當前資料庫名 猜解資料庫表名 猜解欄位名 猜解資料 1判斷注入型別 payload result 1 and sleep 5 延遲 1 and sleep 5 沒有延遲 存在字元型注入 2猜解當前資料庫名 2.1猜解資料庫名的長度 payload ...