sql注入天書隨著B S模式應(yīng)用開發(fā)發(fā)展使用這種編寫員也越來越多但_第1頁
sql注入天書隨著B S模式應(yīng)用開發(fā)發(fā)展使用這種編寫員也越來越多但_第2頁
sql注入天書隨著B S模式應(yīng)用開發(fā)發(fā)展使用這種編寫員也越來越多但_第3頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、sql注入:SQL注入天書瘋狂代碼 HYPERLINK http:/w/ http:/w/:http:/sp/Article16281.html引言隨著B/S模式應(yīng)用開發(fā)發(fā)展使用這種模式編寫應(yīng)用員也越來越多但是由于這個行業(yè)入門門檻不高員水平及經(jīng)驗也參差不齊相當(dāng)大部分員在編寫代碼時候沒有對用戶輸入數(shù)據(jù)進(jìn)行判斷使應(yīng)用存在安全隱患用戶可以提交段數(shù)據(jù)庫查詢代碼根據(jù)返回結(jié)果獲得某些他想得知數(shù)據(jù)這就是所謂SQLInjection即SQL注入SQL注入是從正常WWW端口而且表面看起來跟般Web頁面沒什么區(qū)別所以目前市面都不會對SQL注入發(fā)出警報如果管理員沒查看IIS日志可能被很長時間都不會發(fā)覺但是SQL注入

2、手法相當(dāng)靈活在注入時候會碰到很多意外情況能不能根據(jù)具體情況進(jìn)行分析構(gòu)造巧妙SQL語句從而成功獲取想要數(shù)據(jù)是高手和“菜鳥”根本區(qū)別根據(jù)國情國內(nèi)WebSite用ASP+Acs或SQLServer占70%以上+MySQ占L20%其他10%在本文從分入門、進(jìn)階至高級講解下ASP注入思路方法及竅門技巧注入文章由NB另位朋友zwell撰寫希望對者和員都有用處了解ASP注入朋友也請不要跳過入門篇部分人對注入基本判斷思路方法還存在誤區(qū)大家準(zhǔn)備好了嗎?LetsGo.入門篇如果你以前沒試過SQL注入話那么第步先把IE菜單=工具=ernet選項=高級=顯示友好HTTP信息前面勾去掉否則不論服務(wù)器返回什么IE都只顯示

3、為HTTP500服務(wù)器不能獲得提示信息第節(jié)、SQL注入原理以下從個Web開始(注:本文前已征得該站站長同意大部分都是真實數(shù)據(jù))在WebSite首頁上有名為“IE不能打開新窗口多種解決思路方法”地址為:htt/showdetail.as=49在這個地址后面加上單引號服務(wù)器會返回下面提示:JETDatabaseEngine80040e14串語法在查詢表達(dá)式ID=49中/showdetail.asp行8從這個提示能看出下面幾點:1.WebSite使用是Acs數(shù)據(jù)庫通過JET引擎連接數(shù)據(jù)庫而不是通過ODBC2.沒有判斷客戶端提交數(shù)據(jù)是否符合要求3.該SQL語句所查詢表中有名為ID字段從上面例子得到資料

4、可以知道SQL注入原理就是從客戶端提交特殊代碼從而收集及服務(wù)器信息從而獲取你想到第 2節(jié)、判斷能否進(jìn)行SQL注入看完第節(jié)有些人會覺得:我也是經(jīng)常這樣測試能否注入這不是很簡單嗎?其實這并不是最好思路方法為什么呢?首先不定每臺服務(wù)器IIS都返回具體提示給客戶端如果中加了c(參數(shù))的類語句話SQL注入是不會成功但服務(wù)器同樣會報錯具體提示信息為處理URL時服務(wù)器上出錯請和系統(tǒng)管理員聯(lián)絡(luò)其次部分對SQL注入有點了解員認(rèn)為只要把單引號過濾掉就安全了這種情況不為少數(shù)如果你用單引號測試是測不到注入點那么什么樣測試思路方法才是比較準(zhǔn)確呢?如下:htt/showdetail.as=49htt/showdetail

