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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
aggrokatz — Aggrokatz는 Cobalt Strike용 애그레서 플러그인 확장으로, pypykatz가 비콘과 원격으로 인터페이스할 수 있게 해주며, 파일을 다운로드하거나 비콘에 의심스러운 코드를 업로드하지 않고도 LSASS 덤프 파일과 레지스트리 하이브 파일을 파싱하여 자격 증명 및 기타 비밀 정보를 추출할 수 있습니다. | Kitploit
도구/GitHubGitHub/sec-consult/aggrokatz
Exploit FrameworksPost-ExploitationPenetration TestingRed TeamingPayload Development
GitHubsec-consult/aggrokatz

aggrokatz

Aggrokatz는 Cobalt Strike용 애그레서 플러그인 확장으로, pypykatz가 비콘과 원격으로 인터페이스할 수 있게 해주며, 파일을 다운로드하거나 비콘에 의심스러운 코드를 업로드하지 않고도 LSASS 덤프 파일과 레지스트리 하이브 파일을 파싱하여 자격 증명 및 기타 비밀 정보를 추출할 수 있습니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

aggrokatz

aggro_card

이게 뭔가요?

aggrokatz는 CobaltStrike용 Aggressor 플러그인 확장 프로그램으로, pypykatz가 원격으로 비콘과 인터페이스할 수 있게 해줍니다.
현재 버전의 aggrokatz는 pypykatz가 LSASS 덤프 파일과 레지스트리 하이브 파일을 파싱하여 자격 증명 및 기타 저장된 비밀을 추출할 수 있도록 하며, 파일을 다운로드하거나 비콘에 의심스러운 코드를 업로드하지 않고도 수행합니다 (어차피 Cobalt Strike는 이미 설치되어 있습니다). 향후 이 프로젝트는 모든 DPAPI 비밀 검색 및 복호화, 케르베로스팅 등 은밀한 작업을 위한 추가 기능을 제공하는 것을 목표로 합니다.

이 도구 릴리스에 대한 짧은 블로그 포스트를 게시했으며, 거기에는 몇몇 스크린샷도 포함되어 있습니다.

중요 사항 - 반드시 읽어주세요

LSASS/레지스트리 덤프는 이 프로젝트의 목표가 아니며, 오직 파싱만을 목표로 합니다. 이유:

  1. 덤프를 위한 여러 기술이 이미 Cobalt Strike(CS)에서 구현되어 대중에게 널리 공개되어 있습니다. 최근 우리는 base64 대신 원시 바이트를 디스크에 덤프하는 수정된 버전의 CredBandit를 사용하도록 전환했습니다. 멋진 도구이니 확인해보세요.
  2. 우리는 자체 덤프 기술을 비공개로 유지하고자 합니다.

CS 클라이언트에서 스크립트를 수정한 경우 'reload'를 사용하거나 수동으로 언로드한 후 다시 로드하려고 하지 마십시오. 반드시 언로드하고 클라이언트를 닫은 후 새로 시작한 다음 수정된 스크립트를 로드해야 합니다. 그렇지 않으면 여러 버전이 동시에 실행되어 수많은 오류와 이상한 동작이 발생합니다!
원격에서 LSASS/레지스트리 파일을 파싱하는 동안 스크립트를 시작한 특정 비콘과 상호작용하지 마십시오. 일반적으로는 문제가 발생하지 않지만, 보장할 수 없습니다.

설치

  • pycobalt를 설치하고 설정해야 합니다. 해당 GitHub 페이지에 readme가 있습니다.
  • pypykatz를 설치해야 하며, 버전은 >=0.4.8이어야 합니다.
  • Cobalt Strike가 필요합니다.

설정

  • pycobalt의 aggressor.cna 파일이 설정되어 있고 Python 인터프리터의 위치를 인식하고 있는지 확인하십시오.
  • aggrokatz.cna에서 pycobalt_path를 pycobalt.cna를 가리키도록 변경하십시오.
  • CS에서 View > Script Console 및 Cobalt Strike > Script Manager 창을 사용하십시오. Script Manager를 사용하여 aggkatz.cna 스크립트를 로드하십시오.

사용법

  • aggkatz.cna 스크립트가 성공적으로 로드되면 비콘을 마우스 오른쪽 버튼으로 클릭할 때 새로운 메뉴 항목 pypykatz가 나타납니다.
  • 파싱 중에는 Script Console 창에서 디버그 메시지를 볼 수 있습니다.
  • 파싱이 완료되면 결과가 Script Console 창과 비콘 자체 창에 모두 표시됩니다.

