
Lenovo Diagnostics Driver EoP - 임의 R/W
Lenovo Diagnostics 드라이버의 잘못된 액세스 제어로 인해 낮은 권한의 사용자가 디바이스 IOCTL을 발행하여 임의의 물리적/가상 메모리 읽기/쓰기를 수행할 수 있습니다.
ch3rn0byl 님의 도움에 감사드립니다 (그리고 저는 그의 함수 두 개를 100% 그대로 베꼈습니다).
IOCTL 0x222000:
IOCTL 0x222008/0x22200C:
IOCTL 0x222010:
IOCTL 0x222014:
MmMapIoSpace를 통한 쓰기
이 IOCTL은 입력 버퍼에서 제공된 포인터의 값을 매핑된 물리적 메모리로 복사합니다.
MmPteBase 및 기타 전제 조건을 해결하기 위해 물리 메모리 범위 0x1000 - 0x10000에서 8개의 0 바이트를 검색하여 물리적 "스왑" 공간을 찾습니다.
해당 공간을 찾으면 IOCTL 0x222014를 통해 가상 메모리를 해당 스왑 공간에 복사하고 IOCTL 0x222010을 사용하여 다시 읽습니다.
현재로서는 모든 가상 읽기가 이 "스왑" 공간을 사용하여 수행됩니다.
가상 읽기/쓰기를 하는 가장 좋은 방법일까요? 아마 아닐 겁니다.
작동하나요? 예.
아, 그리고 각자의 오프셋은 직접 확인하세요 -- 이건 HVCI가 비활성화된 Windows 11 21H2에서 테스트되었습니다.