전체 글

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..
baby got overwirte 문제 풀이1. 취약점 확인1. C언어먼저 checksec 명령어로 취약점을 확인해보자[*] '/home/gunp4ng/pwnable/got_overwrite/baby_got_overwrite/baby_got_overwrite' Arch: amd64-64-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x400000)x64 아키텍처에 Stack Canary, NX-bit, Partial RELRO 가 적용된 것을 확인할 수 있다. 이제 C 코드를 확인해보자// gcc got_overwrite.c -o got_overwri..
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프로그램이 실행될..
· Hacking/Misc
카카오 미러서버 변경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..
Return to Shellcode 문제 풀이1. 취약점 확인1. C언어먼저 checksec 명령어로 취약점을 확인해보자$ checksec r2s[*] '/workspaces/codespaces-blank/Dreamhack/r2s/r2s' Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX unknown - GNU_STACK missing PIE: PIE enabled Stack: Executable RWX: Has RWX segmentsx64 아키텍처 에 canary 가 적용된 것을 확인할 수 있다. C언어를 확인해보자.// Name: r2s.c/..
스택 카나리 (Stack Canary)1. 스택 카나리1. 스택 카나리 (Stack Canary) 란?BOF 공격으로부터 반환 주소를 보호하기 위해 스택 카나리 (Stack Canary) 보호기법이 생겼다. 스택 카나리는 함수의 프롤로그에서 스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하고, 함수의 에필로그에서 해당 값의 변조를 확인하는 보호 기법이다.카나리 값의 변조가 확인되면 프로세스는 강제로 종료 된다. BOF 공격에서 반환 주소를 덮으려면 반드시 카나리를 먼저 덮어야 하므로카나리를 모르는 공격자는 반환 주소를 덮을 때 카나리 값을 변조하게 된다.  2. 카나리 정적 분석1. 스택 카나리 비활성화// Name: canary.c#include int main() { char buf[8]; rea..
GunP4ng
GunP4ng