#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의 범위 지정이 100보다 크게 되었어서
오버플로우인가 하고 우선 gdb로 까봤다.
그러고 좀 요래조래 둘러보다가
그냥 별 생각없이 password를 읽은 뒤로 bp를 걸고 실행했는데
..? 돌아간다.
그러고 그냥 전역변수 안에 있는 password 내용을 읽어와서 밖에서 다시 전해주고 플래그를 얻었는데
아무리 생각해도 이상함...
password를 어떻게 읽었지? 원래는 못 읽잖아?
gdb 자체에서 하위 프로세스 열다가 permission 에러 뜨면서 그래야 되는데 안 그랬다.
???
검색해보니 그룹 권한에 blukat_pwn이 들어있었다..
진짜로 애초에 순서상 무조건 에러난다고 생각하고 실행 한 번도 안하고
그냥 정적 분석만 했으면 오래 걸렸을 문제라고 생각하니
힌트가 이해가 된다.
'Pwnable.kr' 카테고리의 다른 글
Pwnable.kr [fsb] (0) | 2019.05.21 |
---|---|
Pwnable.kr [horcruxes] (0) | 2019.05.17 |
Pwnable.kr [unlink] (0) | 2019.05.14 |
Pwnable.kr [asm] (0) | 2019.05.08 |
Pwnable.kr [memcpy] (0) | 2019.05.08 |