LSASS 덤프 파싱 메뉴 매개변수

  • LSASS file: 원격 컴퓨터에 있는 lsass.dmp 파일의 위치입니다. SMB를 통해 공유된 lsass.dmp 파일에 접근하려면 UNC 경로를 사용할 수도 있습니다.
  • chunksize : 한 번에 읽을 최대 크기
  • BOF file : 청크 읽기를 가능하게 하는 BOF 파일(비콘 오브젝트 파일)입니다. 이 파일은 새 청크를 읽을 때마다 업로드되어 메모리에서 실행됩니다.
  • (module) : 파싱할 모듈을 지정합니다. 기본값: all
  • Output : 출력 형식을 지정합니다.
  • Populate Credential tab : 파싱이 성공하면 획득한 모든 자격 증명이 Cobalt Strike의 Credential 탭에서 사용 가능해집니다. 이 기능은 베타 버전입니다.
  • Delete remote file after parsing : 파싱 성공 후 LSASS 덤프 파일이 대상에서 제거됩니다.

레지스트리 덤프 파싱 메뉴 매개변수

  • SYSTEM file: 원격 컴퓨터에 있는 SYSTEM.reg 파일의 위치입니다. SMB를 통해 공유 파일에 접근하려면 UNC 경로를 사용할 수도 있습니다.
  • SAM file (optional): 원격 컴퓨터에 있는 SAM.reg 파일의 위치입니다. SMB를 통해 공유 파일에 접근하려면 UNC 경로를 사용할 수도 있습니다.
  • SECURITY file (optional): 원격 컴퓨터에 있는 SECURITY.reg 파일의 위치입니다. SMB를 통해 공유 파일에 접근하려면 UNC 경로를 사용할 수도 있습니다.
  • SOFTWARE file (optional): 원격 컴퓨터에 있는 SOFTWARE.reg 파일의 위치입니다. SMB를 통해 공유 파일에 접근하려면 UNC 경로를 사용할 수도 있습니다.
  • chunksize : 한 번에 읽을 최대 크기
  • BOF file : 청크 읽기를 가능하게 하는 BOF 파일(비콘 오브젝트 파일)입니다. 이 파일은 새 청크를 읽을 때마다 업로드되어 메모리에서 실행됩니다.
  • Output : 출력 형식을 지정합니다.

제한사항

파일 읽기 BOF는 현재 최대 4GB의 파일 읽기를 지원합니다. 일부 수정을 통해 확장할 수 있지만, 지금까지 그러한 대용량 파일은 관찰되지 않았습니다.

작동 방식

TL;DR

일반적으로 pypykatz의 파서는 디스크에서 일련의 파일 읽기 작업을 수행하지만, aggrokatz의 도움으로 이러한 읽기 작업은 특수 제작된 BOF(비콘 오브젝트 파일)를 사용하여 비콘으로 터널링되어 원격 파일 내용을 청크 단위로 읽을 수 있습니다. 이를 통해 pypykatz는 전체 파일을 읽지 않고 비밀이 위치한 필요한 청크만 가져와 원격 파일에서 모든 비밀을 추출할 수 있습니다.

상세 설명

전체 프로세스를 완전히 이해하려면 두 가지 부분을 강조해야 합니다:

  1. pypykatz가 CobaltStrike와 통합되는 방법
  2. pypykatz가 전체 파일을 읽지 않고 자격 증명을 추출하는 방법

pypykatz와 CobaltStrike 통합

CobaltStrike(에이전트)는 Java로 작성되었고, pypykatz는 Python으로 작성되었습니다. 이것은 문제입니다. 운 좋게도 알려지지 않은 누군가가 pycobalt를 만들어 두 세계 사이에 깔끔한 인터페이스를 제공하며, Python에서 직접 호출할 수 있는 유용한 API를 완벽하게 갖추고 있습니다. pycobalt가 훌륭한 엔지니어링 작품임에도 불구하고, 우리가 지적해야 할 몇 가지 문제점/단점이 있습니다:

  1. pycobalt 프로젝트 신뢰에 관하여:
  • 저자에게 연락을 시도했지만 답변을 받지 못했습니다.
  • 향후 pycobalt 프로젝트가 유지 관리될 것이라고 보장할 수 없습니다.
  • pycobalt 개발의 어떤 측면도 통제하지 않습니다.
  1. 관찰된 기술적 문제점:
  • 일반적으로 pycobalt와 CobaltStrike 사이에 인코딩 문제가 있습니다. 이로 인해 일부 API 호출에서 바이트가 인코더에 의해 손상되어 사용할 수 없는 바이트를 반환합니다. 코드를 확인한 결과 대부분의 인코딩/디코딩 문제는 pycobalt가 Java 프로세스와 통신하기 위해 STDOUT/STDIN을 사용하기 때문이라고 결론지었습니다.
  • 특히 이 프로젝트에 중요한 bof_pack API 호출은 순수 어그레서 스크립트로 구현되어야 했으며, 바이트가 아닌 기본 데이터 구조(문자열 및 정수)를 사용하여 Python에서만 호출되었습니다.
  • pycobalt 패키지는 스레딩 지원 없이 차단 API만 제공합니다. 글쎄요, 적어도 스레딩이 무작위로 깨지는 것을 관찰했지만, 어느 정도 예상했던 것입니다.
  • 차단 API + 스레딩 없음 + 콜백 의존성 = 이를 해결하기 위해 몇 가지 이상한 해킹을 사용해야 했습니다.

