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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
EternalBlueC — C/C++로 재구성된 EternalBlue 스위트: MS17-010 익스플로잇, EternalBlue 취약점 탐지기, DoublePulsar 탐지기 및 DoublePulsar 셸코드 및 DLL 업로더 포함 | Kitploit
도구/GitHubGitHub/bhassani/eternalbluec
Exploit FrameworksVulnerability AnalysisExploitationShellcodeMalware AnalysisPenetration TestingLearning & EducationShellcode GenerationPayload DevelopmentBinary Exploitation
GitHubbhassani/eternalbluec

EternalBlueC

6131381개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

C/C++로 재구성된 EternalBlue 스위트: MS17-010 익스플로잇, EternalBlue 취약점 탐지기, DoublePulsar 탐지기 및 DoublePulsar 셸코드 및 DLL 업로더 포함

저장소 보기

License: GPL v3

EternalBlueC

C/C++로 재구성된 EternalBlue 스위트이며 다음을 포함합니다:

  • MS17-010 익스플로잇 (DoublePulsar 포함)
  • EternalBlue/MS17-010 취약점 탐지기
  • DoublePulsar 탐지기
  • DoublePulsar DLL 업로드
  • DoublePulsar 셸코드 업로드
  • SMB 구조를 이용한 DoublePulsar DLL 업로드
  • SMB 구조를 이용한 DoublePulsar 셸코드 업로드
  • DLL 내부에 포함된 DoublePulsar EXE 업로드

프로젝트 성과

  • 셸코드 업로드 - 완료 및 작동 확인, 원하는 프로세스에 셸코드 주입 가능
  • DLL 업로드 - 완료 및 작동 확인, 원하는 프로세스에 DLL 주입 가능
  • 실행 파일이 포함된 DLL 업로드 - 완료, 원하는 프로세스에 DLL을 주입하고 "mssecsvc.exe"로 실행 파일 드롭

프로젝트 목표

  • DoublePulsar 협상, 세션 설정, 트리 연결, TransNamedPipe 및 Transaction2 패킷을 SMB 구조와 16진수 캡처로 동적으로 생성할 수 있도록 지원
  • EternalBlue 익스플로잇 페이로드를 편집하여 DoublePulsar 임플란트를 제거하고 대신 사용자 정의 셸코드를 전송할 수 있도록 허용
  • EternalBlue 패킷을 동적으로 생성할 수 있도록 지원
  • 모든 IP 주소, 셸코드 또는 파일 경로 등 페이로드에 대한 사용자 입력 요청 및 진행 승인
  • 더 자세한 출력 제공
  • SMB 응답에서 Windows 버전을 화면에 추가
  • 명령줄 매개변수 지원 추가 (DoublepulsarExecute.exe -h 192.168.0.8 -f PopCalculatorShellcode.bin)
  • 소켓 타임아웃 등 추가 오류 검사 추가

EternalBlue 및 DoublePulsar 스위트

  • ms17_vuln_status.cpp - 이 프로그램은 4개의 SMB 패킷을 전송합니다: 1개의 협상, 1개의 세션 설정, 1개의 트리 연결, 1개의 TransNamedPipe 요청. 그런 다음 TransNamedPipeRequest(PeekNamedPipe 요청)의 NT_STATUS 응답을 읽고 SMB 패킷의 NT_STATUS가 0xC0000205(STATUS_INSUFF_SERVER_RESOURCES)인지 확인합니다. 일치하면 대상이 MS17-010에 취약한 것입니다. 패치되지 않은 Windows 7 x64에서 테스트 완료.

ms17vulnstatus

  • doublepulsar_check.cpp - 이 프로그램은 4개의 SMB 패킷을 전송합니다: 1개의 협상, 1개의 세션 설정, 1개의 트리 연결 및 Trans2 SESSION_SETUP 패킷. Trans2 SESSION_SETUP 패킷을 전송할 때, 전송된 멀티플렉스 ID를 Trans2 응답 패킷의 멀티플렉스 ID와 비교합니다(0x51 또는 81). DoublePulsar는 전송된 멀티플렉스 ID를 읽고 ping 명령이 성공하면 Trans2 SESSION_SETUP 응답의 멀티플렉스 ID에 16진수 +10을 반환합니다. 이후 명령을 전송하여 DoublePulsar 백도어를 소멸시킵니다. DoublePulsar 소멸 명령은 SMB 패킷의 타임아웃 매개변수에 있습니다. 이후 DoublePulsar는 비활성 상태가 되지만 시스템에서 제거되지는 않습니다. Windows 7 x64에서 테스트 완료.

