전체 글

tcache_dup 문제 풀이1. 취약점 확인 checksec 명령어로 보호기법을 확인해보자[*] '/home/gunp4ng/project/SF/doublefree/tcache/tcache_dup/tcache_dup' Arch: amd64-64-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x400000) Stripped: Nox64 아키텍처에 Partial RELRO, Canary, Nx-bit 가 걸려있는 것을 확인할 수 있다 1. C코드 확인int create(int cnt) { int size; if (cn..
tcache duplicate1. tcache?1. tcacheglibc 2.26 부터 tcache 가 도입되면서 0x20 ~ 0x410의 크기의 청크는 main arena가 아닌 tcache에서 관리되기 시작했다tcache는 크기별로 최대 7개까지 저장할 수 있고 가득 찬 이후에는 청크가 fastbin이나 다른 bin으로 이동하게 된다tcache는 보안 검사가 많이 생략되어 있어 공격자들에게 힙 익스플로잇 도구로 사용된다 glibc 2.27 의 tcache 는 double free에 대한 검증 로직이 없는 것으로 알려져 있지만실습 환경인 glibc 2.27 의 버전은 Ubuntu GLIBC 2.27-3ubuntu1.6 으로 이후 버전에서 도입된 검증 로직이 적용되었다→ 사실상 glibc 2.26 까지만..
DFB(Double Free Bug)1. Double Free bug?Double Free Bug는 동일한 청크를 중복으로 해제할 때 생기는 버그이다 libc tcache 없음, free된 메모리는 fastbin에 저장한다같은 청크를 두 번 free하면 fastbin에 중복 삽입할 수 있다→ Double Free Bug를 직접적으로 활용 가능하다 libc 2.26 ≤ libc tcache가 도입되고 free된 메모리는 먼저 tcache에 저장한다tcache는 중복 삽입을 허용하므로 Double Free Bug를 그대로 사용할 수 있다→ tcache poisoning 기법이 주요 공격 방식이다 libc ≥ 2.29 tcache에 대한 Double Free 방어가 도입되어 중복 삽입을 차단한다 Doub..
uaf_overwrite 문제풀이1. 취약점 확인checksec 명령어로 보호기법을 확인해보자[*] '/home/gunp4ng/project/SF/uaf/uaf_overwrite/uaf_overwrite' Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE: PIE enabled Stripped: Nox64 아키텍처에 Full RELRO, Canary, Nx-bit, PIE 가 걸려있는 것을 확인할 수 있다 1. C 코드 확인struct Human { char name[16]; int weight; long age;};s..
UAF (Use After Free)1. UAF ?1. UAFUAF (Use After Free)는 해제된 메모리에 접근할 수 있을 때 발생하는 취약점을 말한다 malloc 과 free 함수는 메모리의 데이터를 초기화 하지 않는다그래서 새롭게 할당한 청크를 명시적으로 초기화 하지 않으면 메모리에 남아있던 데이터가 유출되거나 사용될 수 있다 2. 발생 조건메모리 참조에 사용한 포인터를 메모리 해제 후에 적절히 초기화 하지 않는 경우해제한 메모리를 초기화 하지 않고 다음 청크에 재할당 하는 경우 3. Dangling pointerDangling 포인터는 유효하지 않은 메모리 영역을 가리키는 포인터를 말한다 메모리를 동적 할당할 때는 포인터를 선언하고 그 포인터에 malloc 함수가 할당한 메모리의 주소를 저..
ptmalloc21. ptmalloc21. ptmalloc2 ?ptmalloc2 (pthread malloc 2) 는 Memory Allocator 이다리눅스에서 사용하고 있으며, Glibc 에 구현되어 있다 ptmalloc 의 구현 목표는 효율적인 메모리 관리이다메모리 낭비 방지빠른 메모리 재사용메모리 단편화 방지ptmalloc 의 메모리 관리 전략을 알아보자 2. 메모리 낭비 방지메모리 동적 할당과 해제는 매우 자주 일어나게 된다컴퓨터의 메모리는 한정적이기 때문에 매 번 새로운 메모리 공간을 할당할 수 없다 ptmalloc 은 메모리 할당 요청이 발생하면, 해제된 메모리 공간 중에 재사용할 수 있는 공간이 있는지 탐색한다해제된 메모리 공간 중에서 요청된 크기와 같은 크기의 메모리 공간이 있다면 그대로..
Stack Pivoting1. Stack Pivoting1. Stack Pivoting ?Stack pivoting 은 스택이 아니었던 공간을 스택처럼 사용하는 기법이다→ 익스플로잇을 하기 위한 공간이 부족할 때 새로운 스택 영역을 확보할 수 있다여러 가젯들을 이용해 쓰기 가능한 공간에 Fake Stack 을 구성하고 Chaining 한다특정 영역에 값을 쓸 수 있거나 값이 있는 경우 SFP 를 조작하여 스택을 옮기고 해당 부분의 코드를 실행한다 2. 전제 조건페이로드를 쓸 수 있는 영역이 존재하고, RET 까지만 overflow 가 발생할 때페이로드를 쓸 수 있는 영역이 없고, 입력함수 + leave_ret 을 넣을 수 있을만큼 overflow 가 발생할 때위의 두 경우 모두 가젯이 존재해야 한다 3...
send_sig 문제풀이1. 취약점 확인먼저 checksec 명령어로 보호기법을 확인해보자[*] '/home/gunp4ng/project/SF/send_sig/send_sig' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000) SHSTK: Enabled IBT: Enabledx64 아키텍처에 Partial RELRO, NX - bit 보호기법이 걸려있는 것을 알 수 있다 1. 어셈블리C코드가 주어지지 않고 바이너리 파일만 주어졌다main 함수가 없어서 obj..
SROP (Sigreturn-Oriented Programming) - x641. SROP이전 글에서 x86 아키텍처에 대한 SROP 방법을 알아보았다x64 아키텍처에서 확인해보자 기본적으로 x86과 x64 의 signal & signal handler 동작은 동일하다하지만 x64 환경이기 때문에 x86 레지스터와는 차이가 있다  2. Sigreturn1. sigcontextx64 환경에서는 sigreturn 시스템 콜이 호출되면, ucontext 구조체 안에 있는 sigcontext 를 기준으로 레지스터를 복원한다→ 유저 스택에는 ucontext 구조체가 먼저 들어가고 그 안에 sigcontext 가 포함되는 것이다 struct ucontext_x32 { unsigned int uc_flags; u..
SROP (Sigreturn-Oriented Programming) - x861. SROP ?Sigreturn Oriented Programming 으로 sigreturn 시스템 콜을 이용하여 레지스터에 원하는 값을 저장하고 원하는 시스템 함수를 호출하는 공격기법이다. SROP 를 알아보기 전에 시그널에 대해 알아보자  2. 시그널 (Signal) 1. 시그널 (Signal)운영체제는 크게 유저 모드(User Mode)와 커널 모드(Kernel Mode) 로 나뉘어진다. 유저 모드(User Mode)일반 프로그램이 실행되는 제한된 권한의 모드하드웨어 직접 접근 불가중요한 시스템 자원 접근 제한됨커널 모드(Kernel Mode)운영체제 핵심 코드가 실행되는 특권 모드모든 하드웨어와 시스템 자원에 접근 가능..
GunP4ng
GunP4ng