平時遇到oracle注入的狀況不是不少,今天遇到一處oracle注入的延時型注入,簡單記錄一下。html
測試和漏洞挖掘中,經過頁面響應時間狀態,經過這種方式判斷SQL是否被執行的方式,即是延時性注入,oracle延時性注入和其餘的數據庫不一樣,oracle的時間盲注一般使用DBMS_PIPE.RECEIVE_MESSAGE(),也是經過sqlmap和網上師傅們的文章才知道的,當去手注的時候大腦一片空白,網上的資料也不是不少。sql
首先看一下官網對DBMS_PIPE.RECEIVE_MESSAGE()函數的介紹數據庫
即DBMS_PIPE.RECEIVE_MESSAGE(‘值’,延時時間),因此能夠嘗試以下:oracle
從上已經能夠看出是oracle延時性注入無疑了,根據sqlmap的結果,咱們能夠這樣獲取數據,以查詢user爲例:函數
由上可知user的第一位爲「A」,其餘的數據亦是不斷盲注出來,最後結果爲"ADMIN",不過網上師傅們還提出了另一種方法,就是使用decode()或者使用decode()和DBMS_PIPE.RECEIVE_MESSAGE結合的方式進行延時性盲注,decode()的結構以下:測試
decode(條件,值1,返回值1,值2,返回值2,...,缺省值)
便可以判斷數據後是否成立,成立則執行延時,即:3d
select decode(substr(user,1,1),'A',DBMS_PIPE.RECEIVE_MESSAGE('a',5) ,0) from dual
即user的第一位是"A"時,延時5秒執行。code
第二位是"D"時,延時5秒:htm
其餘數據原理相同。blog
over~