程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 講解SQL Server數據庫的觸發器的安全隱患

講解SQL Server數據庫的觸發器的安全隱患

編輯:關於SqlServer

觸發器權限和所有權

CREATE TRIGGER 權限默認授予定義觸發器的表所有者、sysadmin 固定服務器角色成員以及 db_owner 和 db_ddladmin 固定數據庫角色成員,並且不可轉讓。

需要的環境

本文需要的環境是已經獲取了sql服務器的以上其中一個權限,目的是為了留下隱蔽的後門,不被管理員發現。即使發現了也是加密的(可以破解,不過有些管理員不懂,也不會注意,相關信息google下)。

觸發器是在對表進行插入(insert)、更新(update)或刪除(delete)操作時,自動執行的存儲過程。最常見用於執行敏感數據操作時做歷史記錄。

本文以動網論壇dvbbs為例,我們已經拿到了db_owner權限(注意:並不是說dvbbs本身有漏洞)。因為只是db_owner權限,所以讀者想去執行“xp_cmdshell”,就不再本文范圍了,相信讀過本文後,只要有系統權限,作個系統的後門也是簡單的。先回想一下通常我們使用數據庫時要做什麼和關心什麼。

為什麼要使用觸發器作後門

管理員首先會把sql文件執行下,然後導入mdb的內容,平時使用頂多備份下,還原下。通常不會有人去看觸發器的內容,查看觸發器可以使用命令“exec sp_helptrigger 'dv_admin'”,或者在企業管理器中選擇“管理觸發器”。因為動網根本沒有用到觸發器,也沒有提到觸發器,所以動網的管理員不會去看的。於是我們在裡面寫的內容就相對安全了。

思路

觸發器主要是用來做歷史記錄的,當然可以把管理員更改密碼和添加用戶的歷史記錄下。放進一個管理員通常不會注意的、普通用戶又可以看到的地方。

動網的密碼有md5加過密的,加密的操作是asp程序在服務器上來完成的,等數據庫拿到數據的時候已經是加過密的了。但是動網同時把密碼以明文方式放入dv_log表中,就給了我們方便。只要拿到dv_log表中l_content字段的內容,然後判斷是否管理員在執行敏感操作,後門思路就形成了。

使用過程――代碼解析

代碼片斷:創建觸發器。

create trigger dv_admin_history
on Dv_log
with encryption
for insertas
as

觸發器需要建立在Dv_log表上,這裡放入的是明文密碼。我們並不知道管理員密碼設置有多長,只能是把裡面的有密碼的字段內容全部取出。觸發器最好是加密的,加密後,管理員即使看到了,也不知道這裡是什麼東西。在insert(加入)數據時執行觸發器。

取出來的值應該放入一個普通用戶能看到的地方,這樣只要有了普通用戶的權限就可以看到密碼。動網數據庫中,最大並且可以存放數據的字段管理員通常都會看到。所以必須找出來一個管理員不會看,而其他用戶也不會注意的地方。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved