본문 바로가기

분류 전체보기267

[Dreamhack System Hacking] STAGE 5 - ssp_000 보호되어 있는 글 입니다. 2022. 1. 30.
[Lazenca] Protection Tech > Canaries 1. Canaries 1) Canaries (Canary word) - 버퍼 오버플로우를 모니터하기 위해 버퍼와 제어 데이터 사이에 설정된 값 - 버퍼 오버플로우가 발생 시 Canary 값이 손상, Canaries 데이터 검증에 실패, 오버플로우에 대한 경고 출력, 손상된 데이터 무효화 처리 2) 종류 ① Terminator canaries - Canary 값을 문자열의 끝을 나타내는 문자들 (NULL, CR, LF, EOF)을 이용하여 생성 - 공격자는 Canaries를 우회하기 위해 return address를 쓰기 전에 null 문자 사용해야 함 - null 문자로 인해 오버플로우 방지 (strcpy 함수는 null문자의 위치까지 복사) - 그럼에도 공격자는 잠재적으로 Canary를 알려진 값으로 .. 2022. 1. 30.
[Dreamhack System Hacking] STAGE 5 [Stack Canary] 1. 스택 카나리 1) 스택 카나리 - 스택 버퍼 오버플로우로부터 반환 주소를 보호 - 함수의 프롤로그에서 스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하고 함수의 에필로그에서 해당 값의 변조를 확인하는 보호 기법 - 카나리 값의 변조가 확인되면 프로세스 강제 종료 - 스택 버퍼 오버플로우로 반환 주소를 덮으려면 반드시 카나리를 먼저 덮어야함 -> 공격자는 반환 주소를 덮을 때 카나리 값을 변조하게 됨 -> 이렇게 되면 함수의 에필로그에서 변조가 확인되어 공격자는 실행 흐름 획득 불가능 2. 카나리 작동 원리 - 예제 코드 (스택 버퍼 오버플로우 취약점 존재) // Name: canary.c #include int main() { char buf[8]; read(0, buf,.. 2022. 1. 30.
[bWAPP] HTML Injection - Reflected(GET) 1. HTML Injection이 무엇인지 정리하시오. 1) HTML Injection - 공격자가 악의적인 목적으로 html 태그를 삽입하는 공격 - 악의적인 html 태그를 삽입하여 원치 않은 내용을 보게 하거나 다른 사이트로 리다이렉션 하는 등의 공격을 함 2) 종류 ① Reflected(GET) ② Reflected(POST) ③ Stored 3) 반사기법 (Reflected) - url에 공격자가 악의적인 html 태그를 삽입하여 공격하는 방법 - 공격 방법 ⓐ 취약한 변수에 악의적인 html 태그 삽입 ⓑ 사용자가 링크를 누르면 악의적인 html 코드 실행 - 종류 ① Reflected(GET) - 사용자가 요청한 url의 취약한 파라미터를 공격자가 조작하여 공격하는 방법 - 값을 header.. 2022. 1. 30.
[Dreamhack System Hacking] STAGE 4 - basic_exploitation_001 보호되어 있는 글 입니다. 2022. 1. 30.
[Dreamhack System Hacking] STAGE 4 - basic_exploitation_000 보호되어 있는 글 입니다. 2022. 1. 30.
[Dreamhack System Hacking] STAGE 4 - 함께실습 [함께실습] Stack Buffer Overflow [Exploit Tech : Return Address Overwrite] 1. 실습 코드 - 이번 실습에 사용할 예제 코드 // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #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(.. 2022. 1. 30.
[BOJ] SISS 겨울방학 스터디 - 5주차 #2742 [문제] [코드] #include int main() { int N; scanf("%d", &N); for (int i = N; i >= 1; i--) { printf("%d\n", i); } return 0; } [설명] 자연수 N을 정수로 선언하고 scanf 함수로 수를 입력받는다. 입력받은 N을 기준으로 N부터 1까지 한줄에 하나씩 출력해야 하므로 반복문을 이용한다. 반복문 for를 이용하여 i에 N의 값을 저장하고 N부터 하나씩 값을 줄여나가면서 i 값을 출력한다. #2753 [문제] [코드] #include int main() { int N; scanf("%d", &N); if ((N % 4 == 0 && N % 100 != 0) | (N % 400 == 0)) printf("1\n".. 2022. 1. 28.
[Dreamhack System Hacking] STAGE 4 [Calling Convention] - 함수 호출 규약 1. 함수 호출 규약 1) 함수 호출 규약 - 함수의 호출 및 반환에 대한 약속 - 함수 호출 규약 적용하는 것은 일반적으로 컴파일러의 역할 2) 종류 - x86 아키텍처 ① cdecl ② stdcall ③ fastcall ④ thiscall - x86-64 아키텍처 ① System V AMD64 ABI의 Calling Convention ② MS ABI의 Calling Convention 2. x86호출 규약 : cdecl 1) cdecl - x86 아키텍처는 레지스터의 수가 적어 스택을 통해 인자를 전달 - 인자를 전달하기 위해 사용한 스택을 호출자가 정리함 - 스택을 통해 인자를 전달할 때는 마지막 인자부터 첫번째 인자까지 거꾸로 스택에 pu.. 2022. 1. 23.