본문 바로가기

포너블

(9)
[포너블/pwnable.kr] input input2@pwnable:~$ ls flag input input.c ls로 파일을 열어 보면 3개의 파일이 보인다. cat으로 열어 본 input.c는 다음과 같다. #include #include #include #include #include int main(int argc, char* argv[], char* envp[]){ printf("Welcome to pwnable.kr\n"); printf("Let's see if you know how to give input to program\n"); printf("Just give me correct inputs then you will get the flag :)\n"); // argv if(argc != 100) return 0; if(str..
[포너블/pwnable.kr] shellshock #include int main(){ setresuid(getegid(), getegid(), getegid()); setresgid(getegid(), getegid(), getegid()); system("/home/shellshock/bash -c 'echo shock_me'"); return 0; } setresuid, setresgid를 shellshock_pwn의 권한으로 부여 /home/shellshock/bash를 실행하고 echo shock_me 이 문제는 참… 처음 딱 보면 뭐 어쩌라는 건지 shellshock은 또 뭐고 뭐 진짜 어쩌라는 거임 이런 생각이 딱 들고 아예 아무 생각도 못하게 된다. 그래서 다른 라업들을 참고한 결과 shellshock, 환경변수, bash에 대해 좀 더 ..
[포너블/pwnable.kr] blukat blukat@pwnable:~$ ls blukat blukat.c password #include #include #include #include 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
[포너블/pwnable.kr] cmd2 #include #include int filter(char* cmd){ int r=0; r += strstr(cmd, "=")!=0; r += strstr(cmd, "PATH")!=0; r += strstr(cmd, "export")!=0; r += strstr(cmd, "/")!=0; r += strstr(cmd, "`")!=0; r += strstr(cmd, "flag")!=0; return r; } extern char** environ; void delete_env(){ char** p; for(p=environ; *p; p++) memset(*p, 0, strlen(*p)); } int main(int argc, char* argv[], char** envp){ delete_env(); put..
[포너블/pwnable.kr] cmd1 cmd1@pwnable:~$ ls cmd1 cmd1.c flag 빠르게 cmd1.c부터 보자 #include #include int filter(char* cmd){ int r=0; r += strstr(cmd, "flag")!=0; r += strstr(cmd, "sh")!=0; r += strstr(cmd, "tmp")!=0; return r; } int main(int argc, char* argv[], char** envp){ putenv("PATH=/thankyouverymuch"); if(filter(argv[1])) return 0; system( argv[1] ); return 0; } 환경변수 PATH를 /thankyouverymuch로 설정 filter 함수 호출 argv[1]에 fla..
[포너블/pwnable.kr] passcode #include #include void login(){ int passcode1; int passcode2; printf("enter passcode1 : "); scanf("%d", passcode1); fflush(stdin); // ha! mommy told me that 32bit is vulnerable to bruteforcing :) printf("enter passcode2 : "); scanf("%d", passcode2); printf("checking...\n"); if(passcode1==338150 && passcode2==13371337){ printf("Login OK!\n"); system("/bin/cat flag"); } else{ printf("Login Failed!..
[포너블/pwnable.kr] blackjack blackjack 문제 파일은 http://cboard.cprogramming.com/c-programming/114023-simple-blackjack-program.html 에서 확인할 수 있다. nc [pwnable.kr](http://pwnable.kr) 9009 를 실행해 보면 이렇게 blackjack 게임을 할 수 있게 된다. 코드를 좀 살펴 보려고 했는데… 코드가 너무 길다. 하나하나 다 살펴 보긴 눈 빠질 것 같아서 results, cash, flag… 등등 특정 단어만 찾아 봤는데… 부분만 보니까 취약점을 못 찾겠어서 결국 처음부터 쭉 봤다. 그러다가 문득 워게임들을 풀면서 범위 확인을 제대로 확인하지 않아 생기는 취약점이 떠올랐고, cash의 범위를 확인해 주는 코드를 찾아 보았다. i..
[pwnable.kr/포너블] random random@pwnable:~$ ls flag random random.c 우선 ls로 파일을 확인해 보면 3개가 나온다 flag: 정답 파일 random: 실행 파일 random.c: random의 소스 파일 cat으로 random.c를 열어 보면 다음과 같다. #include int main(){ unsigned int random; random = rand(); // random value! unsigned int key=0; scanf("%d", &key); if( (key ^ random) == 0xdeadbeef ){ printf("Good!\n"); system("/bin/cat flag"); return 0; } printf("Wrong, maybe you should try 2^32 ca..