system hacking

System Hacking Advanced

[dreamhack] ssp_001

SSP 개념SSP(Stack Smashing Protector) SSP(Stack Smashing Protector)SSP는 BOF를 방어하기 위한 보호기법 중 하나로 함수를 실행할 때, canary라는 랜덤 값을 스택에 추가하여 BOF로 스택 데이터가 변조됐는지 확인하는 방법이다. canary가 변조된 경우는 스택 데이터가keyme2003.tistory.com ssp_001#include #include #include #include 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]);}voi..

System Hacking Advanced

[dreamhack] Return Address Overwrite

Return Address Overwritevoid 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;}scanf("%s", buf)에서 길이 검증이 없다. 따라서 BOF가 발생한다. BOF 취약점을 이용해서 RET을 get_shell() 주소로 덮으면 쉘을 얻을 수 있다. gdb로 get_shell 주소를 구했다. 다음으로 buf ~ RET 거리를 구해보자. 를 보면 scanf() 호출 전에 [rbp-0x30]를 rax에 넣고 이를 ..

System Hacking Advanced

[dreamhack] basic_exploitation_002

문제분석void get_shell() { system("/bin/sh");}int main(int argc, char *argv[]) { char buf[0x80]; initialize(); read(0, buf, 0x80); printf(buf); exit(0);}read(0, buf, 0x80)에서 길이에 대한 검증을 수행하고 있다. 따라서 일반적인 BOF는 발생하지 않는다. 그렇다면 어떤 취약점이 존재하는 것일까?printf(buf);위 코드에서 Format String Bug 취약점이 발생한다. printf 함수를 사용할 때, 포맷스트링을 지정하지 않고 buf를 1번째 인자로 사용하도록 코드를 작성한 상황이다. 이는 출력함수를 잘못된 방식으로 사용한 경우다. 포맷스..

System Hacking Advanced

[dreamhack] shell_basic

쉘코드를 작성하는 문제다. execve(), execveat()처럼 쉘을 실행하는 함수는 사용할 수 없다. 문제 의도는 다른 함수를 이용해서 flag를 읽을 수 있도록 쉘코드를 작성하는 것이 목표다. 설명에서 flag 파일 위치를 절대경로로 알려주고 있다. 일반적인 쉘코드는 execve("/bin/sh", ..., ...) 처럼 쉘을 실행하는 유형이 대부분이다. 그러나 execve()를 사용할 수 없는 상황이므로 일반적인 쉘코드를 사용해서 쉘을 획득하는 것은 불가능하다. 그렇다면, flag를 어떻게 획득할 수 있을까? 목표는 쉘을 실행하는 것이 아니라 flag를 획득하는 것이다. 그렇다면, execve()를 사용하지 않고 read(), write()로 flag를 읽는 방식으로 접근해볼 수 있다. read..

System Hacking Advanced

[dreamhack] basic_exploitation_001

문제풀이void read_flag() { system("cat /flag");}int main(int argc, char *argv[]) { char buf[0x80]; initialize(); gets(buf); return 0;}gets(buf)에서 입력 길이 검증이 없다. 따라서 BOF가 발생한다. BOF 취약점으로 RET을 read_flag() 주소로 덮으면 쉘을 얻을 수 있다. read_flag() 주소를 구해보자. gdb로 read_flag() 주소를 출력한 결과다. 0x80485b9라는 것을 확인할 수 있다. 다음으로 payload를 구성해보자. "\x90"*132 + [read_flag() 주소]RET 이전 공간을 NOP sled로 덮고 RET을 read_flag..

System Hacking Advanced

[dreamhack] basic_exploitation_000

문제분석 & 풀이int main(int argc, char *argv[]) { char buf[0x80]; initialize(); printf("buf = (%p)\n", buf); scanf("%141s", buf); return 0;}scanf("%141s", buf)를 보자. 입력 길이를 141 바이트로 제한하고 있지만 buf의 크기는 128 바이트다. 따라서 128 바이트 이상의 데이터를 입력하면 BOF(Buffer Over Flow) 취약점이 발생한다. BOF 취약점으로 RET을 조작하고 임의의 주소에 있는 코드를 실행할 수 있다. 코드에서 printf("buf = (%p)\n", buf)로 buf 주소를 출력해준다. buf에 쉘코드를 삽입하고 RET을 buf 주소로..

keyme
'system hacking' 태그의 글 목록 (5 Page)