在 oracle 的儲存過程中,有乙個有趣的特點:執行許可權。執行許可權分為兩種,definer 和 invoker。
definer 為函式建立者的許可權,而 invoker 則是當前呼叫函式的使用者。執行許可權在函式建立時就已經被欽定了,預設為 definer。
oracle 這樣做的初衷,實際上是為了使用者互相訪問資源時,避免使用者憑據的問題。當然也可以將函式的許可權定義為 invoker,但需要顯式設定:說白了,如果我們用低許可權使用者去執行dba許可權使用者建立的儲存過程,我們在呼叫時就可以額訪問dba資源,使用dba的許可權
create or replace function whoami return varchar2authid current_user
begin null; end;
因為具有這樣的特性,所以當儲存過程函式實現存在缺陷時,安全問題就產生了。
比如下面這裡新建乙個儲存過程
create or replace procedure sasugaoracle(msg in varchar2)asstmt varchar2(255);
begin
stmt :='
begin dbms_output.put_line(
'''|| msg ||
''') end;';
execute
immediate stmt;
end;
execute immediate 用於動態執行 sql 語句。首先使用 dba 使用者建立該過程並賦予所有人執行許可權:
grant execute on sasugaoracle to public;接著切換到普通使用者,只有 connect 和 resource 許可權,執行儲存過程:
修改一下傳入的引數,這裡我們在原命令後新增了一條新增資料庫使用者的命令,這裡新增的使用者名為latec0mer
然後我們查詢一下是否存在latec0mer這個使用者,可以看到我們上一條新增的命令是生效的。
類似的,如果 oracle 的系統函式中存在同樣的缺陷,我們便有機會對其加以利用,提公升許可權,甚至執行系統命令。
在 oracle 10g 中, get_domain_index_tables 函式存在注入漏洞,該函式位於 dbms_export_extension 包中,執行許可權隸屬於 sys。
用scott/tiger登陸oracle,scott 是oracle內建使用者,許可權較低,我們就可以利用執行具有高許可權的漏洞函式來達到提公升資料庫使用者許可權的目的。
查詢scott的當前角色
可以看到scott只有connect和resource兩個許可權較低的角色
利用漏洞執行許可權提公升
現在我們再來看看許可權
成功從普通使用者提權到dba使用者。
ps:經測試,oracle10.2.0.4以上版本沒這個安全漏洞
Oracle資料庫提權 低許可權提公升至dba
在 oracle 的儲存過程中,有乙個有趣的特點 執行許可權 執行許可權分為兩種,definer 和invoker。d efiner 為函式建立者的許可權,而 invoker 則是當前呼叫函式的使用者。執行許可權在函式建立時就已經被欽定了,預設為 definer。說白了,如果我們用低許可權使用者去執...
MySQL資料庫提權小結
這裡的前提是獲取了webshell是最為方便的,直接檢視資料庫的配置檔案即可,如 conn config data sql common inc等。上面的方法有個缺點,就是給當前 的資料庫使用者的許可權比較低 不是root許可權,不方便後面的一些操作,那麼就需要這第二種方法。安裝目錄為 data m...
滲透之 資料庫提權
啟用xp cmdshell use master exec sp configure show advanced options 1 reconfigure with override exec sp configure xp cmdshell 1 reconfigure with override...