본문 바로가기
pwnable

[Toddler's Bottle] blukat

by 미스터 J 2024. 5. 11.
반응형

blukat? 이름이 이상하다...

헛소리하다??


#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;
}


문제를 보니 헛소리 같기도 하다;;

key값을 어떻게 적어놓은건지 모르겠다.

우선 strcmp함수를 통해 password 배열과 buf를 비교해서 맞아떨어지면 패스워드가 출력되는 구조인것같다.

또한 calc_flag 함수에 password를 입력한 것을 password배열과 key 값을 하나씩 거듭제곱해 flag에 삽입한다.

 

Q1. buf[100]입력인데 fgets(buf,128,stdin)이므로 128을 입력받을 수 있다. 초과하면 어떻게 되는걸까?

Q2. calc_flag함수를 보면 s[i]^key[i] 인데 글자끼리 거듭제곱은 어떻게 되는걸까?

Q3. 결정적으로 key는 어떤 걸 적은걸까?

 

우선 모르는 것을 정리 해보자

FILE* fopen(const char* filename, const char* mode);

filename : 경로 설정해서 파일 이름 설정

mode : 파일 접근 모드를 설정 r,w,a(append), r+(읽기쓰기), w+(읽기쓰기, 파일존재시 덮어쓰기), a+(읽기, 덧붙이기)

 

A1. fgets()함수는 입력버퍼에 대해 오버플로우 검사를 한다. 인자를 쓴 길이를 초과하는 입력을 받더라도 인자로 쓴 길이만큼 입력한다. 보통 '\n'을 만나면 읽기를 그만 두지만 현재 인자는 100으로 되어 있기 때문에 100글자를 넘어가면 읽기를 중지 한다는 것이다.

A2. 문자는 아스키코드로 대입되기 때문에 문자끼리의 제곱은 아스키코드의 제곱이다.

A3. ....???

결국 오버플로우 문제는 아니었던 것 같다. key에 대한 문제를 해결해야 한다는건데...

char* key 의 길이는 64글자이다.

 

 


여기서 부터는 wirte-up을 참고했다.

우선 정말 어이 없는 문제다ㅋㅋㅋㅋㅋ 왜 헛소리 하다(blukat)으로 문제를 냈는지 이해했다.

우선 blukat의 uid, gid를 참고하면 blukat_pwn의 그룹권한이 있는것을 확인할 수 있고, password라는 파일이 blukat_pwn권한이 있는 것을 확인할 수 있다.

그래서 cat으로 열어보면....

cat: password: Permission denied

라는 문구가 출력된다. 하지만 이 문구는 안 열린것이 아니다! password 파일의 내용이 해당 문구인 것이다 ㅋㅋㅋㅋ

그래서 blukat을 실행시키고, 해당 문구를 넣어주면

허무하게 열리는 것을 확인할 수 있다......

Pl3as_DonT_Miss_youR_GrouP_Perm!!

반응형

'pwnable' 카테고리의 다른 글

[Toddler's Bottle] cmd1  (0) 2024.05.11
[Toddler's Bottle] lotto  (0) 2024.05.11
[Toddler's Bottle] leg  (0) 2024.05.11
[Toddler's Bottle] input  (1) 2024.05.11
[Toddler's Bottle] asm  (0) 2024.05.11