본문 바로가기
[ ★ ]Study/War Game

[Toddler's Bottle] pwnable.kr blukat

by nroses-taek 2018. 8. 13.



귀여운 이미지의 새로운 문제가 추가되었다.


숙련된 플레이어가 아니라면 금방 풀 수 있다.... 난 금방 풀 것 같았다

(숙련된 포너가 되고싶다)

아무튼 풀기전에 생각한 것은

가벼운 코드 장난이 있을 것이다. 라고 생각했다


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


main 부터 보면

password를 읽어와서 char 형 password에 넣는다.

그리고 우리가 buf 변수에 입력한 값이랑 비교를 해서

똑같으면 플래그를 준다.

GDB로 보면 우선 값을 그대로 가져오기 때문에 해당 코드에서 스트링으로

읽으면 값이 읽어진다



(나중에 게시글 다시 정리 해야지 ...  전역하고 싶다)



18.08.13 23:15분에 클리어

댓글