목록System2/Protostar (6)
SH1R0_HACKER
stack5.c #include #include #include #include int main(int argc, char **argv) { char buffer[64]; gets(buffer); } gets()를 통해 버퍼오버플로우를 일으킬 수 있을 것 같다. 이번엔 쉘코드를 이용하여 RET를 공격해보는것이 목표이다. [ ASLR(Address Space Layout Randomization) ] 메모리 영역의 주소 공간 배치를 랜덤화하여 공격을 방해한다. 즉 프로세스가 메모리에 올라갈 때 힙, 스택, 공유 라이브러리의 위치를 랜덤하게 정해주는 것. 출처: https://satanel001.tistory.com/77 간단한 ASLR 우회/차단 기법 스택의 주소가 필요한 공격을 할때 상당히 짜증나는 보호..
stack4.c #include #include #include #include void win() { printf("code flow successfully changed\n"); } int main(int argc, char **argv) { char buffer[64]; gets(buffer); } stack3와 비교했을 때 fp만 없어진 코드이다. fp가 없어도 ret를 사용해 실행흐름을 변경할 수 있다. [ DEP 우회 RTL 공격기법 (Return To Libc) ] 메모리 보호기법 DEP(Data Execution Protection)란? 데이터 영역에서 코드가 실행되는 것을 막는 기법이다. BOF의 기본 공격루트는 버퍼에 쉘코드 넣고 쉘코드를 가리키는 주소를 EIP에 overwrite하여 ..
stack3.c #include #include #include #include void win() { printf("code flow successfully changed\n"); } int main(int argc, char **argv) { volatile int (*fp)(); char buffer[64]; fp = 0; gets(buffer); if(fp) { printf("calling function pointer, jumping to 0x%08x\n", fp); fp(); } } 새로운 win() 함수가 등장했다. 우리의 목표는 이 함수를 실행시키는 것이다. 하지만 main 함수에 win() 함수를 실행하는 부분은 존재하지 않아서 fp를 변조해야 할 것 같다. [ 취약점 파악 및 분석 ] ..
stack2.c #include #include #include #include int main(int argc, char **argv) { volatile int modified; char buffer[64]; char *variable; variable = getenv("GREENIE"); if(variable == NULL) { errx(1, "please set the GREENIE environment variable\n"); } modified = 0; strcpy(buffer, variable); if(modified == 0x0d0a0d0a) { printf("you have correctly modified the variable\n"); } else { printf("Try again,..
Stack1.c #include #include #include int main(int argc, char **argv) { volatile int modified; char buffer[64]; modified = 0; gets(buffer); if(modified != 0) { printf("you have changed the 'modified' variable\n"); } else { printf("Try again?\n"); } } 코드를 분석해보면 main 함수에 argc와 argv가 전달된다. 사용자로부터 argument를 받아서 실해오디는 루틴을 가지고 있다. modified를 0x61626364로 바꿔버리면 우리가 원하는 답을 얻을 수 있을 것 같다. [ 취약점 파악 및 분석 ] 아래는 ..
Stack 0.c #include #include #include int main(int argc, char **argv) { volatile int modified; char buffer[64]; modified = 0; gets(buffer); if(modified != 0) { printf("you have changed the 'modified' variable\n"); } else { printf("Try again?\n"); } } 코드를 분석해보면 modified가 0이 아닐 때 우리가 원하는 "you have changed the 'modified' variable\n" 메시지를 띄울 수 있을 것 같다. 먼저 취약해 보이는 gets가 보인다. gets()는 키보드로부터 문자열을 입력받아 버..