從IIS轉到SQL資料庫安全(轉)
從IIS轉到SQL資料庫安全(轉)[@more@]從codered到nimda等,一大堆蠕蟲把原來需要人工利用的漏洞都變成了程式自動利用了,大家還想去手工操作這些IIS漏洞麼?讓我們調整重心,去看看伺服器常用的資料庫吧。
一般網站都是基於資料庫的,特別是ASP、PHP、JSP這樣的用資料庫來動態顯示的網站。很多網站可能多注意的是作業系統的漏洞,但是對資料庫和這些指令碼的安全總是忽略,也沒有太多注意。
從最比較普遍的指令碼問題開始,這些都是老話題了,大家可以參考Hectic寫的《關於資料庫的簡單入侵和無賴破壞,以天融信做例子》,該文章對從SQL指令碼問題說得非常詳細。對於指令碼安全的解決,也可以透過過濾來實現,可以參考我以前寫的。對於ASP來說,可以使用下面這個過濾函式:
Function Filter_SQL(strData)
Dim strFilter
Dim blnFlag
Dim i
strFilter="',;,//,--,@,_,exec,declare" '需要過濾的字元,可以自己新增,","是分隔符
blnFlag=Flase '過濾標誌,如果產生過濾,那麼就是真
Dim arrayFilter
arrayFilter=Split(strFilter,",")
For i=0 To UBound(arrayFilter)
If Instr(strData,arrayFilter(i))>0 Then
blnFlag=True
Exit For
End If
Next
If blnFlag Then
Response.Redirect "wrong.asp"
'當發現有過濾操作時,導向一個預定頁面。反正正常訪問用不到的連線請求,總不是好事情。
Else
Filter_SQL=strData
End If
End Function
對於MS SQL Server資料庫來說,安全問題不僅僅侷限在指令碼上了。“天殺的微軟”的系統性很強,整個基於WINDOWS系統的應用都有很強的關聯性,對SQL Server來說,基本可以把資料庫管理和系統管理等同起來了。SQL Server預設的管理員帳號“sa”的密碼是空的,這給多數NT伺服器產生一個安全漏洞。小榕的“SQLRCMD”,就能夠利用獲得的資料庫管理員帳號執行系統命令。
在SQL Server中有很多系統儲存過程,有些是資料庫內部使用的,還有一些就是透過執行儲存過程來呼叫系統命令。
系統儲存過程:xp_cmdshell
就是以作業系統命令列直譯器的方式執行給定的命令字串。它就具體語法是:
xp_cmdshell {'command_string'} [, no_output]
xp_cmdshell在預設情況下,只有 sysadmin 的成員才能執行。但是,sysadmin也可以授予其他使用者這個執行許可權。在早期版本中,獲得 xp_cmdshell 執行許可權的使用者在 SQL Server 服務的使用者帳戶中執行命令。可以透過配置選項配置 SQL Server,以便對 SQL Server 無 sa 訪問許可權的使用者能夠在SQLExecutiveCmdExec Windows NT 帳戶中執行 xp_cmdshell。在 SQL Server 7.0 中,該帳戶稱為 SQLAgentCmdExec。現在對於SQL Server2000,只要有一個能執行該儲存過程的帳號就可以直接執行命令了。
對於 NT 和 WIN2000,當使用者不是 sysadmin 組的成員時,xp_cmdshell 將模擬使用 xp_sqlagent_proxy_account 指定的 SQL Server 代理程式的代理帳戶。如果代理帳戶不能用,則 xp_cmdshell 將失敗。所以即使有一個帳戶是master資料庫的db_owner,也不能執行這個儲存過程。
如果我們有一個能執行xp_cmdshell的資料庫帳號,比如是空口令的sa帳號。那麼我們可以執行這樣的命令:
exec xp_cmdshell 'net user refdom 123456 /add'
exec xp_cmdshell 'net localgroup administrators refdom /add'
上面兩次呼叫就在系統的管理員組中新增了一個使用者:refdom
當我們獲得資料庫的sa管理員帳號後,就應該可以完全控制這個機器了。可見資料庫安全的重要性。
下面這些儲存過程都是對Public可以執行的:
xp_fileexist,用來確定一個檔案是否存在。
xp_getfiledetails,可以獲得檔案詳細資料。
xp_dirtree,可以展開你需要了解的目錄,獲得所有目錄深度。
Xp_getnetname,可以獲得伺服器名稱。
一般網站都是基於資料庫的,特別是ASP、PHP、JSP這樣的用資料庫來動態顯示的網站。很多網站可能多注意的是作業系統的漏洞,但是對資料庫和這些指令碼的安全總是忽略,也沒有太多注意。
從最比較普遍的指令碼問題開始,這些都是老話題了,大家可以參考Hectic寫的《關於資料庫的簡單入侵和無賴破壞,以天融信做例子》,該文章對從SQL指令碼問題說得非常詳細。對於指令碼安全的解決,也可以透過過濾來實現,可以參考我以前寫的。對於ASP來說,可以使用下面這個過濾函式:
Function Filter_SQL(strData)
Dim strFilter
Dim blnFlag
Dim i
strFilter="',;,//,--,@,_,exec,declare" '需要過濾的字元,可以自己新增,","是分隔符
blnFlag=Flase '過濾標誌,如果產生過濾,那麼就是真
Dim arrayFilter
arrayFilter=Split(strFilter,",")
For i=0 To UBound(arrayFilter)
If Instr(strData,arrayFilter(i))>0 Then
blnFlag=True
Exit For
End If
Next
If blnFlag Then
Response.Redirect "wrong.asp"
'當發現有過濾操作時,導向一個預定頁面。反正正常訪問用不到的連線請求,總不是好事情。
Else
Filter_SQL=strData
End If
End Function
對於MS SQL Server資料庫來說,安全問題不僅僅侷限在指令碼上了。“天殺的微軟”的系統性很強,整個基於WINDOWS系統的應用都有很強的關聯性,對SQL Server來說,基本可以把資料庫管理和系統管理等同起來了。SQL Server預設的管理員帳號“sa”的密碼是空的,這給多數NT伺服器產生一個安全漏洞。小榕的“SQLRCMD”,就能夠利用獲得的資料庫管理員帳號執行系統命令。
在SQL Server中有很多系統儲存過程,有些是資料庫內部使用的,還有一些就是透過執行儲存過程來呼叫系統命令。
系統儲存過程:xp_cmdshell
就是以作業系統命令列直譯器的方式執行給定的命令字串。它就具體語法是:
xp_cmdshell {'command_string'} [, no_output]
xp_cmdshell在預設情況下,只有 sysadmin 的成員才能執行。但是,sysadmin也可以授予其他使用者這個執行許可權。在早期版本中,獲得 xp_cmdshell 執行許可權的使用者在 SQL Server 服務的使用者帳戶中執行命令。可以透過配置選項配置 SQL Server,以便對 SQL Server 無 sa 訪問許可權的使用者能夠在SQLExecutiveCmdExec Windows NT 帳戶中執行 xp_cmdshell。在 SQL Server 7.0 中,該帳戶稱為 SQLAgentCmdExec。現在對於SQL Server2000,只要有一個能執行該儲存過程的帳號就可以直接執行命令了。
對於 NT 和 WIN2000,當使用者不是 sysadmin 組的成員時,xp_cmdshell 將模擬使用 xp_sqlagent_proxy_account 指定的 SQL Server 代理程式的代理帳戶。如果代理帳戶不能用,則 xp_cmdshell 將失敗。所以即使有一個帳戶是master資料庫的db_owner,也不能執行這個儲存過程。
如果我們有一個能執行xp_cmdshell的資料庫帳號,比如是空口令的sa帳號。那麼我們可以執行這樣的命令:
exec xp_cmdshell 'net user refdom 123456 /add'
exec xp_cmdshell 'net localgroup administrators refdom /add'
上面兩次呼叫就在系統的管理員組中新增了一個使用者:refdom
當我們獲得資料庫的sa管理員帳號後,就應該可以完全控制這個機器了。可見資料庫安全的重要性。
下面這些儲存過程都是對Public可以執行的:
xp_fileexist,用來確定一個檔案是否存在。
xp_getfiledetails,可以獲得檔案詳細資料。
xp_dirtree,可以展開你需要了解的目錄,獲得所有目錄深度。
Xp_getnetname,可以獲得伺服器名稱。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-961626/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 談談資料從sql server資料庫匯入mysql資料庫的體驗(轉)Server資料庫MySql
- 把影像檔案上傳到資料庫,並從資料庫讀出 (轉)資料庫
- Oracle資料庫安全策略(轉)Oracle資料庫
- trac 平臺從 PG 資料庫轉到sqlite 的指令碼。資料庫SQLite指令碼
- 移至64位SQL Server資料庫(轉)SQLServer資料庫
- Oracle資料庫的安全策略(轉)Oracle資料庫
- 將資料從文字匯入到mysql(轉)MySql
- SQL Server資料庫安全SQLServer資料庫
- 利用IDC從資料庫中取得資料 (轉)資料庫
- IIS 日誌匯入到資料庫的方法資料庫
- (轉)使用DBUA從9i到10G升級資料庫資料庫
- 轉發:C#操作SQL Server資料庫C#SQLServer資料庫
- 資料庫SQL開發命名規則 (轉)資料庫SQL
- oracle資料庫效能監控的SQL(轉)Oracle資料庫SQL
- sql.bsq與資料庫的建立(轉)SQL資料庫
- 從 SQL Server 到 MySQL (一):異構資料庫遷移ServerMySql資料庫
- 管理SQL Server資料庫安全SQLServer資料庫
- SQL Server資料庫基礎之行資料轉換為列資料SQLServer資料庫
- sql server 資料庫中null 轉換為 0SQLServer資料庫Null
- SQL資料庫的一些攻擊(轉)SQL資料庫
- SQL SERVER資料庫口令的脆弱性(轉)SQLServer資料庫
- Oracle資料庫系統的安全性(轉)Oracle資料庫
- 從實時資料庫轉戰時序資料庫,他陪伴 TDengine 從 1.0 走到 3.0資料庫
- 用SQL更新資料(轉)SQL
- Sql Server資料庫資料匯入到SQLite資料庫中Server資料庫SQLite
- 從單例項資料庫轉換到RAC環境——RAC的建立和配置單例資料庫
- SQL:資料庫的安全性SQL資料庫
- 1.3.1. 提交SQL到資料庫SQL資料庫
- 操作IIS (轉)
- 從 XML 到 Java 程式碼的資料繫結(2):從 XML 資料建立類(轉)XMLJava
- SQL Server 7.0資料庫的六種資料移動方法 (轉)SQLServer資料庫
- 使用SQL_TRACE進行資料庫診斷(轉)SQL資料庫
- 資料庫hang分析(sql*plus不能登陸)[轉載]資料庫SQL
- SQL Server資料庫中轉儲裝置的分析SQLServer資料庫
- (轉)檢視sql server 資料庫連線數方法SQLServer資料庫
- 把Access轉成SQL資料庫的方法介紹SQL資料庫
- 直接透過ODBC API訪問SQL資料庫 (轉)APISQL資料庫
- Sql server資料庫人員:常見錯誤(轉)SQLServer資料庫