久久天天躁狠狠躁夜夜av,国产脚交足免费视频,亚洲小说乱欧美另类,五月天国产亚洲av麻豆

918搏天堂

?
產(chǎn)品咨詢(xún):4000 258 365 | 申請(qǐng)產(chǎn)品演示 | 渠道合作 | English
您當(dāng)前的位置 : 首頁(yè) > 技術(shù)博客 > 數(shù)據(jù)安全
內(nèi)容中心
按關(guān)鍵字查找
Oracle數(shù)據(jù)庫(kù)SQL注入淺析與防護(hù)建議
作者:思成 發(fā)布時(shí)間:2016-06-29

SQL注入是在信息安全領(lǐng)域一種常見(jiàn)的攻擊手段。但是大部分人理解的SQL注入就是通過(guò)把SQL命令插入到Web表單提交或在輸入域名、頁(yè)面請(qǐng)求時(shí) 加入的查詢(xún)字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行偏離預(yù)期的SQL命令。這種情況下的SQL注入,引發(fā)原因基本是網(wǎng)頁(yè)對(duì)用戶(hù)輸入的信息缺乏校驗(yàn)而導(dǎo)致。

很多人認(rèn)為只有網(wǎng)頁(yè)才可以進(jìn)行 SQL 注入,才有注入點(diǎn)。這是一個(gè)普遍對(duì)SQL 注入的錯(cuò)誤認(rèn)識(shí)。SQL注入嚴(yán)格來(lái)講應(yīng)該叫做數(shù)據(jù)庫(kù)SQL注入。SQL注入的最終目的是獲取數(shù)據(jù)庫(kù)中存儲(chǔ)的敏感信息。事實(shí)上,任何可以連接到數(shù)據(jù)庫(kù)并進(jìn)行 SQL 操作的程序都可以實(shí)施數(shù)據(jù)庫(kù)SQL注入,比如數(shù)據(jù)庫(kù)客戶(hù)端、網(wǎng)頁(yè)、帶有數(shù)據(jù)庫(kù)操作的程序客戶(hù)端。在這三種程序中,網(wǎng)頁(yè)注入最為常見(jiàn),這和網(wǎng)頁(yè)的開(kāi)發(fā)途徑相 對(duì)多元化、某些網(wǎng)頁(yè)開(kāi)發(fā)人員安全經(jīng)驗(yàn)低、網(wǎng)頁(yè)使用量大等相關(guān)。

網(wǎng)頁(yè)的SQL注入主要是通過(guò)改變網(wǎng)頁(yè)發(fā)給后臺(tái)數(shù)據(jù)庫(kù)的SQL查詢(xún)邏輯,查詢(xún)一些敏感信息。但往往網(wǎng)頁(yè)鏈接數(shù)據(jù)庫(kù)所用的用戶(hù)權(quán)限較低,并沒(méi)有查詢(xún)數(shù)據(jù) 庫(kù)中的敏感信息的權(quán)限,只能獲取和網(wǎng)站相關(guān)的信息。攻擊者想要獲取目標(biāo)數(shù)據(jù)庫(kù)中的敏感信息就要想辦法利用數(shù)據(jù)庫(kù)自身的SQL注入漏洞對(duì)網(wǎng)站所用的低權(quán)限用 戶(hù)進(jìn)行提權(quán)操作(低權(quán)限是針對(duì)數(shù)據(jù)庫(kù)權(quán)限來(lái)說(shuō)的)。攻擊者拿到數(shù)據(jù)庫(kù)DBA權(quán)限后可以對(duì)數(shù)據(jù)庫(kù)中的敏感信息肆意獲取,給數(shù)戶(hù)帶來(lái)不可預(yù)知經(jīng)濟(jì)以及名譽(yù)上的 損失。

網(wǎng)站漏洞給攻擊者入侵的機(jī)會(huì),而數(shù)據(jù)庫(kù)漏洞則會(huì)真真切切的威脅您的數(shù)據(jù)安全。918搏天堂攻防實(shí)驗(yàn)室綜合多年的數(shù)據(jù)庫(kù)攻防經(jīng)驗(yàn)與積累將在下文中以目前市場(chǎng)份額最大的Oracle數(shù)據(jù)庫(kù)為例介紹Oracle存在的SQL注入威脅和一些防護(hù)建議。