doublepulsar_check

  • DoublePulsarXORKeyCalculator.cpp - 이 프로그램은 4개의 SMB 패킷을 전송합니다: 1개의 협상 패킷과 3개의 요청. 마지막 요청은 Trans2 SESSION_SETUP 요청입니다. Trans2 SESSION_SETUP 응답을 수신하고 SMB 서명을 추출합니다(Recvbuff[18] -> Recvbuff[22]). Recvbuff[22]는 아키텍처 유형을 나타냅니다. 값이 1이면 대상은 x64, 0이면 x86/32비트입니다. SMB 서명은 unsigned char 문자에서 unsigned 정수로 변환됩니다.

SMBSignatureWireshark

Recvbuff[18] -> Recvbuff[22]의 값들은 DoublePulsar XOR 키 계산기 함수에 전달되어 unsigned 정수 XOR 키를 생성합니다. 이 키는 DoublePulsar에 업로드할 셸코드 또는 DLL 페이로드를 암호화하는 데 사용됩니다. Windows 7 x64에서 테스트 완료.

샘플 스크린샷:

XORCalculator

FUZZBUNCH의 원본 NSA 바이너리와 동일한 키 XORCalculatorFromNSAbinary

  • DoublePulsar_structure_ping.cpp - 이 프로그램은 4개의 SMB 패킷을 전송합니다: 1개의 협상, 1개의 세션 설정, 1개의 트리 연결 및 Trans2 SESSION_SETUP 패킷. doublepulsar_check.cpp와의 차이점은 이 프로그램이 Wannacry 샘플에서 가져온 하드코딩된 SMB 16진수 문자열 대신 구조체를 사용하여 Trans2 DoublePulsar PING 패킷을 생성한다는 점입니다. 또 다른 차이점은 이 프로그램이 Wannacry 샘플에 있는 하드코딩된 패킷 대신 TreeConnect 패킷을 동적으로 생성한다는 점입니다. 이 프로그램에서 생성된 ping 패킷은 원격 시스템에 DoublePulsar가 설치되어 있는지 알려줍니다.

  • DoublePulsar_structure_exec.cpp - 이 프로그램은 5개의 SMB 패킷을 전송합니다: 1개의 SMB 협상, 1개의 세션 설정, 1개의 트리 연결, 1개의 Doublepulsar Trans2 SESSION_SETUP Ping 패킷 및 1개의 Doublepulsar Trans2 SESSION_SETUP 실행 패킷. Doublepulsar_UploadShellcode.cpp와의 차이점은 이 프로그램이 Wannacry 샘플에서 가져온 하드코딩된 SMB 16진수 문자열 대신 구조체를 사용하여 Trans2 DoublePulsar 실행 패킷을 생성한다는 점입니다.

  • Doublepulsar_UploadDLL.cpp - 이 프로그램은 DLL용입니다. 이 프로그램은 4개의 SMB 패킷과 DLL 데이터를 포함한 SMB Trans2 패킷을 전송합니다: 1개의 협상, 1개의 세션 설정, 1개의 트리 연결, 1개의 Ping Trans2 SESSION_SETUP 요청 및 실행 Trans2 SESSION_SETUP 패킷. Ping Trans2 SESSION_SETUP 요청 패킷을 전송하여 Trans2 SESSION_SETUP 응답 패킷에서 SMB 서명을 얻습니다. 이 서명은 DoublePulsar XOR 키 계산기를 통해 처리됩니다. 그런 다음 프로그램은 DLL 파일을 읽고 64비트 커널 및 사용자랜드 셸코드와 결합하여 DLL을 실행하고, SMB 서명에서 계산된 DoublePulsar XOR 키로 버퍼를 XOR합니다. 메모리를 할당하고 Trans2 패킷을 복사하고 SMB 트랜잭션에 필요한 값(UserID, TreeID, TotalDataCount, DataCount, ByteCount)을 편집한 다음 XOR된 데이터(커널 셸코드 + DLL)를 끝에 복사하여 DoublePulsar에 한 번에 4096바이트씩 전송하는 패킷을 생성합니다. 총 패킷 길이 = 4178. 4096은 XOR 암호화 데이터용입니다. 향후 릴리스에서는 SMB 및 TRANSACTION2 구조체도 구현할 예정입니다.

  • Doublepulsar_UploadShellcode.cpp - 이 프로그램은 5개의 SMB 패킷을 전송합니다: 1개의 협상, 1개의 세션 설정, 1개의 트리 연결, 1개의 Ping Trans2 SESSION_SETUP 패킷 및 1개의 실행 Trans2 SESSION_SETUP 패킷. Trans2 SESSION_SETUP 요청 패킷을 전송하여 TRANS2 SESSION_SETUP 응답 패킷에서 SMB 서명을 얻습니다. 이 서명은 DoublePulsar XOR 키 계산기를 통해 처리됩니다. 그런 다음 프로그램은 커널 셸코드와 샘플 셸코드를 버퍼에 복사하고, SMB 서명에서 계산된 DoublePulsar XOR 키로 버퍼를 XOR합니다. 메모리를 할당하고 Trans2 실행 패킷을 복사하고 SMB 트랜잭션에 필요한 값(UserID, TreeID, TotalDataCount, DataCount, ByteCount)을 편집한 다음 SESSION_SETUP 매개변수와 4096바이트의 XOR된 셸코드 데이터를 끝에 복사하여 DoublePulsar에 총 패킷 길이 4178바이트로 전송합니다. 총 패킷 길이 = 4178. NetBIOS 헤더는 자체 크기를 계산하지 않으므로 NetBIOS 길이는 4174가 됩니다. 이 패킷 중 12바이트는 Doublepulsar SESSION_SETUP 매개변수용입니다. 4096은 XOR 암호화 데이터용입니다. 향후 릴리스에서는 SMB 및 TRANSACTION2 구조체를 사용할 예정입니다.

