Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
VBA-RunPE — Uma implementação em VBA da técnica RunPE ou como contornar a lista de permissões de aplicativos. | Kitploit
Ferramentas/GitHubGitHub/itm4n/vba-runpe
ExploraçãoEvasão de IDS/IPSPós-ExploraçãoTestes de PenetraçãoRed TeamingDesenvolvimento de PayloadsArchived
GitHubitm4n/vba-runpe

VBA-RunPE

Uma implementação em VBA da técnica RunPE ou como contornar a lista de permissões de aplicativos.

Ver Repositório
815173há 6 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

VBA RunPE

Descrição

Uma implementação simples mas eficaz da técnica RunPE em VBA. Este código pode ser usado para executar executáveis a partir da memória do Word ou Excel. É compatível com as versões de 32 bits e 64 bits do Microsoft Office 2010 e superior.

Mais informações aqui:
https://itm4n.github.io/vba-runpe-part1/
https://itm4n.github.io/vba-runpe-part2/

Win10_x64_Office2016_x64_PowerShell

Uso 1 - arquivo PE no disco

  1. No procedimento Exploit no final do código, defina o caminho do arquivo que deseja executar.
root@kitploit:~
strSrcFile = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"

/!\ Se você estiver usando uma versão de 32 bits do Microsoft Office em um sistema operacional de 64 bits, deve especificar binários de 32 bits.

root@kitploit:~
strSrcFile = "C:\Windows\SysWOW64\cmd.exe"
strSrcFile = "C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"
  1. Especifique os argumentos da linha de comando (opcional).
root@kitploit:~
strArguments = "-exec Bypass"

Isso será usado para formar uma linha de comando equivalente a:

root@kitploit:~
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -exec Bypass
  1. (Opcional) Ative Exibir > Janela Imediata (Ctrl+G) para verificar logs de execução e erros.

  2. Execute a macro Exploit!

Uso 2 - PE incorporado

  1. Use pe2vba.py para converter um arquivo PE em VBA. Dessa forma, ele pode ser diretamente incorporado na macro.
root@kitploit:~
user@host:~/Tools/VBA-RunPE$ ./pe2vba.py meterpreter.exe 
[+] Created file 'meterpreter.exe.vba'.
  1. Substitua o seguinte código em RunPE.vba pelo conteúdo do arquivo .vba gerado na etapa anterior. O script Python converte o PE para VBA e aplica o template RunPE automaticamente (não é necessário copiar/colar manualmente).
root@kitploit:~
' ================================================================================
'                                ~~~ EMBEDDED PE ~~~
' ================================================================================

' CODE GENRATED BY PE2VBA
' ===== BEGIN PE2VBA =====
Private Function PE() As String
    Dim strPE As String
    strPE = ""
    PE = strPE
End Function
' ===== END PE2VBA =====
  1. (Opcional) Ative Exibir > Janela Imediata (Ctrl+G) para verificar logs de execução e erros.

  2. Execute a macro Exploit!

/!\ Ao usar um PE incorporado, a macro alternará automaticamente para este modo porque o método PE() retornará uma string não vazia.

Problemas conhecidos

  • GetThreadContext() falha com código de erro 998.

Você pode obter esse erro se executar esta macro a partir de uma versão de 64 bits do Office. Como solução alternativa, você pode mover o código para um módulo em vez de executá-lo a partir das referências do Objeto Word. Obrigado a @joeminicucci pela dica.

root@kitploit:~
================================================================================
[*] Source file: 'C:\Windows\System32\cmd.exe'
[*] Checking source PE...
[*] Creating new process in suspended state...
[*] Retrieving the context of the main thread...
    |__ GetThreadContext() failed (Err: 998)

Não tenho ideia por que essa solução alternativa funciona no momento. No entanto, investiguei um pouco isso. Este erro parece ser causado pela estrutura CONTEXT não estar devidamente alinhada na versão de 64 bits. Percebi que o tamanho da estrutura também está incorreto ([VBA] LenB(CONTEXT) != [C++] sizeof(CONTEXT)) enquanto está correto na versão de 32 bits. Tenho uma solução funcional que permite que GetThreadContext() retorne corretamente, mas isso quebra outras coisas mais adiante na execução.

Edit 2019-12-15: a definição da versão de 64 bits da estrutura CONTEXT estava de fato incorreta, mas corrigir isso não corrigiu o bug. Então, implementei uma solução alternativa para a versão de 64 bits. Substituí o argumento da estrutura CONTEXT das funções GetThreadContext() e SetThreadContext() por um Array de Byte do mesmo tamanho.

Edit 2019-12-17: Finalmente encontrei o problema. Minha primeira suposição estava correta, a estrutura CONTEXT deve estar alinhada a 16 Bytes na memória. Isso é algo que você pode controlar em C usando align(16) na definição da estrutura, mas não pode controlar em VBA. Portanto, GetThreadContext() e SetThreadContext() podem falhar "aleatoriamente". Arrays de Byte, por outro lado, parecem estar sempre alinhados a 16 Bytes, é por isso que essa solução alternativa é eficaz, mas não há garantia, a menos que eu faça engenharia reversa do interpretador/compilador VBA e descubra?!

  • LongPtr - Tipo Definido pelo Usuário Não Definido

Se você receber este erro, significa que está executando a macro a partir de uma versão antiga do Office (<=2007). O tipo LongPtr foi introduzido no VBA7 (Office 2010) junto com o suporte à API Windows de 64 bits. É muito útil para lidar com ponteiros sem se preocupar com a arquitetura (32 bits / 64 bits).

Como solução alternativa, você pode substituir todas as ocorrências de LongPtr por Long (32 bits) ou LongLong (64 bits). Use Ctrl+H no seu editor de texto favorito.

Créditos

@hasherezade - Implementação completa do RunPE (https://github.com/hasherezade/)

@Zer0Mem0ry - RunPE de 32 bits escrito em C++ (https://github.com/Zer0Mem0ry/RunPE)

@DidierStevens - Incorporação de PE em VBA

Diversos

Testes

Este código foi testado nas seguintes plataformas:

  • Windows 7 Pro 32 bits + Office 2010 32 bits
  • Windows 7 Pro 64 bits + Office 2016 32 bits
  • Windows 2008 R2 64 bits + Office 2010 64 bits
  • Windows 10 Pro 64 bits + Office 2016 64 bits

Notas adicionais

Aqui está uma tabela de correspondência entre alguns tipos Win32 e VBA:

(*) LongPtr é um tipo "dinâmico", tem 4 Bytes no Office 32 bits e 8 Bytes no Office 64 bits. https://msdn.microsoft.com/fr-fr/library/office/ee691831(v=office.14).aspx

Baixar ferramenta
C++VBAArquitetura
BYTEByte32 & 64
WORDInteger32 & 64
DWORD, ULONG, LONGLong32 & 64
DWORD64LongLong64
HANDLELongPtr(*)32 & 64
LPSTRString32 & 64
LPBYTELongPtr(*)32 & 64