Oracle數(shù)據(jù)庫(kù)SQL注入漏洞集中存在于PL/SQL編寫(xiě)的函數(shù)、存儲(chǔ)過(guò)程、包、觸發(fā)器中。Oracle存在SQL注入漏洞的一個(gè)重要原因是 PL/SQL定義的兩種調(diào)用權(quán)限導(dǎo)致(定義者權(quán)限和調(diào)用者權(quán)限)。定義者權(quán)限給了低權(quán)限用戶(hù)在特定時(shí)期擁有高權(quán)限的可能,這就給提權(quán)操作奠定了基礎(chǔ)。調(diào)用 者權(quán)限給了低權(quán)限用戶(hù)創(chuàng)建的SQL被高權(quán)限執(zhí)行的可能。Oracle的SQL注入漏洞往往就是基于這兩種權(quán)限而被攻擊者所利用。

利用Oracle的SQL注入漏洞一般只進(jìn)行兩類(lèi)操作一類(lèi)是越權(quán)操作,一類(lèi)是提權(quán)操縱。提權(quán)操作是越權(quán)操作中的一種,由于可利用漏洞自身的限制,某 些漏洞只支持越權(quán)操作。Oracle經(jīng)典的提權(quán)操作命令是GRANT DBA TO USER(給USER用戶(hù)DBA權(quán)限)。越權(quán)操作的經(jīng)典命令是select password from sys.user$ where name = 'SYS';(查詢(xún)DBA用戶(hù)的密碼哈希散列)獲得散列后可以通過(guò)orabf等軟件離線(xiàn)破解出散列對(duì)應(yīng)密碼明文。

攻擊者在Oracle注入點(diǎn)采用何種注入方式和獲取的數(shù)據(jù)庫(kù)賬號(hào)具備的權(quán)限有直接關(guān)系。大體在SQL注入上數(shù)據(jù)庫(kù)賬號(hào)可以被分為三類(lèi):

1.被獲取賬號(hào)具有較高數(shù)據(jù)庫(kù)權(quán)限

2.被獲取賬號(hào)具有創(chuàng)建函數(shù)或存儲(chǔ)過(guò)程的權(quán)限

3.被獲取賬號(hào)只具有連接權(quán)限(最低權(quán)限的賬號(hào))

細(xì)分如下圖所示:

對(duì)于第一種情況,多指入侵的攻擊者具備 CREATE ANY TRIGGER權(quán)限或CREATE ANY VIEW權(quán)限甚至EXECUTE ANT PROCEDURE權(quán)限等較高權(quán)限。攻擊者如果具備EXECUTE ANT PROCEDURE權(quán)限,則可以直接執(zhí)行許多SYS用戶(hù)以定義者模式創(chuàng)建的函數(shù)或存儲(chǔ)過(guò)程。只要利用SYS用戶(hù)創(chuàng)建的存儲(chǔ)過(guò)程執(zhí)行GRANT DBA TO USER則就完成了提權(quán)到DBA的過(guò)程。

例如:CALL SYS.INITJVMAUX.EXEC(‘GRANT DBA TO USER’,TRUE);

攻擊者具有CREATE ANY TRIGGER權(quán)限的賬號(hào),也很容易提升到DBA。主要是因?yàn)榫哂蠧REATE ANY TRIGGER權(quán)限可以創(chuàng)建任意架構(gòu)(schema)的觸發(fā)器,包括 SYS。唯一的限制就是攻擊者不能對(duì) SYS 用戶(hù)所擁有的對(duì)象創(chuàng)建觸發(fā)器。這種情況下攻擊者提權(quán)具體步驟可以分為以下三步:

1.發(fā)現(xiàn)階段,攻擊者要確定數(shù)據(jù)庫(kù)中的 DBA 用戶(hù)(Oracle并非只有一個(gè)DBA賬號(hào),例如SYSTEM也是個(gè)DBA),并且確定哪些表或視圖攻擊者擁有 INSERT,UPDATE,或 DELETE 權(quán)限(屬于public)。

2.構(gòu)造階段,攻擊者構(gòu)造一個(gè)調(diào)用者權(quán)限的含有提全語(yǔ)句的存儲(chǔ)過(guò)程,想辦法讓觸發(fā)器調(diào)用存儲(chǔ)過(guò)程。

3.實(shí)施階段,攻擊者針對(duì)目標(biāo)DBA用戶(hù)創(chuàng)建觸發(fā)器,觸發(fā)這個(gè)事件。觸發(fā)器將以擁有者的權(quán)限執(zhí)行,讓觸發(fā)器使用一個(gè)調(diào)用者權(quán)限的存儲(chǔ)過(guò)程。執(zhí)行存儲(chǔ)過(guò)程中的提權(quán)語(yǔ)句。

攻擊者具有CREATE ANY VIEW權(quán)限的賬號(hào),提升到DBA也不難。方法類(lèi)似CREATE ANY TRIGGER。攻擊者只要以數(shù)據(jù)庫(kù)管理員的模式創(chuàng)建一個(gè)視圖,然后讓一個(gè)具有高權(quán)限的用戶(hù)訪(fǎng)問(wèn)這個(gè)視圖就可以達(dá)到提權(quán)的目的。

