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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
PageTableInjection — 코드 인젝션, pagetables pml4를 통해 악성 페이로드 주입. | Kitploit
도구/GitHubGitHub/kkent030315/pagetableinjection
Memory ForensicsExploitationBinary Exploitation
GitHubkkent030315/pagetableinjection

PageTableInjection

코드 인젝션, pagetables pml4를 통해 악성 페이로드 주입.

저장소 보기웹사이트
244605년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

PageTableInjection

코드 인젝션, 페이지 테이블 pml4를 통해 악성 페이로드를 주입합니다.

소개

이것은 페이지 테이블 인젝션 기술의 개념 증명으로, 임의의 사용자 프로세스에 악성 코드를 주입합니다.
Windows(및 일부 최신 OS)에서는 모든 프로세스가 자체 PML4, 즉 디렉토리 테이블 베이스를 가지고 있습니다. 따라서 프로세스 A는 API 없이 프로세스 B에 접근할 수 없습니다. 하지만 임의의 PML4 엔트리를 주입할 수 있다면 어떨까요? 물론 PML4 엔트리는 해당 엔트리(PDP, PD, PT)의 물리적 주소를 가리키며, 이는 백킹 프로세스와 정확히 동일합니다.

타겟 프로세스에 악성 PML4 엔트리를 주입하려면, 악성 PML4 엔트리를 백업하는 실제 상주 페이지(물리적 메모리)가 필요합니다. 따라서 문자 그대로 상주 페이지는 반드시 상주해야 합니다. 그렇지 않으면 MMU가 물리적 주소로 변환하는 동안 MMU가 예상하는 것이 없고, Windows 메모리 관리자도 예상하는 것이 없기 때문에 시스템이 충돌하거나 불안정해질 수 있습니다.

백킹 프로세스와 타겟 프로세스의 버퍼를 모두 살펴보겠습니다. 이 경우 버퍼는 다음과 같습니다.

  • 백킹 프로세스 VA: 0x1A45F810000
  • 배포 프로세스 주입 VA: 0x6EA45F810000

다음 단계로 넘어가기 전에, 여러분 중 일부는 두 번째 주소(0x6EA45F810000)가 이상해 보일 수 있습니다. 일반적으로 malloc이나 VirtualAlloc을 통해 버퍼를 할당하면 가상 주소는 0x17C7CAC0000, 0x23BE9D80000, 0x19FE76F0000 등과 같은 형태여야 하기 때문입니다. 이는 악성 PML4 엔트리가 Windows의 메모리 관리자에 관여하지 않고 관리되지도 않기 때문입니다. 물론 Windows 64비트 프로세스의 모든 가상 주소는 사용자 메모리 범위 내에서 어떤 값이라도 가질 수 있습니다.

따라서 두 주소를 살펴보면...

root@kitploit:~
0: kd> .process ffff9803d8037080
Implicit process is now ffff9803`d8037080
0: kd> db 0x6EA45F810000 l2
00006ea4`5f810000  4d 5a       MZ

0: kd> !vtop 7968b000 0x6EA45F810000
Amd64VtoP: Virt 00006ea45f810000, pagedir 000000007968b000
Amd64VtoP: PML4E 000000007968b6e8
Amd64VtoP: PDPE 000000005849b488
Amd64VtoP: PDE 0000000059e9c7e0
Amd64VtoP: PTE 000000003251d080
Amd64VtoP: Mapped phys 0000000014306000
Virtual address 6ea45f810000 translates to physical address 14306000.
root@kitploit:~
0: kd> .process ffff9803d9f6b080
Implicit process is now ffff9803`d9f6b080
0: kd> db 0x1A45F810000 l2
000001a4`5f810000  4d 5a       MZ

0: kd> !vtop 564f6000 0x1A45F810000
Amd64VtoP: Virt 000001a45f810000, pagedir 00000000564f6000
Amd64VtoP: PML4E 00000000564f6018
Amd64VtoP: PDPE 000000005849b488
Amd64VtoP: PDE 0000000059e9c7e0
Amd64VtoP: PTE 000000003251d080
Amd64VtoP: Mapped phys 0000000014306000
Virtual address 1a45f810000 translates to physical address 14306000.

두 주소 모두 정확히 동일한 페이지 테이블 엔트리(PDP, PD, PT 및 물리적 주소)에 대응합니다. 따라서 백킹 프로세스의 버퍼를 수정하면 타겟 프로세스에서도 변경됩니다. 이는 Windows의 공유 메모리와 매우 유사하지만, 차이점은 타겟 프로세스의 메모리 영역이 해당 프로세스의 VAD 엔트리에 절대 표시되지 않는다는 것입니다. 그러나 반대로 백킹 프로세스의 버퍼가 해제되면 타겟 프로세스에서도 해제되지만, 타겟 프로세스의 페이지 테이블 엔트리는 정리되지 않습니다. 이는 메모리 관리자가 MEMORY_MANAGEMENT 버그체크를 발생시키거나, CPU에서 더 심각한 트리플 폴트를 유발할 수 있습니다.

문제점

이 기술은 앞서 언급했듯이 주입된 악성 PML4 엔트리가 Windows 메모리 관리자나 커널에 관여하지 않기 때문에 심각한 안정성 문제가 있습니다. 또한 백킹 프로세스가 타겟 프로세스가 종료될 때까지 계속 살아 있을 것이라는 보장이 없으며, 백킹 프로세스가 종료될 때 타겟 프로세스가 악성 PML4 엔트리를 정리할 방법도 없습니다.

라이선스

MIT 저작권 Kento Oki <[email protected]>

소스 코드에는 외부 콘텐츠가 포함될 수 있으며, 해당 콘텐츠는 각 저작권자에게 귀속됩니다.

도구 다운로드