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
'pwnable > pwnable.kr' 카테고리의 다른 글
[pwnable.kr Toddler's Bottle] horcruxes write up (0) | 2019.08.29 |
---|---|
[pwnable.kr Toddler's Bottle] unlink write up (0) | 2019.08.28 |
[pwnable.kr Toddler's Bottle] asm write up (0) | 2019.08.27 |
[pwnable.kr Toddler's Bottle] memcpy write up (0) | 2019.08.25 |
[pwnable.kr Toddler's Bottle] uaf write up (0) | 2019.08.22 |