高權(quán)限用戶(hù)提權(quán)的方式往往不被漏洞所限制,所以用戶(hù)一定注意WEB訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的賬號(hào)權(quán)限,過(guò)高的權(quán)限會(huì)給你的數(shù)據(jù)庫(kù)安全帶來(lái)極大隱患。Oracle 中,一個(gè)擁有CREATE ANY XXX權(quán)限的用戶(hù)很可能可以獲取數(shù)據(jù)庫(kù)DBA權(quán)限,所以除非業(yè)務(wù)必須否則絕不授予頁(yè)面鏈接數(shù)據(jù)庫(kù)用戶(hù)CREATE ANY XXX權(quán)限。

對(duì)于第二種情況,多指攻擊者具備的賬號(hào)具有創(chuàng)建存儲(chǔ)過(guò)程、函數(shù)等權(quán)限,那么攻擊者可以通過(guò)構(gòu)造執(zhí)行提權(quán)命令的具有調(diào)用者權(quán)限的存儲(chǔ)過(guò)程或函數(shù),并通過(guò)具有 SYS(或其他高權(quán)限用戶(hù))定義者權(quán)限的存儲(chǔ)過(guò)程或函數(shù)來(lái)調(diào)用它,從而實(shí)現(xiàn)提權(quán)。

攻擊者具有創(chuàng)建函數(shù)(create functions)的權(quán)限,那么等同于他們可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行任意操作。攻擊者可以將他們希望執(zhí)行的 PL/SQL 代碼寫(xiě)入他們創(chuàng)建的自定義函數(shù)(例如在自定義函數(shù)中加入GRANT DBA TO USER),并將該函數(shù)放入 SQL 語(yǔ)句。攻擊者只需要將他們創(chuàng)造的函數(shù)設(shè)置為調(diào)用者權(quán)限(AUTHID CURRENT_USER),這樣當(dāng)高權(quán)限用戶(hù)所定義的存儲(chǔ)過(guò)程或函數(shù)調(diào)用攻擊者創(chuàng)建的函數(shù)時(shí),真正執(zhí)行攻擊者所創(chuàng)建的函數(shù)的人將是高權(quán)限用戶(hù)。同時(shí)攻擊 者定義的函數(shù)必須使用AUTONOMOUS+TRANSACTION 的編譯指示。這個(gè)編譯可以向編譯器表明,該函數(shù)將執(zhí)行它子程序內(nèi)部的事件,而與調(diào)用它的存儲(chǔ)過(guò)程或函數(shù)無(wú)關(guān)。最后只要在數(shù)據(jù)庫(kù)中尋找一個(gè)具有PUBLIC 執(zhí)行權(quán)限的高權(quán)限存儲(chǔ)過(guò)程或函數(shù)即可。

對(duì)于第三種權(quán)限,同時(shí)也是最為普遍的情況,即當(dāng)前數(shù)據(jù)庫(kù)用戶(hù)只具有較低的權(quán)限,并且不具備創(chuàng)建用戶(hù)自定義存儲(chǔ)過(guò)程或函數(shù)的權(quán)限。在該情況下,攻擊者主要有三種手段:

1.注入匿名PL/SQL塊

2.光標(biāo) snarf 攻擊

3.利用DBMS_JVM_EXP_PERMS邏輯漏洞,獲取JAVA執(zhí)行權(quán)限,進(jìn)而控制整個(gè)數(shù)據(jù)庫(kù)或整個(gè)系統(tǒng)

第一種手段攻擊者雖然不能創(chuàng)建存儲(chǔ)過(guò)程或函數(shù),只能被限制執(zhí)行SELECT或DML操作但攻擊者可以注入執(zhí)行匿名塊的存儲(chǔ)過(guò)程或函數(shù)來(lái)達(dá)到提權(quán)的目 的。匿名塊是特殊的存儲(chǔ)過(guò)程,存在內(nèi)存中,只能被調(diào)用一次。攻擊者可以透過(guò)這種手法繞過(guò)普通存儲(chǔ)過(guò)程的限制,可執(zhí)行 SELECT、DML、DDL等。攻擊者需要的就是找到存在可以接納異常輸入的且不校驗(yàn)用戶(hù)輸入的系統(tǒng)函數(shù)。

可能存在漏洞的函數(shù)基本具備以下4點(diǎn)特征:安全人員可以對(duì)具備以下特點(diǎn)的函數(shù)做一些調(diào)整(例如關(guān)閉public權(quán)限,防止低權(quán)限用戶(hù)調(diào)用)

1)問(wèn)題函數(shù)中存在通過(guò)字符串連接符(||)連接函數(shù),從而使注入可能正確實(shí)現(xiàn)。