5、.as=49;and1=1htt/showdetail.as=49;and1=2這就是經(jīng)典1=1、1=2測試法了如何判斷呢?看看上面 3個返回結(jié)果就知道了:可以注入表現(xiàn):正常顯示(這是必然不然就是有了)正常顯示內(nèi)容基本和相同提示BOF或EOF(沒做任何判斷時)、或提示找不到 onerrorresumenext)(判斷了rs.eof時)、或顯示內(nèi)容為空(加了不可以注入就比較容易判斷了同樣正常顯示和般都會有定義提示或提示類型轉(zhuǎn)換時出錯當(dāng)然這只是傳入?yún)?shù)是數(shù)字型時候用判斷思路方法實際應(yīng)用時候會有型和搜索型參數(shù)我將在中級篇 “SQL注入般步驟”再做分析第 3節(jié)、判斷數(shù)據(jù)庫類型及注入思路方法區(qū)別數(shù)據(jù)庫、

6、注入思路方法都是有差異所以在注入的前還要判斷下數(shù)據(jù)庫類型般ASP最常搭配數(shù)據(jù)庫是Acs和SQLServer網(wǎng)上超過99%WebSite都是其中的如何讓告訴你它使用什么數(shù)據(jù)庫呢?來看看:SQLServer有些系統(tǒng)變量如果服務(wù)器IIS提示沒關(guān)閉并且SQLServer返回提示話那可以直接從出錯信息獲取思路方法如下:htt/showdetail.as=49;anduser0這句語句很簡單但卻包含了SQLServer特有注入思路方法精髓也是在次無意測試中發(fā)現(xiàn)這種效率極高猜解思路方法讓我看來看看它含義:首先前面語句是正常重點在anduser0知道user是SQLServer個內(nèi)置變量它值是當(dāng)前連接用戶名類

7、型為nvarchar拿個nvarchar值跟數(shù)0比較系統(tǒng)會先試圖將nvarchar值轉(zhuǎn)成型當(dāng)然轉(zhuǎn)過程中肯定會出錯SQLServer出錯提示是:將nvarchar值”abc”轉(zhuǎn)換數(shù)據(jù)類型為列時發(fā)生語法呵呵abc正是變量user值這樣不廢吹灰的力就拿到了數(shù)據(jù)庫用戶名在以后篇幅里大家會看到很多用這種思路方法語句順便說幾句眾所周知SQLServer用戶sa是個等同Adminstrators權(quán)限角色拿到了sa權(quán)限幾乎肯定可以拿到主機(jī)Administrator了上面思路方法可以很方便測試出是否是用sa登錄要注意是:如果是sa登錄提示是將 ”dbo”轉(zhuǎn)換成列發(fā)生而不是”sa”如果服務(wù)器IIS不允許返回提示那

8、如何判斷數(shù)據(jù)庫類型呢?可以從Acs和SQLServer和區(qū)別入手Acs和SQLServer都有自己系統(tǒng)表比如存放數(shù)據(jù)庫中所有對象表Acs是在系統(tǒng)表msysobjects中但在Web環(huán)境下讀該表會提示“沒限”SQLServer是在表sysobjects中在Web環(huán)境下可正常在確認(rèn)可以注入情況下使用下面語句:htt/showdetail.as=49;and(selectcount(*)fromsysobjects)0htt/showdetail.as=49;and(selectcount(*)frommsysobjects)0如果數(shù)據(jù)庫是SQLServer那么第個頁面和原頁面htt/showdet

9、ail.as=49是大致相同;而第 2個由于找不到表msysobjects會提示出錯就算有容錯處理頁面也和原頁面完全區(qū)別如果數(shù)據(jù)庫用是Acs那么情況就有所區(qū)別第個頁面和原頁面完全區(qū)別;第 2個則視乎數(shù)據(jù)庫設(shè)置是否允許讀該系統(tǒng)表般來說是不允許所以和原也是完全區(qū)別大多數(shù)情況下用第個就可以得知系統(tǒng)所用數(shù)據(jù)庫類型第 2個只作為開啟IIS提示時驗證進(jìn)階篇在入門篇學(xué)會了SQL注入判斷思路方法但真正要拿到WebSite內(nèi)容是遠(yuǎn)遠(yuǎn)不夠接下來就繼續(xù)學(xué)習(xí)如何從數(shù)據(jù)庫中獲取想要獲得內(nèi)容首先先看看SQL注入般步驟:第節(jié)、SQL注入般步驟首先判斷環(huán)境尋找注入點判斷數(shù)據(jù)庫類型這在入門篇已經(jīng)講過了其次根據(jù)注入?yún)?shù)類型在腦海

