본문 바로가기

pwnable/pwnable.kr

[pwnable.kr Toddler's Bottle] blukat write up

728x90

 

어렵다면 숙련자라니.. 숙련자가 아니지만 뭔가 어려울 것 같은 느낌이 드는 문구입니다..

3개의 파일이 있었습니다.

 

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

 

코드는 다음과 같습니다.

 

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

 

일단 fgets를 이용해서 password로 fp에서 100만큼 읽어오는 부분이 있어서 저 부분에 bp를 걸고 읽혀져 오는지부터 확인했습니다.

 

(gdb) b *main+64
Breakpoint 1 at 0x40083a
(gdb) r
Starting program: /home/blukat/blukat

Breakpoint 1, 0x000000000040083a in main ()
(gdb) x/32x 0x6010a0
0x6010a0 <password>:    0x3a746163      0x73617020      0x726f7773      0x50203a64
0x6010b0 <password+16>: 0x696d7265      0x6f697373      0x6564206e      0x6465696e
0x6010c0 <password+32>: 0x0000000a      0x00000000      0x00000000      0x00000000
0x6010d0 <password+48>: 0x00000000      0x00000000      0x00000000      0x00000000
0x6010e0 <password+64>: 0x00000000      0x00000000      0x00000000      0x00000000
0x6010f0 <password+80>: 0x00000000      0x00000000      0x00000000      0x00000000
0x601100 <password+96>: 0x00000000      0x00000000      0x00000000      0x00000000
0x601110:       0x00000000      0x00000000      0x00000000      0x00000000
(gdb) x/s 0x6010a0
0x6010a0 <password>:    "cat: password: Permission denied\n"

 

"cat: password: Permission denied\n"가 password로 들어간 것을 확인할 수 있습니다.

 

사실 여기서 꽤 시간이 걸렸습니다.. 도저히 파일을 어떻게 열어보나..

 

근데 문득 password에 들어간 저 문장을 그대로 입력해봤더니 됐습니다..

풀어도 찝찝하네요..?

(gdb) x/s 0x6010a0
0x6010a0 <password>:    "cat: password: Permission denied\n"
(gdb) c
Continuing.
guess the password!
cat: password: Permission denied
congrats! here is your flag: Pl3as_DonT_Miss_youR_GrouP_Perm!!
[Inferior 1 (process 228777) exited normally]
(gdb) q
blukat@prowl:~$ ./blukat
guess the password!
cat: password: Permission denied
congrats! here is your flag: Pl3as_DonT_Miss_youR_GrouP_Perm!!

 

 

잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다

728x90