출처 : https://dreamhack.io/lecture/roadmaps/2Return to Library📌 실습 예제 코드// Name: rtl.c// Compile: gcc -o rtl rtl.c -fno-PIE -no-pie#include #include #include const char* binsh = "/bin/sh";int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0); // Add system function to plt's entry system("echo 'system@plt'"); // Leak canary printf("[1] Leak Canary\n"); p..
분류 전체보기
01 라이브러리라이브러리는 컴퓨터 시스템에서, 프로그램들이 함수나, 변수를 공유해서 사용할 수 있게 한다. C언어를 비롯하여 많은 컴파일 언어들은 자주 사용되는 함수들의 정의를 묶어서 하나의 라이브러리 파일로 만들고, 이를 여러 프로그램이 공유해서 사용할 수 있도록 지원하고 있다. 라이브러리를 사용하면 같은 함수를 반복적으로 정의해야 하는 수고를 덜 수 있어서 코드 개발의 효율이 높아진다는 장점이 있다. 각 언어에서 사용되는 함수들은 표준 라이브러리가 제작되어 있기에 개발자가 쉽게 해당 함수들을 사용할 수 있는 것이다. 대표적으로, C의 표준 라이브러리인 libc는 우분투에 기본으로 탑재된 라이브러리이며, 실습환경에서는 /lib/x86_64-linux-gnu/libc.so.6에 있다. 02 링크(1) ..
01 NX(1) NXNo-eXecute(NX)는 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법▶ 어떤 메모리 영역에 대해 쓰기 권한과 실행 권한이 함께 있으면 시스템이 취약해지기 쉽다. CPU가 NX를 지원하면 컴파일러 옵션을 통해 바이너리에 NX를 적용할 수 있음NX가 적용된 바이너리는 실행될 때 각 메모리 영역에 필요한 권한만 부여받음NX가 적용된 바이너리에는 코드 영역 외에 실행 권한이 없음반면, NX가 적용되지 않은 바이너리에는 스택 영역([stack])에 실행 권한이 존재하여 rwx 권한을 가지고 있음 📌 NX의 다양한 명칭NX를 인텔은 XD(eXecute Disable) , AMD는 NX, 윈도우는 DEP(Data Execution Prevention) , ..
보호되어 있는 글입니다.
우선 문제 파일을 다운로드 받으면 basic_exploitation_001이라는 이름의 C언어 파일과 실행파일이 있는 것을 볼 수 있다. 두 파일 중 실행파일을 gdb 모드로 실행하고 checksec 명령어를 활용하여 적용된 보호기법을 확인해보자. 아래와 같이 gdb 모드를 실행하고 checksec 명령어를 통해 NX 보호 기법이 활성화 되어있으므로 쉘 코드가 실행되지 않고 있다는 것을 알 수 있다.이번에는 basic_exploitation_001.c 코드에 대해 분석해보자. ✅ main 함수: buf에 0x80만큼 사이즈가 할당되고, intialize 함수가 실행된 이후 gets로 buf를 입력받고 있음 ✅ initialize 함수: 실행되고 30초가 지나면 Time Out 메시지를 출력하고 프로그램 ..
Return Oriented ProgrammingROP는 리턴 가젯을 사용하여 복잡한 실행 흐름을 구현하는 기법이다. 공격자는 이를 이용해서 문제 상황에 맞춰 return to library, return to dl-resolve, GOT overwrite 등의 페이로드를 구성할 수 있다. ROP 페이로드는 리턴 가젯으로 구성되는데, ret 단위로 여러 코드가 연쇄적으로 실행되는 모습에서 ROP chain이라고도 불린다. 아래 예제 코드를 스택 카나리, NX을 적용하여 컴파일한 바이너리를, ROP를 이용한 GOT Overwrite으로 익스플로잇하는 실습을 진행해보자. 📌 ROP 실습 예제 코드// Name: rop.c// Compile: gcc -o rop rop.c -fno-PIE -no-pie#in..