CTF write_up/기타 CTF

[35C3 CTF][Pwn] 1996

ws1004 2019. 5. 28. 14:37

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#include <iostream>

#include <unistd.h>

#include <stdlib.h>

 

using namespace std;

 

void spawn_shell() {

    char* args[] = {(char*)"/bin/bash"NULL};

    execve("/bin/bash", args, NULL);

}

 

int main() {

    char buf[1024];

 

    cout << "Which environment variable do you want to read? ";

    cin >> buf;

 

    cout << buf << "=" << getenv(buf) << endl;

}

 

Spawn_shell함수는 있지만 main함수에는 쓰여서 의심이 갔습니다.

gdb 이용해서 분석을 해보겠습니다.

소스코드 에서는 buf 1024만큼의 크기를 줬는데 gdb 확인해본 결과 0x408 = 1032만큼의 크기가 주어져 있습니다.

그렇다면 다음과 같이 이루어져 있는 같습니다.

buf[1024] + dummy[8] + SFP[8] + RET[8] 되어 있는 같습니다.

1024+8+8+8=1048 만큼 무작위로 입력을 해준 뒤에 main함수에 없엇던 spawn_shell함수를 호출해서 확인해 보도록 하겠습니다.

Spawn_shell 함수의 시작 주소는 400897입니다.

 

Flag.txt 파일을 확인했더니 flag값이 나왔습니다.

 

Flag : 35C3_B29A2800780D85CFC346CE5D64F52E59C8D12C14