[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
근데 ls -l로 권한을 확인해보자.
blukat과 password는 gid가 blukat_pwn의 권한이 주어져있다. 즉 내가 그냥 열어볼 수 있다는거.
지금보니까 이게 낚시였네요....하하....재밌다....
하하... 허무하게 풀렸던 문제..
'War Games > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] horcruxes(7 pts) :: Write-Up (0) | 2020.10.09 |
---|---|
[pwnable.kr] unlink(10 pts) :: Write-Up (0) | 2020.10.02 |
[pwnable.kr] asm(6 pts) :: Write-Up (0) | 2020.07.22 |
[pwnable.kr] memcpy(10 pts) :: Write-Up (0) | 2020.07.21 |
[pwnable.kr] uaf(8 pts) :: Write-Up (0) | 2020.07.20 |