System&Write up/CTF

[Pico CTF 2013] overflow1

Jubil 2018. 1. 14. 15:46
반응형

[PicoCTF_2013] overflow1

 

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

32

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <sys/types.h>

#include "dump_stack.h"

 

void vuln(int tmp, char *str) {

    int win = tmp;

    char buf[64];

    strcpy(buf, str);

    dump_stack((void **) buf, 23, (void **&tmp);

    printf("win = %d\n", win);

    if (win == 1) {

        execl("/bin/sh""sh"NULL);

    } else {

        printf("Sorry, you lose.\n");

    }

    exit(0);

}

 

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

    if (argc != 2) {

        printf("Usage: stack_overwrite [str]\n");

        return 1;

    }

 

    uid_t euid = geteuid();

    setresuid(euid, euid, euid);

    vuln(0, argv[1]);

    return 0;

}

Colored by Color Scripter

cs

 

 

vuln 함수의 지역 변수 win의 값이 1이면 쉘을 실행해줍니다.

 

 


 

vuln 함수의 두 번째 파라미터인 strebp+0xc이고 bufebp-0x4c입니다.

 


 

win 변수는 ebp-0xc에 있습니다.

 

 

- 0xc – ( - 0x4c ) = 64

buf의 시작 주소와 win 변수의 차이는 64byte입니다.

 

strcpy 함수의 BOF 취약점을 이용해서 win을 덮겠습니다.


 

쉘을 취득했습니다.

반응형

'System&Write up > CTF' 카테고리의 다른 글

[Pico CTF 2013] overflow4  (0) 2018.01.17
[Pico CTF 2013] overflow3  (0) 2018.01.16
[Pico CTF 2013] overflow2  (0) 2018.01.14
[Plaid CTF 2013] ropasaurusrex  (0) 2018.01.03
[제 1회 Root CTF] Point to pointer! - (529 point)  (0) 2017.12.24