BLOG2026-08-03
blog
[🥉 Bronze 2] 같은 8바이트를 함수 포인터로도 문자열로도 읽는다 — DreamHack cpp_type_confusion 풀이
Mango 객체를 Apple 로 다운캐스트하는 static_cast 한 줄이 전부다. 두 클래스의 멤버가 같은 오프셋 +8 에 놓여 있는데 한쪽은 함수 포인터, 다른 쪽은 char 배열이라 strncpy 로 8바이트를 쓰면 함수 포인터가 통째로 바뀐다. PIE 가 꺼져 있어 getshell 주소는 고정이고, strncpy 의 NUL 패딩 덕에 3바이트만 보내도 포인터가 정확히 완성된다.
#dreamhack#ctf#pwnable+6