Oracle Web Hacking 基本思路的描述
以下的文章能主要是對Oracle Web Hacking 基本思路的描述,如果你是Oracle Web Hacking 基本思路方面的新手,你就可以通過以下的文章對Oracle Web Hacking 基本思路有一個更好的了解,以下就是文章的詳細(xì)內(nèi)容的介紹。
下面說說如何確定目標(biāo),注射參數(shù)的確定就由大家自己來了,主要是如何判斷數(shù)據(jù)庫屬于Oracle,根據(jù)數(shù)據(jù)庫的特性很容易判斷出來,Oracle支持--類型注釋,但是不支持; 分隔執(zhí)行多語句,Oracle有很多系統(tǒng)表,譬如all_tables,通過對這些表的訪問也可以判斷出是否屬于Oracle。
另外在Oracle里的一些函數(shù)也可以用來判斷,譬如utl_http.request這些,語言上的小細(xì)節(jié)也可以用來區(qū)分系統(tǒng),譬如在Oracle里||是連接符號,但是在其他數(shù)據(jù)庫里就不是了,所以 and chr(123)||chr(123)=chr(123)||chr(123)這樣的,如果可以順利執(zhí)行,那么就基本應(yīng)該是Oracle了,另外,一些腳本在出現(xiàn)數(shù)據(jù)庫查詢錯誤時,對錯誤信息沒有處理,也會泄露真實(shí)的后臺數(shù)據(jù)庫,這個可以很明顯地看出來。
然后需要確定的是注射點(diǎn)的類型,一般的情況下,我們進(jìn)入的參數(shù)不是數(shù)字類型就基本是字符類型(其他很多人所說的搜索型注射其實(shí)還是應(yīng)該歸結(jié)于字符類型的),對于數(shù)字類型的基本不用考慮什么,很容易添加--注釋字符就可以讓語句正確閉合了,如果是字符類型的就要考慮如何讓整個語句正確,通常是添加'以及--這些注射字符來構(gòu)造自己的注射環(huán)境。
在一些復(fù)雜的情況下,如同一個參數(shù)在多個sql語句和邏輯里出現(xiàn),就要自己小心構(gòu)造出符合環(huán)境的注射語句了,記住,我們只需要一個能便利插入自己sql命令的完好環(huán)境:)
在確定目標(biāo)數(shù)據(jù)庫為OracleWeb Hacking 基本思路并且可以注射的時候,就可以開始嘗試構(gòu)造語句了。一般首先要進(jìn)行的是判斷當(dāng)前的權(quán)限,在Oracle數(shù)據(jù)庫里權(quán)限比較高的是DBA權(quán)限,擁有Oracle數(shù)據(jù)庫的所有權(quán)限,另外如果當(dāng)前用戶的權(quán)限授予不對的話,也可以實(shí)現(xiàn)跨庫查詢的效果,可以通過對dba_tables這樣的dba的表進(jìn)行嘗試訪問來是否是dba。
在一般的注射中,分為select類型注射,insert類型注射以及update類型等。update和insert類型的注射可以根據(jù)上下文來更改數(shù)據(jù)庫中的數(shù)據(jù),如利用update注射將表中某個重要字段更改成我們想要的值,即使這些數(shù)據(jù)庫無關(guān)緊要也沒關(guān)系,我們可以利用select子語句來將我們需要的數(shù)據(jù)查詢出來然后在另外某個地方將這個數(shù)據(jù)讀出來,只要遵循數(shù)據(jù)庫的語法,實(shí)現(xiàn)自己的目的就可以了。
在這里主要說下select類型的注射,如果我們能控制select語句的一部分的話,就可能實(shí)現(xiàn)這種類型注射,如果查詢的結(jié)果可以返回到頁面中的時候,還可以嘗試使用union查詢出結(jié)果,直接將內(nèi)容顯示在頁面當(dāng)中,這是最方便的一種。事實(shí)上后面可以看到,無論是什么注射,在Oracle的web環(huán)境下,都可以直接執(zhí)行系統(tǒng)命令返回shell。
Oracle中獲得敏感數(shù)據(jù),首先就是Oracle有系統(tǒng)表,任何有權(quán)限獲得數(shù)據(jù)都可以從這里獲得,關(guān)鍵的系統(tǒng)表有all_tables,all_objects等,都是有權(quán)限能訪問的,包括別人賦予你權(quán)限的,所以如果你的權(quán)限是dba的話,這能看到系統(tǒng)中所有的表,注射中一個技巧就是如果你需要從后臺登陸但是不知道密碼就可以在這里使用了,譬如猜測列名含不含有password等方法,后面的例子中也有講述。
另外比較需要了解的就是union查詢,在Oracle union查詢中和其他數(shù)據(jù)庫類似,要求列數(shù)一樣,還要求類型完全一致,Oracle類型有很多,常見的有字符類型,數(shù)字類型以及日期類型等等,一般我們能用來做union查詢并且顯示的是字符類型,所以需要精確定位哪個字段符合我們的要求
1 會在頁面顯示,數(shù)據(jù)從進(jìn)入到出來會有很多的流程,很多數(shù)據(jù)會在中間經(jīng)過多次的處理,所以要想找到能顯示出來的數(shù)據(jù),很多時候并不是那么順利,這種顯示包括很多地方,包括返回的http頭,頁面正文甚至是cookie等。
2 字符類型 因?yàn)槲覀兂鰜淼臄?shù)據(jù)大部分都是字符類型,所以需要這個類型用來正確地匹配
3長度需要足夠 盡管我們可以用一些字符函數(shù)來解決這個問題,但是夠長的字段總是非常簡便 ),OracleWeb Hacking 基本思路并不會自己做數(shù)據(jù)類型轉(zhuǎn)換,但是Oracle中提供了一個NULL類型,可以匹配所有的數(shù)據(jù)類型,所以我們在定位完字段數(shù)之后就可以在union的各個字段填寫null來匹配,另外Oracle不支持select 1這樣的查詢,語法要求select必須有關(guān)鍵字,如果我們沒有表可以用。
可以用系統(tǒng)中默認(rèn)誰都有權(quán)限的表dual。關(guān)于定位字段數(shù)其實(shí)也比較簡單,和其他數(shù)據(jù)庫一樣可以利用order by 1-- 這樣操作,如果字段個數(shù)存在就會正常,通常頁面的邏輯會讓這個參數(shù) 不只在一個地方出現(xiàn),所以order by地方不一致,所以不能進(jìn)行union查詢。在這里可能會遇到目標(biāo)語言不支持''的情況,所以可以使用chr這些函數(shù)來處理這些問題。
即使不支持union,Oracle的一些特性還是讓我們輕易拿到想要的信息,就是用系統(tǒng)的utl_http.request包,這個包你可以看做是一個普通的函數(shù),所以我們完全可以自己監(jiān)聽端口,然后通過這個函數(shù)用請求將需要的數(shù)據(jù)發(fā)送過來,這個時候我們還可以用來查看數(shù)據(jù)庫可不可以上網(wǎng)以及出口IP,是個非常重要的一點(diǎn)。
正是有了這些系統(tǒng)里豐富的包和函數(shù)以及存儲過程,使得只要有一個注射點(diǎn),就可以在OracleWeb Hacking 基本思路里做任何事情,包括權(quán)限允許的和權(quán)限不允許的,記住,是任何事。
【編輯推薦】
- Oracle內(nèi)存結(jié)構(gòu)研究的相關(guān)內(nèi)容介紹
- Oracle數(shù)據(jù)庫的安裝與配置詳解
- Oracle企業(yè)管理器正式上市啦!
- Oracle rman命令中常用命令總結(jié)備忘
- Oracle數(shù)據(jù)庫的安裝與配置詳解