1주차 ctf-중점-스터디 과제
blukat@prowl:~$ ls -l
total 20
-r-xr-sr-x 1 root blukat_pwn 9144 Aug 8 2018 blukat
-rw-r--r-- 1 root root 645 Aug 8 2018 blukat.c
-rw-r----- 1 root blukat_pwn 33 Jan 6 2017 password
파일이 3개가 있다.
먼저 소스코드부터 확인해야겠다.
blukat@prowl:~$ cat blukat.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
char flag[100];
char password[100];
char* key = "3\rG[S/%\x1c\x1d#0?\rIS\x0f\x1c\x1d\x18;,4\x1b\x00\x1bp;5\x0b\x1b\x08\x45+";
void calc_flag(char* s){
int i;
for(i=0; i<strlen(s); i++){
flag[i] = s[i] ^ key[i];
}
printf("%s\n", flag);
}
int main(){
FILE* fp = fopen("/home/blukat/password", "r");
fgets(password, 100, fp);
char buf[100];
printf("guess the password!\n");
fgets(buf, 128, stdin);
if(!strcmp(password, buf)){
printf("congrats! here is your flag: ");
calc_flag(password);
}
else{
printf("wrong guess!\n");
exit(0);
}
return 0;
}
코드를 분석해보자.
password라는 파일을 읽기형식으로 열고 fgets를 이용해서 /home/blukat/password 에서 100만큼 읽어서 password에 저장한다.
그리고 또 다른 100의 배열을 선언하고 128만큼 buf에다가 넣을 값을 입력받는다.
password랑 buf랑 비교해서 맞으면 flag를 주고 아니면 wrong guess를 출력하고 프로그램이 종료된다.
몇 번을 돌려봤지만 password의 내용을 알 수 없는 한 문제가 풀리지 않는다. password,buf
두 배열의 내용 중 아는 것은 하나도 없기 때문에 추측할 기미조차 안 보였다.
혹시나 공백인가 해서 집어넣었지만 되지 않았다.
그래서 password파일을 보려고 cat password를 했다.
blukat@prowl:~$ cat password
cat: password: Permission denied
막혀있다고 뜬다.
어떻게든 password를 봐야겠다 싶어서 생각을 하다가 왜 password가 안 봐질까 하고
id로 내 권한을 보았다.
blukat@prowl:~$ id
uid=1104(blukat) gid=1104(blukat) groups=1104(blukat),1105(blukat_pwn)
음? 그룹이 2개로 나온다.
이 사용자는 blukat그룹 뿐만 아니라 blukat_pwn 그룹에도 소속되어있다.
-rw-r----- 1 root blukat_pwn 33 Jan 6 2017 password
password파일은 blukat_pwn 그룹에 소속되어있는 사용자들은 읽을 수 있게 해 놓았다.
다시 한 번 cat password를 해봤지만 Permission denied라고 떴다.
논리적으로 생각을 해보면 무조건 파일이 보여야 한다.
조금 더 머리를 굴려보니 cat: password: Permission denied
이 문장이 바로 password에 저장된 문자 아닐까 하고 생각을 해서 실행을 시켰더니
blukat@prowl:~$ ./blukat
guess the password!
cat: password: Permission denied
congrats! here is your flag: Pl3as_DonT_Miss_youR_GrouP_Perm!!
오예 답이 맞았다. pwnable.kr 문제 중에서 유일하게 답지를 안보고 풀었던 것이라서
기분이 좋았다
flag는 Pl3as_DonT_Miss_youR_GrouP_Perm!!
이 문장만 제출하면 된다.
'CTF 중점 스터디' 카테고리의 다른 글
N00bCTF - What is bof? Write up (0) | 2019.10.27 |
---|---|
N00bCTF Where_is_flag 풀이 (0) | 2019.10.27 |
Suninatas 16 Write-up (0) | 2019.10.20 |
Wargame.kr - md5 password _ Write up (0) | 2019.10.20 |
CryptixCTF Secret Code 풀이 (0) | 2019.10.14 |