Tag Archive

#format-string

이 태그가 포함된 글을 최신순으로 모아봤어요.

6
posts
BLOG2026-08-06
[🥇 Gold 4] warnx 가 형식 문자열을 그대로 받는다 — DreamHack string 풀이
blog

[🥇 Gold 4] warnx 가 형식 문자열을 그대로 받는다 — DreamHack string 풀이

print() 가 사용자 입력을 warnx(buf) 로 그대로 넘긴다. buf 가 형식 문자열이 되니 %hn 으로 임의 주소에 쓸 수 있고, No PIE + Partial RELRO 라 GOT 주소는 고정에 쓰기까지 된다. warnx@got 를 system 으로 바꾸고 buf 에 "/bin/sh" 를 넣으면 셸이 열린다. 다만 문제가 준 libc.so.6 는 원격과 다른 빌드였다. 오프셋을 믿으면 엉뚱한 코드를 부르니 base 는 ELF 매직으로, system 은 프롤로그 바이트로 실측해서 확정했다.
#dreamhack#ctf#pwnable+5
 
BLOG2026-07-11
[🥇 Gold 4] printf(buf) 한 줄로 전역 변수를 1337 로 — DreamHack Format String Bug 풀이
blog

[🥇 Gold 4] printf(buf) 한 줄로 전역 변수를 1337 로 — DreamHack Format String Bug 풀이

printf 에 사용자 입력을 형식 문자열로 그대로 넘기는 고전 버그. 64비트 PIE 라 %p 로 코드 주소를 먼저 흘려 base 를 복원하고, %n 으로 전역 changeme 에 1337 을 써넣어 system("/bin/sh") 를 연다. while(1) 루프 덕에 leak 과 write 를 두 번에 나눠 처리했다. 원격 glibc 는 leak 슬롯이 한 칸 앞이라 오프셋을 다시 잡아야 했던 삽질도 함께.
#dreamhack#ctf#pwnable+4
 
BLOG2026-07-11
[🌱 Sprout] 널 하나 빠졌을 뿐인데 flag 가 새어나온다 — DreamHack memory_leakage 풀이
blog

[🌱 Sprout] 널 하나 빠졌을 뿐인데 flag 가 새어나온다 — DreamHack memory_leakage 풀이

read 는 버퍼 끝에 널을 붙이지 않는다. 16바이트 name 을 널 없이 가득 채우면, printf("%s", name) 이 경계를 넘어 바로 뒤에 붙은 age 와 flag_buf 까지 읽어버린다. flag_buf 에는 case 3 이 /flag 를 미리 담아두니, 출력 한 번으로 flag 가 통째로 새어나온다. 오버플로우 없이 널 하나의 부재만으로 뚫는 메모리 유출.
#dreamhack#ctf#pwnable+4