[혼자 실습] ssp_001
소스코드 // ssp_001 #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } void print_box(unsigned char *box, int idx) { printf("Element of index %d is : %02x\n", idx, box[idx]); } void menu() { p..
basic_exploitation_000
전체적인 스케치: scanf 함수를 통해 buf에 쉘코드를 삽입하고, 스택 버퍼 오버플로우를 통해 메인 함수의 return address를 buf의 시작주소로 옮겨, buf에 들어가있는 쉘코드를 실행시킴으로서 쉘을 획득하면 되는 문제이다. 다만 주의해야할 점은, 1) 쉘코드 작성시 scanf 함수는 'x09, x0a, x0b, x0c, x0d, x20'와 이 이후의 값들을 읽어들이지 못 하기 때문에, 이를 우회한 쉘코드를 이용해야한다 2) x86 아키텍처에서 실행되는 execve syscall이므로, x86-64 아키텍처와 들어가게 되는 인자의 레지스터가 다르다. 이는 아래의 사진을 참고하자 사진을 통해 x86(32bit) 아키텍처에서의 execve의 인자 레지스터로는 eax, ebx, ecx, edx가..
Exploit Tech: Return Address Overwrite(리턴 주소 변경 및 실습)
이번 글에서는 ret 주소를 버퍼 오버플로우를 통해 변경하는 실습을 함께 해볼 것입니다. 소스 코드: #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return 0; } 설명: 위의 소스 코드에는 shell을 실행시킬 수 있는 get_shell이라는 함수가 존재합니다. 이 취약점을 이용하여 메인함수의..