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에 …
blowfish.smashthestack.org – Level1 풀이
Level1 문제는 다음과 같다. Telnet to blowfish.smashthestack.org port 6666 to recieve an encrypted passwd. Decrypt it and log in to level2. 😉 접속을 하니 다음과 같이 암호화 된 문자열이 출력되었다. 해당 암호는 시저암호로 암호화 되어 있다. (Caesar cipher : http://en.wikipedia.org/wiki/Caesar_cipher) 해독하는 코드를 python으로 작성하여 보면 다음과 같다. #!/usr/bin/python s = 'GungJnfRnfl' ret = '' for …
FSB (Format String Bug) 정리
/ 해당 문서는 공부를 하며 정리한 내용으로 틀린 부분이 있을수도 있습니다. / 해커스쿨 level20 문제를 풀어보면서 FSB (Format String Bug)에 대해 알아보자. #include <stdio.h> main(int argc,char **argv) { char bleh[80]; setreuid(3101,3101); fgets(bleh,79,stdin); printf(bleh); } 문제 소스는 다음과 같다. FSB는 printf(bleh) 와 같이 프로그래머의 귀차니즘(?)으로 인해 발생한다. 풀이과정은 다음과 같다. [level20@ftz level20]$ (python -c "print ‘AAAA’ …
SSH 접속 Port 변경 (SELinux 설정 방법)
Fedora 9에서 SSH 접속 Port 변경 시 데몬이 제대로 안뜨는 경우가 있다. selinux 때문인데 다음과 같이 수정하도록 한다. semange port -t ssh_port_t -p tcp 1234 만약 semange 명령어가 없다면 아래와 같이 찾아보면 된다. [root@localhost byjjoon]# yum whatprovides /usr/sbin/semanage Loaded plugins: fastestmirror Determining fastest mirrors * base: mirror.khlug.org * extras: mirror.khlug.org * updates: mirror.khlug.org base | …