天天看點

Oracle注入總結

oracle inject總結擷取常見資訊語句

擷取資料庫版本:

擷取作業系統版本:

擷取目前資料庫使用者:

擷取目前使用者權限:

擷取所有資料庫使用者密碼:

擷取db檔案路徑:

檢視目前使用者權限

伺服器監聽ip

擷取目前的作業系統

擷取伺服器sid

union injection

//基本都是大寫哈 判斷字段

爆表

爆字段

爆資料

通過字段名查找對應的表:

bool blind injection

decode(條件,值 1,翻譯值 1,值 2,翻譯值 2,...值 n,翻譯值 n,預設值) 【功能】根據條件傳回相應值

測試目前使用者

如果是system使用者則傳回1,不是則傳回0.

注入時decode的應用

判斷是否是system使用者

也可以decode+substr組合

其實和上面的decode差不多

實際應用

instr函數的使用,從一個字元串中查找指定子串的位置

當然也可以配合其他的來使用

time blind injection

oracle的時間盲注通常使用dbms_pipe.receive_message(),而另外一種便是decode()與高耗時sql操作的組合,當然也可以是case,if 等方式與高耗時操作的組合,這裡的高耗時操作指的是,例如:(select count(*) from all_objects),對資料庫中大量資料進行查詢或其他處理的操作,這樣的操作會耗費較多的時間,然後通過這個方式來擷取資料。這種方式也适用于其他資料庫。

dbms_lock.sleep()函數可以讓一個過程休眠很多秒,但使用該函數存在許多限制。

首先,不能直接将該函數注入子查詢中,因為oracle不支援堆疊查詢(stacked query)。其次,隻有資料庫管理者才能使用dbms_lock包。

這裡講解一下orcle包的概念

oracle包可以分為兩部分,一部分是包的規範,相對于java中的接口,另一部分是包體,相當于java裡面接口的實作類,實作具體的操作,是以oracle提供了我們雨多的包,為開發者提供了很多便利。

在oracle pl/sql中有一種更好的辦法,可以使用下面的指令以内聯方式注入延遲:

dbms_pipe.receive_message函數将為從rds管道傳回的資料等待10秒。預設情況下,允許以public權限執行該包。dbms_lock.sleep()與之相反,它是一個可以用在sql語句中的函數。

應用:

Oracle注入總結

實際應用[結合sqlmap語句分析]

【dbms_pipe.receive_message的了解】

來自官網的dbms_pipe.receive_message文法: dbms_pipe.receive_message ( pipename in varchar2, timeout in integer default maxwait) return integer; 可以暫時了解成dbms_pipe.receive_message('任意值',延遲時間)

(select count(*) from all_objects) 會花費更多是時間去查詢所有資料庫的條目,是以以這種方式進行時間判斷依據,這是一個騷氣的方式。(類比owasp測試指南中老hu機的案例)

error injection

使用報錯注入需要使用類似 1=[報錯語句],1>[報錯語句],使用比較運算符,這樣的方式進行報錯注入

ctxsys.drithsx.sn()函數:

Oracle注入總結

ctxsys.ctx_report.token_type()函數:

xmltype()函數:

dbms_xdb_version.checkin()函數:

dbms_xdb_version.makeversioned()函數:

dbms_xdb_version.uncheckout()函數:

dbms_utility.sqlid_to_sqlhash()函數:

ordsys.ord_dicom.getmappingxpath()函數:

utl_inaddr.get_host_name()函數:

utl_inaddr.get_host_address()函數:

帶外通道(oob:out of band channels)

使用一些除正常通道以外的替代的信道來請求伺服器資源,一般使用 oracle 發送http或者dns請求,将查詢結果帶到請求中,然後監測外網伺服器的http和dns日志,從日志中擷取 sql 語句查詢的結果,通過這種方式将繁瑣的盲注轉換成可以直接簡便的擷取查詢結果的方式,尤其是基于時間的盲注,能極大地加快速度

utl_http.request()函數

檢測是否支援utl_http.request

反彈注入資訊

Oracle注入總結

utl_inaddr.get_host_address()函數

sys.dbms_ldap.init()函數

httpuritype()函數

執行系統指令

自己注意觀察回顯點就行 以及執行的指令 需要稍微改一下 比如第一個union及其字段。還有必須要有權限一般是dba才可以。

Oracle注入總結