BLOG2026-10-20
blog
[🥉 Bronze 1] puts 한 줄로 PIE·카나리를 다 흘리기 — DreamHack Repeat Service 풀이
문자열을 반복 출력해 주는 서비스에 memcpy 반복 루프가 숨어 있다. 복사 길이와 목표 길이를 고르면 마지막 memcpy 청크가 buf 경계를 넘어 카나리·saved rbp·복귀 주소까지 닿는다. PIE·카나리·NX·Full RELRO 가 전부 켜져 있지만, 끝에서 buf 를 그대로 puts 하기 때문에 "채운 경계 바로 뒤"에 있는 값이 새어 나온다. 카나리는 buf+1001 경계에서, PIE 베이스는 socat 런타임에서 main 포인터가 흘러 들어오는 buf+1032 경계에서 각각 누출했다. 복귀 주소를 win() 으로 덮고, EOF 대신 "Too long" 분기로 루프를 빠져나와 셸의 stdin 을 살린 채 system("/bin/sh") 를 띄워 플래그를 회수했다.
#dreamhack#ctf#pwnable+6