Tag Archive

#stack-overflow

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

6
posts
BLOG2026-08-01
[🥇 Gold 4] read 한 번을 통째로 훔쳐 오는 법 — DreamHack iofile_aw 풀이
blog

[🥇 Gold 4] read 한 번을 통째로 훔쳐 오는 법 — DreamHack iofile_aw 풀이

memcpy 한 줄이 stdin 이 가리키는 FILE 구조체의 앞 0x40바이트를 통째로 갈아끼운다. 그 0x40 안에 _IO_buf_base 가 들어 있어서, 다음에 fgets 가 부르는 read(2) 의 착지점을 내가 정할 수 있다. Full RELRO 라 GOT 는 못 건드리지만 대신 전역 int 하나 — read 길이를 담고 있는 size — 를 512에서 2560으로 키웠다. 그 순간 소스에 "No overflow here" 라고 주석까지 달려 있던 read_command 가 512바이트 스택 버퍼에 568바이트를 부어 넣는 함수가 된다.
#dreamhack#ctf#pwnable+4
 
BLOG2026-07-20
[🥉 Bronze 4] mmap으로 격리한 flag도 포인터 하나면 새어나온다 — DreamHack mmapped 풀이
blog

[🥉 Bronze 4] mmap으로 격리한 flag도 포인터 하나면 새어나온다 — DreamHack mmapped 풀이

flag 파일을 mmap으로 읽기 전용 매핑해두고, 출력 직전에 mprotect로 아예 접근조차 못 하게 막아버린다 — 언뜻 보면 견고한 보호처럼 보인다. 그런데 정작 화면에 출력되는 건 "진짜 flag" 주소가 아니라 전혀 다른 곳에 있는 "가짜" 문자열의 주소다. 스택 버퍼 오버플로우로 이 두 주소가 담긴 지역 변수 두 개를 동시에 덮어쓸 수 있다면 — 보호 대상 자체를 바꿔치기해서 mprotect를 헛손질로 만들고, 출력 대상은 진짜 flag로 바꿔치는 게 가능해진다.
#dreamhack#ctf#pwnable+3
 
BLOG2026-07-20
[🥉 Bronze 3] 크기 변수 자체가 과일이었다 — DreamHack Cherry 풀이
blog

[🥉 Bronze 3] 크기 변수 자체가 과일이었다 — DreamHack Cherry 풀이

read()를 두 번 부르는 아주 짧은 pwnable. 첫 read는 6바이트짜리 버퍼에 16바이트를 받아 명백히 넘치는데, 그 넘친 자리에 하필 두 번째 read가 쓸 크기(buf_size)를 결정하는 변수 자체가 놓여 있었다. 첫 오버플로우로 크기 제한 자체를 풀어버리면, 두 번째 오버플로우는 원하는 만큼 얼마든지 써도 되는 오버플로우가 된다.
#dreamhack#ctf#pwnable+3
 
BLOG2026-07-07
[🥉 Bronze 3] 반환 주소 대신 "열 파일 이름"을 덮는다 — DreamHack bof 풀이
blog

[🥉 Bronze 3] 반환 주소 대신 "열 파일 이름"을 덮는다 — DreamHack bof 풀이

scanf("%144s") 로 스택 버퍼를 넘치는 전형적인 오버플로 문제. 그런데 덮을 것은 반환 주소가 아니다. 버퍼 바로 아래에 read_cat() 이 open() 할 파일명 "./cat" 이 놓여 있어서, 그 자리를 "flag" 로 덮으면 프로그램이 알아서 flag 파일을 열어 출력한다. 버퍼와 파일명 사이 거리 0x80 만 맞추면 끝.
#dreamhack#ctf#pwn+5