LittleCorporal: 一个C#自动化恶意文档生成器
LittleCorporal:一个C#自动化恶意文档生成器
C:\LittleCorporal\bin\Release>LittleCorporal.exe C:\beacon.bin explorer.exe
.____ .__ __ __ .__ _________ .__
| | |__|/ |__/ |_| | ____ \_ ___ \ _________________ ________________ | |
| | | \ __\ __\ | _/ __ \/ \ \/ / _ \_ __ \____ \ / _ \_ __ \__ \ | |
| |___| || | | | | |_\ ___/\ \___( <_> ) | \/ |_> > <_> ) | \// __ \| |__
| _______ \__||__| |__| |____/\___ >\______ /\____/|__| | __/ \____/|__| (____ /____/
\/ \/ \/ |__| \/
________
/ \
__ / (o)\__
/ ______\ \ I am the strongest debater in the whole Conseil.
| ____/__ __\____| I let myself be attacked, because I know how to defend myself.
[ --~~-- ] - Napoleon Bonaparte
| ( L )|
___----\ __ /----___
/ | < \____/ > | \
/ | < \--/ > | \
|||||| \ \/ / ||||||
| \ / o |
| | \/ === | |
| | |o ||| | |
| \______| +#* | |
| |o | |
\ | / /
|\__________|o / /
| | / /
[+] 解析参数:
[>] Shellcode路径:C:\beacon.bin
[>] 目标进程:explorer.exe
[+] 已将Shellcode嵌入Loader.cs!
[+] 已生成C#加载器工件!
[+] 已通过Donut运行.NET程序集!
[+] Donut工件位于:C:\LittleCorporal\Artifacts\payload.bin
[+] Word文档的路径:C:\LittleCorporal\Artifacts\Form.doc
使用前请完整阅读本README!
LittleCorporal接受用户提供的参数,指定一个在目标远程机器上已运行的进程(你打算在那台机器上执行恶意Word文档),以及一个本地.bin格式的shellcode文件路径(例如你运行LittleCorporal的机器上的Beacon Stageless shellcode blob)。因此,如果你想使用此项目生成的恶意文档,你需要指定你打算运行恶意文档的机器上已存在的进程(可以是本地机器,也可以是另一台机器)。explorer.exe始终会有一个实例,如果你不在乎注入到哪个进程,可以使用它。
LittleCorporal将shellcode和目标进程名称嵌入到Loader.cs中,动态编译Loader.cs成一个.NET .exe工件,然后利用线程劫持执行远程进程注入。这个.NET .exe工件(即线程劫持加载器)通过Donut生成位置无关的shellcode,用于执行该.exe。Donut生成的shellcode随后经过base64编码,生成一个Word文档,最终的Donut blob存储在Word的InlineShape.AlternativeText属性中,该属性能够容纳整个载荷。这是通过向Word文档中插入一个图片(目前是一个空白图片,使文档呈现“空白”外观)属性,并将载荷作为图片的替代文本存储而实现的。然后LittleCorporal利用本项目中的一个VBA“模板”文本文件,将这个宏注入到新生成的Word文档中。宏被命名为autoopen,因此在文档打开时自动运行,并配置为提取之前生成的图片的替代文本值(包含最终载荷),进行base64解码,最后通过VBA中的Windows API调用,对Word执行本地注入。本质上,该项目使用VBA中的一个简单“加载器”对Word进行本地注入(这种方式比远程进程注入受到的审查略少),然后通过本地注入的执行来运行Donut shellcode——这是一个执行线程劫持的另一个加载器,用于最终将用户提供的shellcode远程进程注入到用户指定的进程中。所有这些过程都是自动完成的,包括Word文档的生成。
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\),并且目标机器上也安装了.NET v2。LittleCorporal.exe的机器上安装Office。这是因为LittleCorporal需要通过COM与Word交互。另请注意,生成的Word文档会从互联网下载一个空白图片——这意味着运行LittleCorporal的计算机和准备引爆Word文档的远程计算机都需要能访问互联网。CONTEXT结构,其中包含64位特有的数据类型。这是因为线程劫持目前仅在64位系统上受支持,因为它需要遵循__fastcall调用约定的自定义shellcode。我不打算实现32位版本的线程劫持能力,但如果将来有支持32位的pull request(因为许多Microsoft Word安装是32位的),我不会完全排除这种可能性。从逻辑角度讲,修复并不困难,问题在于从__fastcall切换到__stdcall时维护堆栈跟踪并计算新偏移量的负担和麻烦。这在技术上并不复杂,但相当繁琐。LittleCorporal.exe生成Word文档之前,编辑这行代码,将bool FUNC1 = true;。如果你计划将此项目用于活跃的红队行动,请考虑将shellcode的"Exit"功能设置为通过线程退出进行“干净”退出,而不是完全杀死shellcode所在进程。这可以通过msfvenom的EXITFUNC=thread配置,也可以在Cobalt Strike中通过Aggressor进行类似配置。
bin\Release目录(cd C:\Path\to\LittleCorporal\bin\Release)。建议如果你选择重新编译此项目,请使用Release构建,而不是Debug构建。LittleCorporal.exe的机器上shellcode文件的路径,以及你打算执行Word文档的机器上已运行的进程。(LittleCorporal.exe C:\Path\To\Shellcode.bin explorer.exe)LittleCorporal.exe clean