
PNG 파일의 픽셀에 PowerShell 스크립트를 인코딩하고 실행할 원라이너를 생성합니다.
PowerShell 스크립트를 PNG 파일의 픽셀에 인코딩하고 실행할 원라이너를 생성합니다
Invoke-PSImage는 PowerShell 스크립트를 가져와 해당 스크립트의 바이트를 PNG 이미지의 픽셀로 인코딩합니다. 파일에서 또는 웹에서 실행할 원라이너를 생성합니다.
페이로드 데이터만 사용하여 새 이미지를 생성하거나, 기존 이미지의 최하위 바이트에 페이로드를 삽입하여 실제 사진처럼 보이게 할 수 있습니다. 이미지는 PNG로 저장되며, 데이터가 색상 자체에 저장되므로 무손실 압축이 가능하며 페이로드 실행 능력에 영향을 미치지 않습니다. 새 이미지를 생성할 때 일반 PowerShell 스크립트는 실제로 상당히 압축되어 일반적으로 원본 스크립트의 약 50% 파일 크기의 PNG를 생성합니다.
삽입 방법에서는 각 픽셀의 2개 색상 값 중 최하위 4비트를 사용하여 페이로드를 저장합니다. 그 결과 이미지 품질이 저하되지만 여전히 괜찮아 보입니다. 대부분의 이미지 유형을 입력으로 받을 수 있지만, 무손실이 필요하기 때문에 출력은 항상 PNG입니다. 이미지의 각 픽셀은 스크립트의 1바이트를 저장하는 데 사용되므로, 스크립트의 바이트 수 이상의 픽셀이 있는 이미지가 필요합니다. 이는 매우 쉬운데, 예를 들어 Invoke-Mimikatz는 1920x1200 이미지에 맞습니다.
-Script [파일경로] 이미지에 삽입할 스크립트의 경로입니다.
-Out [파일경로] 결과 이미지를 저장할 파일입니다(이미지는 PNG가 됩니다).
-Image [파일경로] 스크립트를 삽입할 이미지입니다. (선택 사항)
-WebRequest Net.WebClient를 사용하여 웹에서 이미지를 읽기 위한 명령을 출력합니다. 이미지를 호스팅하고 명령에 URL을 삽입해야 합니다.
-PictureBox System.Windows.Forms.PictureBox를 사용하여 웹에서 이미지를 읽기 위한 명령을 출력합니다. 이미지를 호스팅하고 명령에 URL을 삽입해야 합니다.
스크립트 "Invoke-Mimikatz.ps1"이 삽입된 이미지를 생성하고 디스크에서 실행할 원라이너를 출력합니다:
PS>Import-Module .\Invoke-PSImage.ps1
PS>Invoke-PSImage -Script .\Invoke-Mimikatz.ps1 -Out .\evil-kiwi.png -Image .\kiwi.jpg
[Oneliner to execute from a file]
스크립트 "Invoke-Mimikatz.ps1"이 삽입된 이미지를 생성하고 웹에서 실행할 원라이너를 출력합니다(이미지를 호스팅하고 URL을 편집해야 함):
PS>Import-Module .\Invoke-PSImage.ps1
PS>Invoke-PSImage -Script .\Invoke-Mimikatz.ps1 -Out .\evil-kiwi.png -Image .\kiwi.jpg -WebRequest
[Oneliner to execute from the web]
웹에 호스팅된 이미지 실행:
