Return to Library 문제 풀이1. 취약점 확인1. C 언어checksec 명령어로 취약점을 확인해보자[*] '/home/gunp4ng/pwnable/Dreamhack/rtl/rtl' Arch: amd64-64-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x400000)x64 아키텍처에 Partial RELRO, Nx-bit, Stack Canary 가 적용된 것을 알 수 있다. C 코드를 확인해보자// Name: rtl.c// Compile: gcc -o rtl rtl.c -fno-PIE -no-pie#include #include co..
RTL 1. RTL (Return to Library)1. RTL 이란?Nx-bit 보호 기법이 적용되면 code 영역을 제외한 영역에 실행 권한이 부여되지 않는다.즉, 스택에 실행 권한이 부여되지 않는다.그렇기 때문에 스택에 shellcode 를 넣고 RET 에 덮어씌워도 실행 권한이 없어 shellcode 가 실행되지 않는다.이를 우회하기 위한 기법이 Return to Library 이다. 프로세스에 실행 권한이 있는 메모리 영역은 바이너리의 코드 영역과 라이브러리의 코드 영역이다.우리가 사용하는 함수들은 (ex. printf) 모두 라이브러리에 들어있다.RTL 은 RET 에 라이브러리 함수를 덮어씌워 실행되도록 하는 공격 기법이다. 2. 함수 호출 과정 (x86)1. callme 호출 전// Nam..
RELRO1. RELRO (Relocation Read-Only)1. RELRO 란?RELRO 는 Relocation Read-Only 줄임말로,ELF 바이너리 또는 프로세스의 데이터 섹션을 보호하는 기술이다.즉 메모리가 변경되는 것을 보호하는 기술이다. RELRO 가 적용되면 GOT_Overwrite 공격을 막을 수 있다. RELRO 에는 크게 3가지 종류가 있다.FULL RELROPartial RELRONO RELRO//Name : relro.c#include #include int main(int argc, char *argv[]){ size_t *p = (size_t *)strtol(argv[1], NULL, 16); p[0] = 0x41414141; printf("RELRO TE..
GOT Overwrite1. GOT Overwrite1. GOT Overwrite 과정함수를 처음 호출하면 PLT 가 호출되고 PLT 는 GOT 로 점프한다. 첫 번째 호출이면 GOT 에 함수의 실제 주소가 쓰여있지 않아dl_resolve 함수가 실제 함수의 주소를 알아와 GOT 에 써준 뒤 함수를 호출한다. 두 번째 호출부터는 PLT 가 GOT 로 점프하여 함수의 실제 주소를 가져온다.이 때 PLT 는 GOT 에 적힌 주소를 검증하지 않고 가져온다. GOT 를 변조하게 되면 공격자가 원하는 함수를 실행할 수 있다.이러한 공격 기법을 GOT Overwrite 라고 한다. 2. GOT Overwrite 실습//Name : got.c//Compile : gcc -o got got.c -fno-stack-pr..
함수 호출 과정(Runtime Resolve)1. Dynamic Link 시 함수 호출 과정1. PLT, GOT이전 글에서 짧게 설명하고 넘어갔던 Runtime Resolve 에 대해 자세히 알아보자 // Name : got.c//Compile : gcc -o got got.c -no-pie -fno-stack-protector -m32#include int main() { puts("Resolving address of 'puts'."); puts("Get address from GOT");}got.c 파일을 만들고 컴파일 한다. Dump of assembler code for function main: 0x08049176 : lea ecx,[esp+0x4] 0x0804917a ..
공유 라이브러리( PLT, GOT)1. 라이브러리란?1. 라이브러리(Library)프로그램은 공통으로 사용하는 함수들이 있다printf, scanf, strlen, memcpy, malloc 등 많은 함수들이 있다이러한 함수들의 정의를 묶어 만든 파일(오브젝트 파일)을 라이브러리라고 한다 C의 표준 라이브러리인 libc 는 우분투에 기본으로 탑재된 라이브러리다 2. Lazy Binding & Now BindingELF(Executable and Linkable Format)리눅스 기반 시스템의 기본 바이너리 형식 Lazy BindingDynamic Linking 방식으로 컴파일 된 바이너리에서함수를 처음 호출할 때 해당 함수의 주소를 공유 라이브러리에서 가져오는 것 Now Binding프로그램이 실행될..
카카오 미러서버 변경sudo sed -i 's/kr.archive.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list python3 & pwntools 설치apt-get updateapt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essentialpython3 -m pip install --upgrade pippython3 -m pip install --upgrade pwntools pwndbg & peda & gef 설치cd ~ && git clone https://github.com/apogiatzis/gdb-peda-pwndbg-gef.gitcd ~/gdb-peda..
NX-bit, ASLR1. NX-bit (No-eXecute-bit)1. NX-bit 란?Nx-bit (No-eXecute-bit) 는 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법이다.메모리 영역에 쓰기 권한과 실행 권한이 함께 있으면 시스템이 취약해지기 쉽다. 코드 영역에 쓰기 권한이 있다면 공격자는 코드를 수정하여 원하는 코드를 실행할 수 있게 되고,스택 영역에 실행 권한이 있다면 Return to Shellcode 같은 공격을 시도할 수 있다. 즉, NX-bit 는 code 영역을 제외한 나머지 영역에 실행 권한을 넣지 않는 보호기법이다. 2. NX-bit 적용gcc 는 기본적으로 NX-bit 보호기법을 적용해서 컴파일한다.-z execstack따라서 Nx-bit..
ssp_001 문제 풀이1. 취약점 확인1. C 언어먼저 checksec 명령어로 취약점을 확인해보자$ checksec ssp_001[*] '/workspaces/codespaces-blank/Dreamhack/ssp/ssp_001' Arch: i386-32-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x8048000)x86 아키텍처에 카나리가 적용된 것을 확인할 수 있다. 이제 C코드를 확인해보자#include #include #include #include void alarm_handler() { puts("TIME OUT"); ex..