10、中重構(gòu)SQL語句原貌按參數(shù)類型主要分為下面 3種:(A)ID=49這類注入?yún)?shù)是數(shù)字型SQL語句原貌大致如下:Select*from表名where字段=49注入?yún)?shù)為ID=49And查詢條件即是生成語句:Select*from表名where字段=49And查詢條件(B)Class=連續(xù)劇這類注入?yún)?shù)是型SQL語句原貌大致概如下:Select*from表名where字段=連續(xù)劇注入?yún)?shù)為Class=連續(xù)劇and查詢條件and=即是生成語句:Select*from表名where字段=連續(xù)劇and查詢條件and=搜索時沒過濾參數(shù)如keyword=關(guān)鍵字SQL語句原貌大致如下:Select*from表

11、名where字段like%關(guān)鍵字%注入?yún)?shù)為keyword=and查詢條件and%25=即是生成語句:Select*from表名where字段like%and查詢條件and%=%接著將查詢條件替換成SQL語句猜解表名例如:ID=49And(SelectCount(*)fromAdmin)=0如果頁面就和ID=49相同介紹說明附加條件成立即表Admin存在反的即不存在(請牢記這種思路方法)如此循環(huán)直至猜到表名為止表名猜出來后將Count(*)替換成Count(字段名)用同樣原理猜解字段名有人會說:這里有些偶然成分如果表名起得很復(fù)雜沒規(guī)律那根本就沒得玩下去了說得很對這世界根本就不存在100%成功下

12、手技術(shù)不叮無縫蛋無論多技術(shù)多高深都是別人寫得不嚴(yán)密或使用者意識不夠才有得有點跑題了話說回來對于SQLServer庫還是有辦法讓告訴表名及字段名在高級篇中會做介紹最后在表名和列名猜解成功后再使用SQL語句得出字段值下面介紹種最常用思路方法Ascii逐字然這種思路方法速度很慢但肯定是可行思路方法法雖舉個例子已知表Admin中存在username字段首先取第條測試長度:htt/showdetail.as=49;and(selecttop1len(username)fromAdmin)0先介紹說明原理:如果top1username長度大于0則條件成立;接著就是1、2、3這樣測試下去直到條件不成立為止比

