pwnable.kr(Toddler's Bottle_blukat)_정세인

CTF 중점 스터디

2019. 10. 20. 21:05

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