NOP sled는 버퍼 오버플로우 공격을 할 때 shellcode 앞에 NOP를 추가하여 공격하는 기법입니다.여기서 NOP는 (NO Operation)으로 아무 일도 하지 않는다 라는 명령입니다.NOP 명령을 사용하는 이유는 shellcode의 주소를 정확하게 알기 힘
C언어에는 main 함수의 매개 변수가 있는데, int argc와 char \*argv\[]가 있습니다.int argcmain 함수에 전달되는 인자의 개수를 의미char \*argv\[]argv\[0] ⇒ 프로그램의 실행 경로argv1, argv2, argv3 ..
버퍼 오버플로우 공격을 할 때 변수의 크기가 쉘 코드가 들어갈 만큼 충분히 크기 않을 때가 있습니다. 이럴 경우 환경 변수를 이용하여 공격을 할 수 있습니다. [LOB] gremlin 문제로 실습을 해보면 취약한 함수인 strcpy(buffer, argv[1])
RTL(Return-to-libc)이란 버퍼를 오버 플로우 시켜서 Return Address를 공유 라이브러리 함수의 주소로 변경해 원하는 함수를 실행시키는 기법입니다.라이브러리 영역에서 함수를 호출하여 실행시키는 방법이기 때문에, DEP/NX 방어 기법을 우회할 수
PLT와 GOT를 이해하려면 먼저 컴파일 과정 중 하나인 링킹에 대해 알아야 합니다.우리가 printf() 함수를 이용해서 hello를 출력하는 hello.c 파일을 작성한 후 컴파일을 하면4가지 과정을 거쳐 소스 코드가 실행 파일이 됩니다.Pre-processor (
GOT Overwrite는 Dynamic Linking으로 생성된 실행파일이 공유라이브러리를 호출할 때 사용하는 GOT 값을 조작하는 공격 기법입니다.GOT에는 실제 함수들의 주소가 존재하는데, 만약 호출하려고 하는 함수의 GOT값을 다른 함수의 GOT 값으로 변경하면
Return Oriented Programming은 기본적으로 RTL 기법과 Gadget을 이용해서 공격에 필요한 코드를 프로그래밍하는 기법입니다.라이브러리의 함수들을 사용하기 때문에 DEP/NX 방어 기법을 우회할 수 있고 사용하고 있는 함수의 got 값을 출력하고
Frame Pointer Overwrite란 SFP의 1Byte를 오버플로우 시켜 조작하여 eip를 변조하는 기법입니다.발생 조건SFP 영역에서 최소 1바이트의 오버 플로우가 발생해야 합니다.메인 함수 이외의 서브 함수가 필요합니다.취약한 코드와 스택 구조를 보면서 공
RET Sled 기법은 RET에 스택과 라이브러리 함수의 주소를 입력할 수 없을 때 사용합니다.LOB의 assasin 문제를 예시로 알아보면위 코드는 취약한 strcpy() 함수를 사용했기 때문에 버퍼 오버플로우 공격이 가능합니다.하지만 \\xbf 필터링으로 인해 스택
Fake EBP는 가짜 스택 프레임 포인터를 만들어서 프로그램의 실행 흐름을 조작하는 기법입니다.Return Address 영역까지만 덮어쓸 수 있을 때 사용합니다.예시로 LOB의 zombie_assassin 문제를 봐보면buffer의 크기가 40 Byte인데, str