UploadShellcode

  • zerosum0x0에서 생성한 셸코드 - zerosum0x0은 ETERNALBLUE용 사용자 정의 셸코드를 작성했으며, 약간의 수정을 통해 DOUBLEPULSAR에 재사용할 수 있습니다. 복사된 셸코드의 syscall 덮어쓰기가 이 사용 사례에 불필요했기 때문에 다음과 같이 정의 해제했습니다:
    ;%define SYSCALL_OVERWRITE ; to run at process IRQL in syscall
    다음과 같이 재컴파일: nasm -w-other -o >(xxd -p -c 16 | sed 's/../\x&/g') external/source/shellcode/windows/multi_arch_kernel_queue_apc.asm
    https://github.com/rapid7/metasploit-framework/blob/master/external/source/shellcode/windows/multi_arch_kernel_queue_apc.asm
    https://raw.githubusercontent.com/ninp0/eternalblue/master/eternalblue_kshellcode_x64.asm
    https://raw.githubusercontent.com/ninp0/eternalblue/master/eternalblue_kshellcode_x86.asm
    https://www.rapid7.com/blog/post/2019/10/02/open-source-command-and-control-of-the-doublepulsar-implant/

  • DoublePulsar_UploadExe.cpp - 이 프로그램은 실행 파일용입니다. 실행 파일을 메모리로 읽어들여 Wannacry 런처 DLL에 배치한 후 DoublePulsar를 통해 전송합니다. 1개의 협상, 1개의 세션 설정, 1개의 트리 연결, 1개의 Trans2 Ping 패킷 및 여러 개의 Trans2 exec SESSION_SETUP 패킷으로 구성됩니다. Trans2 Ping 요청 패킷을 전송하여 Trans2 응답 패킷에서 SMB 서명을 얻습니다. 이 서명은 DoublePulsar XOR 키 계산기를 통해 처리됩니다. 그런 다음 프로그램은 EXE 파일을 읽고 64비트 커널 및 사용자랜드 셸코드와 스켈레톤 DLL 파일과 결합한 후 SMB 서명에서 계산된 DoublePulsar XOR 키로 버퍼를 XOR합니다. 메모리를 할당하고 Trans2 실행 패킷을 복사하고 SMB 트랜잭션에 필요한 값(UserID, TreeID, TotalDataCount, DataCount, ByteCount)을 편집한 다음 XOR된 데이터(커널 셸코드 + DLL + 실행 파일)를 끝에 복사하여 DoublePulsar에 한 번에 4096바이트씩 전송하는 패킷을 생성합니다. 총 패킷 길이 = 4178. NetBIOS 헤더는 자체 크기를 계산하지 않으므로 NetBIOS 길이는 4174가 됩니다. 이 패킷 중 12바이트는 Doublepulsar SESSION_SETUP 매개변수용입니다. 4096은 XOR 암호화 데이터용입니다.

  • EternalBlue.cpp - 이 프로그램은 여러 SMB 패킷을 전송합니다: 협상, 세션 설정, 트리 연결 및 여러 NT trans 및 Trans2 패킷. 이 NT trans 패킷은 비정상적으로 구성되어 피해자 컴퓨터의 메모리에서 익스플로잇을 준비합니다. 더 많은 공백 또는 빈 SMB 패킷이 여러 소켓을 통해 피해자의 동일한 포트로 전송됩니다. EternalBlue의 base64 페이로드 대부분은 협상, 세션 설정 및 트리 연결 패킷이 전송된 소켓 1을 통해 전송됩니다. 그런 다음 20개의 추가 소켓이 생성되어 해당 소켓(소켓 321)으로 데이터가 전송됩니다. 이후 소켓 321에 DoublePulsar가 전송됩니다. 그런 다음 프로그램이 소켓을 닫으면 피해자 컴퓨터에서 EternalBlue와 DoublePulsar가 폭발합니다. SMB 연결 해제 및 SMB 로그오프 요청이 전송된 후 연결이 종료됩니다. 이 익스플로잇은 작동하며 Windows 7 x64에서 테스트되었습니다. 인터넷상의 EternalBlue 해설에서 이미 보고된 바와 같이 백도어가 완전히 작동하는 데 약 5초가 걸렸습니다. 더 많은 익스플로잇 시도가 필요할 수 있습니다. 그러나 현재 패킷에서 TreeID 및 UserID가 올바르게 설정되지 않는 버그가 있으며, 이후 릴리스에서 수정될 예정입니다. 이 버그는 TreeID와 UserID가 기본값으로 설정되어 있기 때문에 최근에 켜진 시스템에서는 작동합니다. 이 패킷들은 현재 기본값인 "08 00"으로 설정되어 있으므로 TreeID 및 UserID 값을 업데이트해야 합니다.

Metasploit 모듈

Metasploit의 오픈 소스 DoublePulsar RCE 모듈을 사용하여 기능하는 사용자 정의 Metasploit 모듈을 만들었습니다.

DoublePulsar가 DLL을 실행할 수 있도록 DLL을 생성하고 Wannacry에서 가져온 x64 커널 셸코드(앞에 추가)와 병합하는 로직으로 변경했습니다.

msfconsole

추가 교육용 코드

저장소에는 교육 목적으로 다음 파일도 포함되어 있으며, 이에 대한 지원은 제공되지 않습니다:

  • DoublePulsar x86/x64 DLL 업로드 Python 스크립트

  • EternalBlue 올인원 바이너리

  • 다중 아키텍처 커널 큐 APC 어셈블리 코드 및 Windows x86/x64 다중 아키텍처 커널 링 0에서 링 3으로의 Queued APC 커널 코드

  • worawit의 EternalBlue x64/x86 커널 페이로드 셸코드

  • Eternalblue 재생 파일

도구 다운로드
EternalBlue
EternalBlue_cmd
eternalbluepackets