13、如7成立8不成立就是len(username)=8當(dāng)然沒人會笨得從0,1,2,3個個測試如何樣才比較快就看各自發(fā)揮了在得到username長度后用 mid(username,N,1)截取第N位再asc(mid(username,N,1)得到ASCII碼比如:id=49and(selecttop1asc(mid(username,1,1)fromAdmin)0同樣也是用逐步縮小范圍思路方法得到第1位ASCII碼注意是英文和數(shù)字ASCII碼在1-128的間可以用折半法加速猜解如果寫成測試效率會有極大提高第 2節(jié)、SQL注入常用有SQL語言基礎(chǔ)人在SQL注入時候成功率比不熟悉人高很多及命令有必要提高

14、下自己SQL水平特別是些常用Acs:asc()SQLServer:unicode()作用:返回某ASCII碼Acs:chr(數(shù)字)SQLServer:nchar(數(shù)字)作用:和asc相反根據(jù)ASCII碼返回Acs:mid(串,N,L)SQLServer:sub(串,N,L)作用:返回串從N個起長度為L子串即N到N+L的間串Acs:abc(數(shù)字)SQLServer:abc(數(shù)字)作用:返回數(shù)字絕對值(在猜解漢字時候會用到)Acs:AbetnBAnQLServer:AbetnBAndC作用:判斷A是否界于B和C的間第 3節(jié)、中文處理思路方法在注入中碰到中文是常有事有些人碰到中文就想打退堂鼓了其實只

15、要對中文編碼有所了解“中文恐懼癥 ”很快可以克服先說點:Acs文ASCII碼可能會出現(xiàn)負(fù)數(shù)取出該負(fù)數(shù)后用abs取絕對值漢字不變SQLServer文ASCII為正數(shù)但由于是UNICODE雙位編碼不能用ascii取得ASCII碼必須用unicode返回unicode值再用nchar取得對應(yīng)中文了解了上面兩點后是不是覺得中文猜解其實也跟英文差不多呢?除了使用要注意、猜解范圍大點外思路方法是沒什么兩樣高級篇看完入門篇和進(jìn)階篇后稍加練習(xí)般WebSite是沒問題了但如果碰到表名列名猜不到或作者過濾了些特殊如何提高注入成功率?如何樣提高猜解效率?請大家接著往下看高級篇第節(jié)、利用系統(tǒng)表注入SQLServer數(shù)

16、據(jù)庫SQLServer是個功能強(qiáng)大數(shù)據(jù)庫系統(tǒng)和操作系統(tǒng)也有緊密聯(lián)系這給開發(fā)者帶來了很大方便但另方面也為注入者提供了個跳板先來看看幾個具體例子:“netusernamepassword/add”-分號;在SQLServer中表示隔開前后兩句語句-表示后面語句為注釋所以這句語句在SQLServer中將被分成兩句執(zhí)行先是Select出ID=1然后執(zhí)行過程xp_cmds這個過程用于系統(tǒng)命令于是用net命令新建了用戶名為name、為passwordwindows帳號接著:“netlocalgroupnameadministrators/add”-將新建帳號name加入管理員組不用兩分鐘你已經(jīng)拿到了系統(tǒng)最

17、高權(quán)限!當(dāng)然這種思路方法只適用于用sa連接數(shù)據(jù)庫情況否則是沒限xp_cmds0前面有個類似例子anduser0作用是獲取連接用戶名db_name是另個系統(tǒng)變量返回是連接數(shù)據(jù)庫名數(shù)據(jù)庫名todisk=c:inetpubwwwroot1.db;-這是相當(dāng)狠招從拿到數(shù)據(jù)庫名加上某些IIS出錯出絕對路徑將數(shù)據(jù)庫備份到Web目錄下面再用HTTP把整個數(shù)據(jù)庫就完完整整 網(wǎng)絡(luò)地址思路方法(如202.96.回來所有管理員及用戶都覽無遺!在不知道絕對路徑時候還可以備份到xShare1.db)但成功率不高(SelectTop1namefromsysobjectswherextype=Uandsus0)0前面sys

18、objects是SQLServer系統(tǒng)表著所有表名、視圖、約束及其它對象xtype=Uandsus0表示用戶建立表名上面語句將第個表名取出和0比較大小讓報錯信息把表名出來第 2、第 3個表名如何獲???還是留給聰明讀者研究吧(SelectTop1col_name(object_id(表名),1)fromsysobjects)0從拿到表名后用object_id(表名)獲取表名對應(yīng) 1換成2,3,4.就可以逐個獲取所猜解表里面字段名IDcol_name(表名ID,1)代表該表第1個字段名將以上6點是我研究SQLServer注入半年多以來心血結(jié)晶可以看出對SQLServer了解程度直接影響著成功率及猜

19、解速度在我研究SQLServer注入的后我在開發(fā)方面水平也得到很大提高呵呵也許安全和開發(fā)本來就是相輔相成吧第 2節(jié)、繞過限制繼續(xù)注入在入門篇提到有很多人喜歡用號測試注入所以也有很多人用過濾號思路方法來“防止”注入這也許能擋住些入門者但對SQL注入比較熟悉人還是可以利用相關(guān)達(dá)到繞過限制目在“SQL注入般步驟”節(jié)中我所用語句都是經(jīng)過我優(yōu)化讓其不包含有單引號;在“利用系統(tǒng)表注入SQLServer數(shù)據(jù)庫”中有些語句包含有號舉個例子來看看如何改造這些語句:簡單如wherextype=UU對應(yīng)ASCII碼是85所以可以用wherextype=char(85)代替;如果是中文比如 wherename=用戶可以用wherename=nchar(29992)+nchar(25143)代替第 3節(jié)、經(jīng)驗小結(jié)1.有些人會過濾Select、Update、Delete這些關(guān)鍵字但偏偏忘記區(qū)分大小寫所以大家可以用selecT這樣嘗試下2.在猜不到字段名時不妨看看WebSite上登錄表單般為了方便起見字段名都

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論