-
[35C3 CTF][Pwn] 1996CTF write_up/기타 CTF 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
'CTF write_up > 기타 CTF' 카테고리의 다른 글
[35C3 CTF][Forensic] epic_mount (0) 2019.05.28 [35C3 CTF][Forensic] rare_mount (0) 2019.05.28 [RC3CTF][Forensic] Breaking-News (0) 2019.05.28 [RC3CTF][Forensic] Graphic-Design (0) 2019.05.28 [RC3CTF][Forensic] My Lil Droid (0) 2019.05.28