[toddler's bottle] bof

폭풍저그머성찡 ㅣ 2018. 11. 30. 18:26

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

void func(int key){

char overflowme[32];

printf("overflow me : ");

gets(overflowme); // smash me!

if(key == 0xcafebabe){

system("/bin/sh");

}

else{

printf("Nah..\n");

}

}

int main(int argc, char* argv[]){

func(0xdeadbeef);

return 0;

}


해공예를 읽자!


func 함수 실행 시점에서 스택 상태


overflowme[32]

sfp

retn

key


즉 넣어줄 값은 a 40개 + \xbe\xba\xfe\xca임 아이 쉽다 ㅎㅎ


근데 안된다. 왜 안되지 하고 뜯어보니 



0x000055555555471a <+0>:     push   rbp

   0x000055555555471b <+1>:     mov    rbp,rsp

   0x000055555555471e <+4>:     sub    rsp,0x30

   0x0000555555554722 <+8>:     mov    DWORD PTR [rbp-0x24],edi

   0x0000555555554725 <+11>:    lea    rdi,[rip+0xe8]        # 0x555555554814

   0x000055555555472c <+18>:    mov    eax,0x0

   0x0000555555554731 <+23>:    call   0x5555555545e0 <printf@plt>

   0x0000555555554736 <+28>:    lea    rax,[rbp-0x20]                                       //rbp-32의 주소를 넣고

   0x000055555555473a <+32>:    mov    rdi,rax

   0x000055555555473d <+35>:    mov    eax,0x0

   0x0000555555554742 <+40>:    call   0x5555555545f0 <gets@plt>                    //문자열을 받는다

   0x0000555555554747 <+45>:    cmp    DWORD PTR [rbp-0x24],0xcafebabe         //비교하는 부분은 바로 그 36번째 자리를 비교한다

   0x000055555555474e <+52>:    jne    0x55555555475e <func+68>

   0x0000555555554750 <+54>:    lea    rdi,[rip+0xcc]        # 0x555555554823

   0x0000555555554757 <+61>:    call   0x5555555545d0 <system@plt>

   0x000055555555475c <+66>:    jmp    0x55555555476a <func+80>

   0x000055555555475e <+68>:    lea    rdi,[rip+0xc6]        # 0x55555555482b

   0x0000555555554765 <+75>:    call   0x5555555545c0 <puts@plt>

   0x000055555555476a <+80>:    nop

   0x000055555555476b <+81>:    leave

   0x000055555555476c <+82>:    ret


즉 a는 32개만 넣어줘도 되는거였다. 왜 이런지는 잘 모르겠다. 코드 영역 주소보니까 뭔가 터치가 있었던 것 같긴 하다.




'write-up > pwnable.kr' 카테고리의 다른 글

[toddler's bottle] random  (0) 2018.11.30
[toddler's bottle] passcode  (0) 2018.11.30
[toddler's bottle] flag  (0) 2018.11.30
[toddler's bottle] col  (0) 2018.11.30
[toddler's bottle] fd  (0) 2018.11.29