본문 바로가기

DreamHack: System Hacking/F Stage 6

(3)
[혼자 실습] 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..
Exploit Tech: Return to Shellcode 이번 게시글에서는 Canary를 우회하여 Return Address Overwrite를 통해 Shell을 획득하는 실습에 대해 다뤄볼 것이다. 소스코드 //소스코드명: r2s.c //파일명: r2s #include #include int main() { char buf[0x50]; printf("Address of the buf: %p\n", buf); printf("Distance between buf and $rbp: %ld\n", (char*)__builtin_frame_address(0) - buf); printf("[1] Leak the canary\n"); printf("Input: "); fflush(stdout); read(0, buf, 0x100); printf("Your input is..
Mitigation: Stack Canary Stack Canary란 1) 함수 프롤로그에서 스택 버퍼와 SFP 사이에 임의의 값음 삽임함 2) 함수의 에필로그에서 해당 값의 변조를 확인함 변조 확인(O) -> 프로세스 강제 종료 변조 확인(X) -> 프로세스 정상 종료 Canary가 적용돼있는 Canary.asm을 분석해보자 Canary.c #include int main() { char buf[8]; read(0, buf, 32); return 0; } Canary.asm 1 push rbp 2 mov rbp,rsp 3 sub rsp,0x10 4 mov rax,QWORD PTR fs:0x28 5 mov QWORD PTR [rbp-0x8],rax 6 xor eax,eax 7 lea rax,[rbp-0x10] 8 mov edx,0x20 9 mov ..