亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

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

添加時間:2011-3-16  添加: admin 

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

  2.需要的環境

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

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

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

  3.為什么要使用觸發器作后門?

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

  4.思路

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

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

  使用過程――代碼解析

  代碼片斷:創建觸發器。

  create trigger dv_admin_history

  on Dv_log

  with encryption

  for insertas

  as

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

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

  我選擇放在一個新建用戶的用戶信息里(以下通稱這個用戶為“汪財”,親切點),這樣我們登陸時就可以看到了(注意:登陸時有日志的,記錄最后登陸ip,大家自己解決)。

  有以下幾個字段適于存放:

  (1)Userphoto,字段類型:varchar(255)。記錄了汪財的照片地址。可以存放小于255的數據。

  (2)Usersign,字段類型:varchar(255)。汪財的簽名,如果放這里,汪財就不能發貼了,否則后果自負(發貼會顯示簽名,地球人都能看到)。

  (3)Useremail,字段類型:nvarchar(255)。汪財的email,使用時需要轉換類型。

  (4)Userinfo,字段類型:text。汪財的用戶資料。該字段很特殊,有很多“”,每一對“”之間都有著不同的含義。動網很懶的,為了避免字段太多,就把一堆信息全都放入一個字段里,用“”分開,當查詢某一項信息時,取出來全部,然后分割下,就是需要的數據了。

  5.解決的問題:

  (1)如果都放滿了。

  理論上,如果我們看到了第一個字段有了東西,就應該拿筆記下來,然后刪除掉。觸發器會自動檢查大小后繼續使用。再次強調下,本文例子針對動網,大家應該具體問題具體分析。

  (2)管理員的日志中,有很多日志,怎么判斷它就是在記錄更改密碼。

  在管理員操作用戶時,當然會在“user.asp”或者“admin.asp”中操作,所以我們判斷條件需要:

  select @passinfo = l_content from inserted where l_type = 1 and (l_touser = ’user.asp’ or l_touser = ’admin.asp’)

  在l_touser為user.asp或者admin.asp時,說明管理員在操作(查看,更新,刪除)用戶或者管理員。在l_type = 1時,說明執行了更新操作,l_content字段里面有密碼(如果管理員更新了密碼,或者新建了帳戶)。因此,查詢inserted表中的l_content,賦值給@passinfo代碼片斷:更新汪財的usersign字段。

  if (len(@usersign) < 150 or @usersign is null)

  begin if (@usersign is null)

  set @usersign = ’ ’

  set @passinfo = @usersign + @passinfo

  update Dv_User set usersign = @passinfo where username = @username

  commit tran

  returnend

  end

  首次更新時,usersign字段里沒有內容,而SQL Server里null加任何數都是null,所以需要判斷is null之后,給null賦值為一個空格。其他幾個字段的方法和這里大同小異,只是一個轉換nvarchar和“”的組合時多了點。最后判斷如果字段內容太多就不再寫了,為了提高性能,也可以把最后的判斷寫在前面,一旦數據過多,就不需要再繼續執行了。

  首次更新時,汪財的usersign字段里沒有內容,而SQL Server里null加任何數都是null,所以需要判斷is null之后,給null賦值為一個空格。其他幾個字段的方法和這里大同小異,只是一個轉換nvarchar和“”的組合時多了點。最后判斷如果字段內容太多就不再寫了,為了提高性能,也可以把最后的判斷寫在前面,一旦數據過多,就不需要再繼續執行了。

   關鍵字:數據庫、觸發器、服務器

分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站