近期,MSN、江民等知名網(wǎng)站相繼受到了黑客的威脅和攻擊,一時(shí)間網(wǎng)絡(luò)上風(fēng)聲鶴唳。2004年10月19日,本報(bào)編輯部接到本文作者(熾天使)的電話,他詳細(xì)講述了發(fā)現(xiàn)國(guó)內(nèi)最大域名提供商(以下簡(jiǎn)稱“X網(wǎng)”)網(wǎng)站漏洞的經(jīng)過(guò)。本報(bào)編輯部立即和X網(wǎng)的首席工程師進(jìn)行了交流,確認(rèn)了漏洞的真實(shí)性,該工程師也及時(shí)修補(bǔ)了該漏洞。
發(fā) 現(xiàn)
10月18日,筆者手上的項(xiàng)目做完以后,便和網(wǎng)上的朋友天南海北地聊天。聽(tīng)到朋友網(wǎng)站的開(kāi)張,心里也是非常的羨慕。
什么時(shí)候我才能擁有自己的主機(jī)和域名……想到申請(qǐng)主機(jī)和域名,筆者自然想到了X網(wǎng)(在中國(guó)太有名嘛^_^)。順手打開(kāi)其主頁(yè),突然看到了主頁(yè)右上角的會(huì)員登錄界面,這讓筆者“賊”心又起——要是能發(fā)現(xiàn)什么漏洞就好了,反正現(xiàn)在也沒(méi)什么事情。
筆者拿出端口掃描工具掃了一下X網(wǎng)的服務(wù)器,竟然什么漏洞都沒(méi)有發(fā)現(xiàn),真是郁悶!轉(zhuǎn)念一想,畢竟X網(wǎng)也做了10多年了,這些大型網(wǎng)站服務(wù)器的安全措施恐怕不會(huì)少——映射,外加IDS和防火墻,補(bǔ)丁肯定也早打全了,說(shuō)不定還有蜜罐程序等著你呢!
過(guò)了不久,筆者突然發(fā)現(xiàn)了一個(gè)情況,X網(wǎng)原來(lái)是用ASP寫(xiě)的。前段時(shí)間ASP+MSSQL的注入漏洞可是鬧得沸沸揚(yáng)揚(yáng),不少網(wǎng)站都吃了苦頭。這里會(huì)有這類問(wèn)題嗎?不管了,先試一試再說(shuō)。筆者隨手找了一個(gè)購(gòu)買(mǎi)虛擬主機(jī)的頁(yè)面:http://www.???.cn/HAS_Client/buy/vir_host/vir_ host1_SB.asp?PackageID=10341。先用經(jīng)典的方法來(lái)測(cè)試了一下,返回類型均為不匹配: ‘CDbl’錯(cuò)誤。X網(wǎng)用的什么數(shù)據(jù)庫(kù)呢?筆者在參數(shù)后面加上一個(gè)單引號(hào),再提交請(qǐng)求,頁(yè)面返回了一段報(bào)錯(cuò)信息。
原來(lái)用的是Oracle,一般Oracle數(shù)據(jù)庫(kù)出現(xiàn)這樣的返回錯(cuò)誤,都可能存在漏洞的。這和MSSQL未閉合引號(hào)的返回錯(cuò)誤差不多,不過(guò)MSSQL出現(xiàn)這樣的錯(cuò)誤提示,我們幾乎可以肯定存在注入漏洞了,而Oracle則要再進(jìn)一步確定。
確 認(rèn)
以下幾步為入侵的基礎(chǔ),非常重要。我們分別在IE中輸入:
http://www.???.cn/HAS_Client/buy/vir_ host/vir_host1_SB.asp?PackageID=10341‘a(chǎn)nd%200<>(select%20count(*)%20from%20all_tables)%20and%20’1‘=’1;
http://www.???.cn/HAS_Client/buy/vir_ host/vir_host1_SB.asp?PackageID=10341‘a(chǎn)nd%200<>(select%20count(*)%20from%20user_tables)%20and%20’1‘=’1;
http://www.???.cn/HAS_Client/buy/vir _host/vir_host1_SB.asp?PackageID=10341‘a(chǎn)nd%200<>(select%20count(*)%20 from%20user_tab_columns)%20and%20’1‘=’1;
以上這些是筆者猜測(cè)的Oracle的系統(tǒng)表:all_tables,user_tables和user_tab_col umns。如果沒(méi)有,就沒(méi)戲了。
沒(méi)想到頁(yè)面全都返回成功,這說(shuō)明筆者猜測(cè)的系統(tǒng)表都是存在的,同時(shí)也說(shuō)明提交的SQL語(yǔ)句,程序已經(jīng)做了處理。
至此,筆者確認(rèn)X網(wǎng)存在注入漏洞。
利 用
數(shù)據(jù)庫(kù)可以說(shuō)是一個(gè)站點(diǎn)的重中之重,通過(guò)筆者發(fā)現(xiàn)的這個(gè)漏洞,我們完全可以訪問(wèn)并修改數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)。不光是用戶賬號(hào),對(duì)于所有存在數(shù)據(jù)庫(kù)中的數(shù)據(jù),我們都可以獲取并修改。
在開(kāi)放Public組的UTL_File權(quán)限的情況下,其實(shí)還可以利用Union查詢、讀取服務(wù)器上的文件,這點(diǎn)和PHP+MYSQL注入漏洞中的load_file()有些相似,當(dāng)然也可以執(zhí)行Update之類的。只是在Oracle注入漏洞研究上,筆者還是個(gè)菜鳥(niǎo),沒(méi)能實(shí)現(xiàn)插入數(shù)據(jù)和進(jìn)行更高級(jí)的注入攻擊。在整個(gè)測(cè)試漏洞的過(guò)程中,由于利用了NBSI的后臺(tái)掃描功能和WPE,大大提高了效率。
現(xiàn)在,筆者已經(jīng)可以得到X網(wǎng)所有用戶的信息,只要登錄進(jìn)去,就能輕易更改他們的域名指向。如果筆者是一個(gè)惡意攻擊者,只要把某個(gè)商業(yè)站點(diǎn)的域名指向指到自己制作的一個(gè)假站點(diǎn)上,那么用戶登錄這個(gè)商業(yè)站點(diǎn)的賬號(hào)信息就毫無(wú)安全可言了。其實(shí)此漏洞和域名劫持有些相似,只要你是X網(wǎng)的用戶,筆者肯定就能黑了你的站點(diǎn)。對(duì)于X網(wǎng)來(lái)說(shuō),其所有的業(yè)務(wù)都有可能受到影響,數(shù)據(jù)可以被任意獲取竄改。
其他的一些危害也是顯而易見(jiàn)的,就不再做具體說(shuō)明了。
修 補(bǔ)
要防止這類注入漏洞其實(shí)很簡(jiǎn)單,只要對(duì)URL中提交的參數(shù)進(jìn)行嚴(yán)格的過(guò)濾,去除一些比如單引號(hào)、SQL關(guān)鍵字等字符即可。具體做法:利用程序檢查提交的URL中問(wèn)號(hào)后的字符串,一旦發(fā)現(xiàn)單引號(hào)、分號(hào)、SQL關(guān)鍵字等特殊字符,馬上就 會(huì)跳轉(zhuǎn)到一個(gè)自定義的Error頁(yè)面。
對(duì)于X網(wǎng)的網(wǎng)管來(lái)說(shuō),解決這個(gè)問(wèn)題其實(shí)花的時(shí)間不到5分鐘。另外,X網(wǎng)也應(yīng)加強(qiáng)一下數(shù)據(jù)庫(kù)中的數(shù)據(jù)安全,至少加個(gè)密吧!
順便提一下,國(guó)內(nèi)還有很多站點(diǎn)都存在這樣的注入漏洞。
編 后
自從經(jīng)歷了許許多多蠕蟲(chóng)和病毒的攻擊后,大家普遍對(duì)服務(wù)器的安全十分關(guān)注,有些站點(diǎn)甚至只開(kāi)了80端口。如今在服務(wù)器上運(yùn)行的代碼的安全,就顯得格外重要了。代碼上一個(gè)小小的疏忽,往往就可能造成全局的崩潰。
今天有數(shù)據(jù)庫(kù)的注入漏洞,明天又將出現(xiàn)什么呢?