2)問(wèn)題函數(shù)中不能包含 OUT 參數(shù),因?yàn)樽⑷脒^(guò)程無(wú)法提供 OUT 類(lèi)型參數(shù)。

3)問(wèn)題函數(shù)中必須要返回一個(gè)簡(jiǎn)單數(shù)據(jù)類(lèi)型,復(fù)雜的數(shù)據(jù)類(lèi)型可能會(huì)導(dǎo)致錯(cuò)誤,因?yàn)閺?fù)雜的數(shù)據(jù)類(lèi)型在字符串拼接過(guò)程中不能被自動(dòng)轉(zhuǎn)換成一個(gè)簡(jiǎn)單的數(shù)據(jù)類(lèi)型。

4)問(wèn)題函數(shù)中必須要提供一種機(jī)制,使得攻擊者可以執(zhí)行一定長(zhǎng)度的 PL/SQL 語(yǔ)句。

第二種手段是David Litchfield提出的通過(guò)snarf入侵Oracle.主要出現(xiàn)在如果高權(quán)限用戶(hù)未正;蛑鲃(dòng)關(guān)閉顯式游標(biāo),會(huì)導(dǎo)致安全隱患。高權(quán)限用戶(hù)創(chuàng)建的游標(biāo) 滯留在數(shù)據(jù)庫(kù)內(nèi)存中,低權(quán)限用戶(hù)可以利用滯留的游標(biāo)對(duì)Oracle發(fā)動(dòng)攻擊。最常見(jiàn)的方式是攻擊者用loop循環(huán)猜測(cè)出懸掛游標(biāo)。定位到懸掛游標(biāo)后,回收 它并重新綁上高權(quán)限用戶(hù),然后執(zhí)行查詢(xún),可以越權(quán)獲得高權(quán)限用戶(hù)才可訪(fǎng)問(wèn)的敏感信息。

第三種手段是利用Oracle支持的JAVA。問(wèn)題根源在于Oracle默認(rèn)把DBMS_JVM_EXP_PERMS、DBMS_JAVA以及 DBMS_JAVA_TEST等危險(xiǎn)package的執(zhí)行權(quán)限直接授予了PUBLIC,導(dǎo)致任意用戶(hù)都可以執(zhí)行JAVA程序,進(jìn)而控制整個(gè)數(shù)據(jù)庫(kù)乃至整個(gè) 操作系統(tǒng)。這種類(lèi)似問(wèn)題不單出現(xiàn)在Oracle的JAVA服務(wù)中,在ORACLE 的其他服務(wù)中也存在類(lèi)似漏洞。 如果業(yè)務(wù)不需要使用JAVA服務(wù)建議直接刪除即可。關(guān)閉無(wú)用服務(wù)是一種杜絕漏洞的好辦法。

無(wú)論是網(wǎng)站還是信息系統(tǒng)應(yīng)用層都需要防SQL注入,與此同時(shí)數(shù)據(jù)庫(kù)更需要防SQL注入,數(shù)據(jù)的安全和數(shù)據(jù)庫(kù)的安全息息相關(guān)。面對(duì)數(shù)據(jù)庫(kù)SQL注入的威脅,918搏天堂數(shù)據(jù)庫(kù)攻防實(shí)驗(yàn)室專(zhuān)家給出以下三點(diǎn)防護(hù)建議:

首先數(shù)據(jù)庫(kù)DBA限制住賬號(hào)權(quán)限是最關(guān)鍵的防范措施。攻擊者獲取不同級(jí)別的賬號(hào)進(jìn)行后續(xù)的注入遇到的難度也不相同。賬號(hào)權(quán)限越低攻擊者越難利用其獲取數(shù)據(jù)庫(kù)中的敏感信息;

其次刪除不用的Oracle默認(rèn)服務(wù)有助于減少能被攻擊者利用漏洞數(shù)量。

最后定期對(duì)數(shù)據(jù)庫(kù)進(jìn)行升級(jí)也是非常必要的。定期升級(jí)有助于修復(fù)漏洞,減少漏洞數(shù)量。由于受穩(wěn)定性限制等原因約束無(wú)法及時(shí)升級(jí)的數(shù)據(jù)庫(kù)也應(yīng)該在數(shù)據(jù)庫(kù)和應(yīng)用之間架設(shè)具有VPATCH(虛擬補(bǔ)。┕δ艿臄(shù)據(jù)庫(kù)防火墻。同時(shí)對(duì)敏感數(shù)據(jù)加密也是一種強(qiáng)化數(shù)據(jù)安全的有效手段。


?
918搏天堂 ©2021 版權(quán)所有 京ICP備10053980號(hào)-1