Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
GadgetToJScript — .NET 직렬화 가젯(gadget)을 생성하는 도구로, JS/VBS/VBA 기반 스크립트에서 BinaryFormatter를 사용하여 역직렬화할 때 .NET 어셈블리 로드/실행을 트리거할 수 있습니다. | Kitploit
도구/GitHubGitHub/med0x2e/gadgettojscript
Payload GenerationPersistence MechanismsExploitationLateral MovementPost-ExploitationRed TeamingPayload DevelopmentAdversarial Attack
GitHubmed0x2e/gadgettojscript

GadgetToJScript

.NET 직렬화 가젯(gadget)을 생성하는 도구로, JS/VBS/VBA 기반 스크립트에서 BinaryFormatter를 사용하여 역직렬화할 때 .NET 어셈블리 로드/실행을 트리거할 수 있습니다.

저장소 보기
1.1k17875년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

설명

.NET 직렬화 가젯을 생성하는 도구로, JS/VBS/VBA 스크립트에서 BinaryFormatter를 사용하여 역직렬화할 때 .NET 어셈블리 로드/실행을 트리거할 수 있습니다.
현재 가젯은 jscript/vbscript/vba에서 BinaryFormatter를 사용하여 역직렬화할 때 Activator.CreateInstance() 호출을 트리거합니다. 즉, 기본/public 생성자를 통해 선택한 .NET 어셈블리의 실행을 트리거하는 데 사용할 수 있습니다.

이 도구는 주로 RT(레드팀) 임무(초기 접근, 측면 이동, 지속성)를 위한 WSH 스크립트 무기화를 자동화하기 위해 만들어졌습니다. PoC에 사용된 셸코드 로더는 제거되었으며 TestAssembly 프로젝트에 구현된 예제 어셈블리로 대체되었습니다.

세부 사항:

  • AmsiEnable 레지스트리 키를 업데이트하거나 loadlibrary(AMSI.dll)를 하이재킹하지 않고 AMSI를 우회합니다.
  • "Assembly.Load" 및 ActivitySurrogateSelector 유형 검사를 차단하기 위해 새로 도입된 .NET 4.8+ 제어를 우회합니다.
  • 이 가젯은 .NET Framework 3.5부터 4.8+ 환경까지 대상으로 하는 페이로드의 올바른 역직렬화를 지원합니다.
  • ActivitySurrogateSelector에 의존하여 Surrogate 클래스를 생성합니다. 이 클래스는 "Activator.CreateInstance(Assembly.Load(your_assembly_bytes).GetType())" 호출을 트리거하도록 구성된 가젯을 역직렬화하는 래퍼 역할을 합니다.
  • TextFormattingRunProperties 기반 가젯을 첫 번째 역직렬화 단계로 활용하여 ActivitySurrogateSelector 유형 검사를 비활성화함으로써 최근 (.NET Framework 4.8+)에 도입된 수정 사항을 우회합니다.
  • 주로 .NET 기반 COM 개체를 노출하는 데 의존하지 않으므로 d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class)를 호출할 필요가 없습니다.
  • 델리게이트는 역직렬화 중에 페이로드 실행을 트리거하는 데만 사용됩니다(Func<Assembly, IEnumerable>). 가젯 요소의 올바른 연결을 위한 요구 사항입니다.
  • 직렬화된 가젯 또는 스트림 길이는 런타임에 계산되어 생성된 WSH 스크립트에 자동으로 채워집니다(VBA에는 필요하지 않음).
  • .NET 기반 COM 구성 요소의 등록 없는(registration-free) 활성화에 의존하는 VBS/VBA 및 JS/HTA 스크립트를 생성합니다.

사용법 및 참고 사항:

Release 폴더에 있는 바이너리를 사용하거나 VS2017을 사용하여 프로젝트를 .NET 버전 3.5 또는 4.x로 대상 재지정한 후 G2JS를 소스에서 빌드할 수 있습니다.

  • .NET 3.5 버전의 G2JS를 사용하여:

    • .NET Framework 4.x를 사용할 수 없거나 4.8 미만인 환경에서 실행되도록 대상으로 하는 WSH 스크립트를 생성합니다. (3.5는 최소 요구 .NET Framework 버전입니다.) 이를 위해서는 C# 페이로드 또는 .NET 어셈블리를 .NET Framework <= 3.5로 빌드해야 합니다.
  • .NET 4.x 버전의 G2JS를 사용하여:

    • .NET Framework 4.x를 사용할 수 있는 환경에서 실행되도록 설계된 WSH 스크립트를 생성합니다. (4.8+ 포함)
    • “--bypass” 옵션을 사용하여 유형 검사를 우회하는 .NET 4.8+ 환경용 WSH 스크립트를 생성합니다.
  • C# 소스 코드 페이로드는 클래스의 기본 public 생성자 안에 배치해야 합니다. (jscript에서 Mimikatz를 실행하는 예: https://gist.github.com/med0x2e/cc10d42b1f581507013e801da2651c74)

  • 테스트는 다양한 .NET Framework 버전이 설치된 최신 Windows 10 Enterprise 1909 릴리스와 Windows 7에서 수행되었습니다.

  • GadgetToJScript.exe를 사용하여 WSH 스크립트를 생성할 때 Windows Defender가 꺼져 있는지 확인하십시오. 스크립트가 생성된 후에는 다시 켤 수 있습니다.

