티스토리 뷰

Pwnable/pwnable.kr

[Toddler's Bottle] bof

xxvd 2018. 4. 29. 01:19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#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;
}
 
cs



bof.c 의 소스코드 입니다.


main에서 func로 0xdeadbeef를 넘겨주는데 func에서는 overflowme라는 char형 배열에 gets함수로 값을 받습니다.


그리고 main에서 인자로 받은 key를 0xcafababe와 비교하여 같으면 쉘을 실행합니다.



gets로 값을 입력받으니깐 인자로 받은 key까지 dummy로 덮고 key를 0xcafebabe로 바꿔주면 될 것 같습니다.




여기 이렇게 gdb로 디버깅 해 보니깐 func <+24> 부분에서 함수를 호출하는데, 이 부분은 printf 함수 호출같고,


그 밑줄에 lea  eax,[ ebp - 0x2c ] 부분을 보니깐 gets로 입력받을 overflowme 공간 인 것 같네요


func <+35> 부분은 gets함수의 실행이겠네요


그리고 func <+40> 부분에 0xcafebabe와 ebp+0x8을 비교하는데, ebp+0x8이 func 함수의 인자이겠네요.


그렇다면 overflowme부터 func함수의 인자까지 쓰레기 값으로 덮고, func함수 인자를 0xcafebabe로 바꿔주면 되겠네요!




'Pwnable > pwnable.kr' 카테고리의 다른 글

[Toddler's Bottle] blackjack  (0) 2018.05.17
[Toddler's Bottle] random  (0) 2018.05.09
[Toddler's Bottle] flag  (0) 2018.05.03
[Toddler's Bottle] collision  (0) 2018.04.28
[Toddler's Bottle] fd  (0) 2018.04.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함