[카테고리:] blowfish – SmashTheStack

blowfish.smashthestack.org – Level12 풀이

이 문제를 풀기위해 어언 1년이 걸린거 같다… 마침에 최종 레벨을 다 풀어냈다. 이 감격이란 -_-…… /* * Anyone hating this level yet? * Having problems? * good… 😉 * * Created by: ddle * */ #include <stdio.h> int func(arg) char *arg; { char buf[40]; strncpy(buf , arg , 64); return 0; } int main(argc , …

blowfish.smashthestack.org – Level11 풀이

Level11 역시 문제 소스가 제공되지 않는다. 문제를 실행하여 보면 세그먼트 폴트 오류만 뜬다. 막막해 하지말고 일단 gdb로 한번 디스어셈블러해 보도록 하자. level11@blowfish:/levels/tmp/geegeegee$ gdb -q /levels/level11 Using host libthread_db library /lib/tls/libthread_db.so.1. (gdb) disassemble main Dump of assembler code for function main: 0x080483f4 <main+0>: push %ebp 0x080483f5 <main+1>: mov %esp,%ebp 0x080483f7 <main+3>: sub $0x28,%esp 0x080483fa <main+6>: and …

blowfish.smashthestack.org – Level10 풀이

Level10 문제는 아주 간단한 문제이다. 먼저 문제 파일을 실행하여 보자. Would you like to play a game? 실행하면 먼저 화면이 clear되고 위와 같은 메세지가 나온다. 여기서 우리는 해당 문제파일이 clear 명령어를 이용하고 있다는 것으로 짐작할 수 있다. strings 명령어를 이용하여 문제 파일의 문자열을 확인하여 보자. strilevel10@blowfish:~$ strings /levels/level10 /lib/ld-linux.so.2 _Jv_RegisterClasses __gmon_start__ libc.so.6 printf geteuid fgets …

blowfish.smashthestack.org – Level9 풀이

Level9로 접속하여 README 파일을 읽어보면 다음과 같다. This level is a race condition. There is no source. Use /levels/tmp. Good Luck! 레이스 컨디션 문제이다. /levels/level9 를 실행하여 보면 다음과 같다. level9@blowfish:/levels/tmp/level9$ /levels/level9 usage : /levels/level9 file message 파일과 메세지를 입력하라고 한다. 여기서 존재하지 않는 파일을 명시하고 아무 메세지나 입력하게 되면 다음과 같이 출력이 된다. level9@blowfish:/levels/tmp/level9$ …

blowfish.smashthestack.org – Level8 풀이

Level8 문제 소스를 보면 다음과 같다. #include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { char buffer[64]; char *pointer = changeme; if(argc < 3) return -1; strncpy(buffer, argv[3], sizeof(buffer)-1); printf(\n\tpointer: ); printf(pointer); printf(\n\tinput: ); printf(buffer); printf(\n\n); return 0; } printf(buffer); 와 같이 printf() 함수를 저렇게 사용하였을시에 FSB(Format String Bug)가 일어난다. 일단 공격 전에 필요한 …

blowfish.smashthestack.org – Level7 풀이

Level7의 소스는 다음과 같다. #include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { int i; char buffer[32]; //char *key1 = /; char *p1, *p2, *p3, *p4, *p5; char key2[2], key3[2], key4[2], key5[2]; // if(argc != 2) // return -1; for(i = 1; i < argc; i++) { memset(argv[i], 0, strlen(argv[i])); } sprintf(key2, %c, 0x90); …

blowfish.smashthestack.org – Level6 풀이

문제 코드는 아래와 같다. #include <stdio.h> #include <string.h> int badfunc(char *string1, char *string2) { char buffer1[1024]; char buffer2[1024]; if(strlen(string1)>=sizeof(buffer1)) { printf(\n\t(!) overflow detected.\n); printf(\t(-) exiting…\n\n); return -1; } else { printf(\n\t(+) copying string1 into the buffer…); snprintf(buffer1,sizeof(buffer1),%s,string1); printf(\t\t[done] (%d)\n, strlen(buffer1)); } if(strlen(string2)>=sizeof(buffer2)*3) { printf(\n\t(!) overflow detected.\n); printf(\t(-) exiting…\n\n); return -1; } else { printf(\t(+) copying …

blowfish.smashthestack.org – Level5 풀이

Level5의 소스는 다음과 같다. #include <stdio.h> int main() { char buffer[1024]; if (getenv(VULN) == NULL) { fprintf(stderr,Try Again!!\n); exit(1); } strcpy(buffer, (char *)getenv(VULN)); printf(Environment variable VULN is:\n\%s\.\n\n, buffer); return 0; } 해당 위치에서 BOF가 발생함을 알수 있다. 하지만 이전 문제와는 다르게 환경변수를 이용하여아 한다. 스택에서 환경변수가 위치하는 주소를 찾아보도록 하자. level5@blowfish:/levels/tmp/level5$ export VULN=AAAAAAAA level5@blowfish:/levels/tmp/level5$ gdb …

blowfish.smashthestack.org – Level4 풀이

Level4 부터는 /levels 폴더 이하에 있는 파일을 이용하여 문제풀이를 한다. level4.c 파일을 확인해보면 다음과 같다. #include <stdio.h> int main(int argc, char * argv[]) { char buf[256]; if(argc == 1) { printf(Usage: %s input\n, argv[0]); exit(0); } strcpy(buf,argv[1]); printf(%s, buf); } 우리는 strcpy 함수부분에서 BOF(Buffer OverFlow)가 발생함을 알 수 있다. Buffer 공간이 충분하므로 여기에 쉘코드를 넣어서 …

blowfish.smashthestack.org – Level2,3 풀이

Level2에 접속하여 README 파일을 읽어보면 다음과 같다. There is a backdoor to the next level hidden somewhere on this system, find it, and get the pass for level3 from /pass/level3 풀이를 하면 다음과 같다. level2@blowfish:~$ find / -user level3 -perm +4000 2>/dev/null /usr/bin/false level2@blowfish:~$ /usr/bin/false Stand-alone shell (version 3.7) > cat /pass/level3 l3thal_Rul3Z! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Level3에 …