OPSEC 팁:

.NET 4.8+ 유형 검사를 여전히 우회할 수 있는 WSH Registration-free JScript/HTA 스크립트를 생성하려면 .NET 3.5 버전의 G2JS를 사용하십시오. 첫 번째 TextFormattingRunProperties 스테이지 가젯을 사용하여 해당 완화 조치를 비활성화할 필요가 없습니다. .NET 4.8+ 환경을 대상으로 하는 Reg-free JScript/HTA 페이로드를 실행하기 위한 더 좋고/깔끔한 우회 방법으로 간주하십시오. 다음이 필요하지 않기 때문입니다:

  • 첫 번째 스테이지 가젯
  • Shell 개체 만들기
  • 레지스트리에서 현재 .NET Framework 버전 읽기
  • COMPLUS_Version 환경 변수 설정.

-> 더 적은 IOC + 3.5 < .NET < 4.x 환경을 대상으로 함

크레딧 및 참고 자료

이 도구는 다음 사람들의 훌륭한 연구/작업을 기반으로 합니다:

  • @tyranid https://googleprojectzero.blogspot.com/2017/04/ => 직렬화/역직렬화가 불가능한 클래스를 직렬화/역직렬화할 수 있게 했습니다)
  • @pwntester yoserial.net 프로젝트 https://github.com/pwntester/ysoserial.net
  • @olekmirosh https://community.microfocus.com/t5/Security-Research-Blog/New-NET-deserialization-gadget-for-compact-payload-When-size/ba-p/1763282
  • @monoxgas https://silentbreaksecurity.com/re-animating-activitysurrogateselector/
  • @zcgonvh http://www.zcgonvh.com/post/weaponizing_CVE-2020-0688_and_about_dotnet_deserialize_vulnerability.html

면책 조항

GadgetToJScript는 공인된 레드 팀링(red teaming) 및/또는 비영리 교육 목적으로만 사용해야 합니다. 이 소프트웨어의 오용에 대한 책임은 작성자에게 없습니다. 본인 소유의 네트워크 및/또는 네트워크 소유자의 허가를 받은 상태에서 사용하십시오.

도구 다운로드
-w, --scriptType=jsjs, vbs, vba 또는 hta로 설정합니다
-a, --assembly=TestAssembly.dll.NET 어셈블리, 예: -a C:\Users\userX\Desktop\shellcode_loader.dll/exe, 또는 -c 명령줄 스위치를 사용하여 C# 소스 파일을 대신 지정할 수 있습니다.
-c, --csfile=TestAssembly.csC# 소스 코드 파일, 예: -c C:\Users\userX\Desktop\shellcode_loader.cs, 클래스의 기본 생성자 안에 코드를 배치하고 -d 명령줄 스위치를 사용하여 필요한 종속성을 지정하십시오.
-d, --references=Example.dll참조 어셈블리, 예: -d System.Window- s.Forms.dll, System.dll
-b, --bypass.NET 버전 4.8+에 도입된 유형 검사 제어를 우회합니다. 기본값은 false로 설정되어 있으며, WSH 스크립트가 .NET 버전 > 4.8+ 환경에서 실행되도록 생성되는 경우 true(--bypass/-b)로 설정하십시오. 이 옵션은 .NET 4.x G2JS 실행 파일에서만 사용해야 합니다.
-e, --encodeType=b64VBA 가젯 인코딩: b64 또는 hex(기본값은 b64)
-o, --output=output생성된 페이로드 출력 파일, 예: -o C:\Users\userX\Desktop\output (확장자 없음)
-r, --regfree.NET 기반 COM 구성 요소의 등록 없는(registration-free) 활성화, JS/HTA 스크립트에만 적용됩니다.
-h, --help도움말 표시