System&Write up/CTF

[Pico CTF 2013] rop2

Jubil 2018. 1. 19. 01:28
반응형

[PicoCTF-2013] rop2

 

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

#undef _FORTIFY_SOURCE

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

 

char * not_used = "/bin/bash";

 

int not_called() {

    return system("/bin/date");

}

 

void vulnerable_function() {

    char buf[128];

    read(STDIN_FILENO, buf, 256);

}

 

void be_nice_to_people() {

    // /bin/sh is usually symlinked to bash, which usually drops privs. Make

    // sure we don't drop privs if we exec bash, (ie if we call system()).

    gid_t gid = getegid();

    setresgid(gid, gid, gid);

}

 

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

        be_nice_to_people();

    vulnerable_function();

    write(STDOUT_FILENO, "Hello, World\n"13);

}

Colored by Color Scripter

cs

 

vulnerable_function read 함수에서 BOF가 터집니다. 그걸 이용해서 system 함수로 뛰어서 인자로 not_used를 넘겨주면 쉘을 딸 수 있을 것 같습니다.

 

 


 

buf의 시작 주소는 ebp-0x88, return addressebp+0x4입니다.

둘이 140byte만큼 차이 납니다.

 


 

0x080483a0 : system 함수 plt 주소.

 

 


 

0x08048610 : “/bin/bash” 문자열이 있는 주소.

 

 


 

쉘을 취득했습니다.

반응형

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

[Pico CTF 2013] rop4  (0) 2018.01.21
[Pico CTF 2013] rop3  (0) 2018.01.20
[Pico CTF 2013] rop1  (0) 2018.01.18
[Pico CTF 2013] overflow5  (0) 2018.01.18
[Pico CTF 2013] overflow4  (0) 2018.01.17