카드 더미 위의 자격 증명 파싱

pypykatz와 그 동반 모듈 minidump는 이전에 구현된 것보다 더 효율적인 청크 파싱을 허용하도록 수정되어야 했지만, 이것은 다른 날의 주제입니다.
pypykatz가 pycobalt를 통해 CobaltStrike와 인터페이스할 수 있게 된 후, 다음 단계는 청크 파일 읽기를 허용하는 것이었습니다. 안타깝게도 이 기능은 우리가 본 어떤 C2 솔루션에도 기본적으로 제공되지 않아서 직접 구현해야 했습니다. 이 문제를 해결한 방법은 CobaltStrike의 비콘 오브젝트 파일 인터페이스(줄여서 BOF)를 사용하여 청크 읽기를 구현하는 것입니다. BOF는 별도의 실행 파일이 아닌 이미 실행 중인 비콘의 일부로 비콘에서 실행되는 C 프로그램입니다. 이 인터페이스는 모든 코드가 디스크에 아무것도 쓰지 않고 메모리에서 실행되므로 BOF를 훨씬 더 은밀하게 만들기 때문에 매우 유용합니다.
우리의 BOF 솔루션은 간단한 함수이며 4개의 인수를 받습니다:

  • fileName : (원격) LSASS 덤프 파일 또는 레지스트리 하이브의 전체 파일 경로
  • buffsize : 파일에서 읽을 양(바이트)
  • seekSize : 파일 읽기 작업이 시작될 위치(파일의 시작부터)
  • rplyid : 가능한 충돌을 피하기 위해 응답에 포함될 식별 번호

이러한 매개변수를 통해 (에이전트에서 실행 중인) pypykatz는 파일의 특정 부분을 대상으로 하는 파일 읽기 작업을 비콘(대상 컴퓨터)에 실행할 수 있습니다.
반대쪽(CobaltStrike)에서 aggrokatz는 대상 비콘이 반환하는 모든 메시지를 모니터링하는 콜백을 등록합니다. 메시지의 헤더가 파일 읽기 작업의 헤더와 일치하면 minidump 파일의 청크로 처리되어 minidump 파서로 전달되며, 파서는 결과를 pypykatz로 전달합니다. 더 많은 읽기가 필요한 경우 pypykatz는 minidump 리더를 사용하여 읽기를 수행하고, 이 리더는 BOF 인터페이스를 통해 비콘에 새로운 읽기 명령을 전달합니다. 이 프로세스는 파일이 파싱될 때까지 반복됩니다.

결과

이 방법을 사용하여 약 100개의 LSASS 덤프를 파싱한 후 다음과 같이 말할 수 있습니다 (사용된 청크 크기는 20k):

  • LSASS 덤프 파일 크기(우리의 덤프는 40MB~300MB 사이)에 따라 평균적으로 3,5Mb를 사용하여 모든 비밀을 추출할 수 있었습니다. 이 수치는 LSASS 덤프의 크기보다는 비밀의 양과 선택한 파싱할 패키지의 양에 따라 달라집니다.
  • 성공적인 파싱을 위해 평균 250회의 읽기 작업이 사용되었습니다.
  • 파싱 시간은 지터/슬립 구성에만 의존하므로 측정하는 것이 의미가 없습니다.

단점

  • 각 읽기 작업마다 BOF를 비콘에 업로드해야 합니다. (우리는 은밀히 CobaltStrike의 누군가가 이 글을 보고 기본 파일 읽기 작업을 기본 기능으로 구현하여 이 솔루션을 사용하지 않아도 되기를 바랍니다.)
  • 읽기 작업 수는 지터/슬립이 매우 큰 비콘을 사용하는 경우 문제가 될 수 있습니다.

감사 인사

dcsync - pycobalt의 저자
@anthemtotheego Twitter - CredBandit의 창시자
Nicol Jos @shinepaw - 로고 디자인

도구 다운로드