본문 바로가기

전체 글

(267)
Linux 환경에서의 메모리 보호 기법 1) ASLR (Address Space Layout Randomization)메모리 상의 공격을 방어하기 위해서 주소 공간 배치를 난수화 시키는 기법.--> 스택,힙,라이브러리 등의 데이터 영역 주소 등을 난수화 시킨 주소로 프로세스 주소 공간에 배치하는 것. Window 에서 적용되는 것과 유사한 기법이며 리눅스 커널 2.6.12 이후로 적용되어 있음. 위 사진을 보면 왼쪽의 주소값이 바뀌는 것을 볼 수 있음. 2) DEP / NX (Not eXcutable)메모리 상의 보호를 위해 stack 과 heap 에서 코드가 실행되는 것을 막는 기법.공격자가 BOF공격을 일으키면 DEP가 적용된 상태에서는 실행권한이 없으므로 프로그램에 대한 예외처리가 발생되고 종료된다. 위 사진에서 주소값 오른쪽에 권한이 ..
홈 데스크탑 리눅스 설치 보호되어 있는 글입니다.
death_knight (end) result [death_knight@localhost death_knight]$ cat dropped_item.txt You're so great! This is a token to the next gate. ,. ,' `. ,' __ `. ,'.-'____`-.`. ,'_.-'' ``-._`. ,',' /\ `.`. ,' /.._ O / \ O _.,\ `. ,'/ / \ ``-;.--.:-'' / \ \`. ,' : : \ /\`.,'/\ / : : `. () `. : : / \/,'`.\/ \ ; ; ,' `.\ \ /_..-:`--';-.._\ / /,' `. \`' O \ / O `'/ ,' `.`._ \/ _,',' `..``-.____.-'',,..
xavius -> death_knight 문제소스 #include #include #include #include #include #include #include #include #include main(){char buffer[40]; int server_fd, client_fd; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int sin_size; if((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1){perror("socket");exit(1);} server_addr.sin_family = AF_INET; server_addr.sin_port = htons(6666); server_addr.sin_addr.s_addr = I..
nightmare -> xavius 문제소스 /* The Lord of the BOF : The Fellowship of the BOF - xavius - arg*/ #include #include #include main(){char buffer[40];char *ret_addr; // overflow!fgets(buffer, 256, stdin);printf("%s\n", buffer); if(*(buffer+47) == '\xbf'){printf("stack retbayed you!\n");exit(0);} if(*(buffer+47) == '\x08') { printf("binary image retbayed you, too!!\n"); exit(0); } // check if the ret_addr is library functi..
succubus->nightmare 문제소스/* The Lord of the BOF : The Fellowship of the BOF - nightmare - PLT*/ #include #include #include #include main(int argc, char *argv[]){char buffer[40];char *addr; if(argc < 2){printf("argv error\n");exit(0);} // check addressaddr = (char *)&strcpy; if(memcmp(argv[1]+44, &addr, 4) != 0){ printf("You must fall in love with strcpy()\n"); exit(0); } // overflow! strcpy(buffer, argv[1]);printf("..
zombie_assassin -> succubus /* The Lord of the BOF : The Fellowship of the BOF - succubus - calling functions continuously */ #include #include #include // the inspectorint check = 0; void MO(char *cmd){ if(check != 4) exit(0); printf("welcome to the MO!\n"); // olleh!system(cmd);} void YUT(void){ if(check != 3) exit(0); printf("welcome to the YUT!\n"); check = 4;} void GUL(void){ if(check != 2) exit(0); printf("welcome to..
assassin -> zombie_assassin 소스는 이렇다./* The Lord of the BOF : The Fellowship of the BOF - zombie_assassin - FEBP*/ #include #include main(int argc, char *argv[]){ char buffer[40]; if(argc < 2){ printf("argv error\n"); exit(0); } if(argv[1][47] == '\xbf') { printf("stack retbayed you!\n"); exit(0); } if(argv[1][47] == '\x40') { printf("library retbayed you, too!!\n"); exit(0); } // strncpy instead of strcpy! strncpy(buffer, ..