[pwnable.kr] blukat(3 pts) :: Write-Up

두비니

·

2020. 7. 23. 23:29

 

 

Sometimes, pwnable is strange...
hint: if this challenge is hard, you are a skilled player.

 

ssh blukat@pwnable.kr -p2222 (pw: guest)

 

 

일단 코드 봅시다.

 

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

 

+) 문제를 어려운 방법으로 풀었습니다. 간단한 풀이를 원하시는 분은 맨 마지막을 보면 될 것 같다.

 

 

코드 돌아가는걸 보면 password를 맞춰야 하네요.

fgets를 한 password를 알아내면 되겠네요. 

 

 

main+59에서 fgets로 받아주길래 breakpoint는 main+69에 걸어줬습니다.(main+64에 걸어도 상관없습니다.)

 

 

그리고 멈춘 상태에서 rax 레지스터 상태를 확인해보니, password가 나와있네요. 이를 이용합시다.

 

 

 

 

 

 

---쉬운 풀이---

 

우선 uid와 gid를 정리하고 가보자: https://jmbyeon.tistory.com/entry/uid-gid

 

uid, gid

Linux (혹은 linux 기반의 os)들은 Windows와 달리 모든 파일에 permission이 설정되어 있다. 즉, 해당 파일의 소유자에 대한 사용 권한, 특정 그룹에 대한 사용 권한 그리고 소유자도 아니고 그룹에도 속��

jmbyeon.tistory.com

 

근데 ls -l로 권한을 확인해보자.

blukat과 password는 gid가 blukat_pwn의 권한이 주어져있다. 즉 내가 그냥 열어볼 수 있다는거.

 

지금보니까 이게 낚시였네요....하하....재밌다....

 

 

 

하하... 허무하게 풀렸던 문제..