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