System&Write up/CTF

[Pico CTF 2013] overflow4

Jubil 2018. 1. 17. 13:02
반응형

[PicoCTF-2013] overflow4

 

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

#include <stdio.h>

#include <string.h>

#include <unistd.h>

#include <sys/types.h>

#include "dump_stack.h"

 

/*

 * Goal: Get the program to run a shell.

 */

 

void vuln(char *str) {

    char buf[64];

    strcpy(buf, str);

    dump_stack((void **) buf, 21, (void **&str);

}

 

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

    if (argc != 2) {

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

        return 1;

    }

 

    uid_t euid = geteuid();

    setresuid(euid, euid, euid);

    vuln(argv[1]);

    return 0;

}

Colored by Color Scripter

cs

 

 


 

overflow3번과는 다르게 shell 함수가 없고 NX가 걸려있지 않으니, shellcode를 이용하겠습니다.

 


 

buf의 위치는 ebp-0x48이고, return addressebp+0x4에 위치하기 때문에 서로 76byte만큼 차이가 납니다.

strcpy 함수의 BOF 취약점을 이용해서 return address를 변조할 수 있겠네요!

 

 

셸코드를 이용할 때, ASLR이 있으면 힘드니, setarch `uname –m` -R 로 아키텍처를 넘겨줍니다.

 


 

그리고 –RASLR를 풀어줍니다.

 

그러면 쉘이 하나 뜨는데 ASLR이 해제된 상태입니다!

 

 

이러면 아무 방해 없이 셸코드가 올려진 buf의 위치를 찾고 return address를 셸코드가 있는 위치로 바꿔주면 됩니다.

 

 


 

셸코드의 시작 주소가 0xffffd530이라는 것을 구했으니, return address를 변조하겠습니다.

 

 


 

쉘을 취득했습니다.

반응형

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

[Pico CTF 2013] rop1  (0) 2018.01.18
[Pico CTF 2013] overflow5  (0) 2018.01.18
[Pico CTF 2013] overflow3  (0) 2018.01.16
[Pico CTF 2013] overflow2  (0) 2018.01.14
[Pico CTF 2013] overflow1  (0) 2018.01.14