일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- rootfs
- kernel build
- xz-utils
- liblzma
- newbie
- cwe-506
- kernel image
- 백도어
- CVE-2024-3094
- kernel img
- Kernel
- Today
- Total
목록STUDY/PWNABLE_AMD64 (33)
ZZoMb1E

Use After Free(UAF) 취약점은 메모리 할당 후 해제된 포인터를 여전히 사용할 때 발생하는 보안 취약점이다. 이는 메모리 관리에서 발생하는 오류로, 공격자는 이를 악용하여 프로그램의 비정상적인 동작을 유발하거나 임의의 코드를 실행할 수 있다. 메모리는 malloc 등을 통해 할당되고, free를 통해 해제된다. 해제된 메모리는 다른 용도로 재사용될 수 있다. 하지만 해제된 포인터가 계속 사용된다면, 이를 Dangling Pointer라고 한다. • 1단계: 메모리 할당 (malloc) • 2단계: 메모리 해제 (free) • 3단계: 해제된 포인터가 다시 사용됨 (Dangling Pointer) 할당된 청크의 data영역이 freed된 청크의 헤더 부분에 해당이 된다.즉, freed된 청크..

Memorry Allocator : 한정된 메모리 자원을 각 프로세스에 효율적으로 배분하는 작업을 한다.- 실행중에 메모리를 동적으로 할당 및 해제한다.- 구현에 따라 사용된 알고리즘의 종류가 달라진다 - ptmalloc2은 ubuntu에서 사용한다 ptmalloc2의 특징으로는 해제된 메모리에 대한 데이터를 지우지 않고 가지고 있다가비슷한 요청이 오면 반환해주는 특징이 있다. - 메모리 낭비 방지- 빠른 메모리 재사용 tcache 혹은 bin이라는 리스트를 사용한다.- 메모리 단편화 방식 단편화를 줄이기 위해 정렬, 병합, 분할을 사용한다. chunkptmalloc에 의해 할당된 공간으로 헤더 + 데이터 영역으로 구성되어 있다. 헤더에는 청크의 상태와 크기를 가리키기 때문에 사용중인 청크와 해제된..

FSOPFile Stream Oriented ProgrammingC의 표준 라이브러리인 libc에서 file stream의 내부 필드를 조작하여 악의적인 코드를 수행하는 공격 기법이다. libc에서 파일 스트림은 FILE 구조체로 관리되며, 이 구조체의 필드들은 파일 입출력 작업을 추상화한다.file stream 구조체 이해 : libc의 FILE 구조체를 분석하여 필드를 파악해야 한다. _IO_FILE : 리눅스 시스템의 표준 라이브러리에서 파일 스트림을 나타내기 위한 구조체이다.struct _IO_FILE_plus{FILE file; const struct _IO_jump_t *vtable;};struct _IO_FILE{ int _flags; char *_IO_read_ptr; char *_..

rtld global프로그램이 실행되고 프로세스로 등록될 때, 코드와 변수들을 관리하기 위한 구조체이다.실행이 종료되는 지점에서 참조된다.return에 의해 종료될 때 확인이 가능하다. 간단한 실습 예제이다.#include int main(){ return 0; }바이너리 __stack부터 확인해보면 main함수 호츨을 __libc_start_main에서 하는 것을 알 수 있다.즉, main함수가 종료될 때 복귀도는 주소도 __libc_start_main이다. 여기서 step into로 계속 들어가보겠다.조금 들어가다보면 __GI_exit라는 함수가 호출된다.그리고 __run_exit_handlers를 호출한다. 이제 여기서 함수 종료에 return을 쓰나 안쓰나에 따라 달라지는데,이번 예제는 사용..

__environ을 이용한 스택 주소 leak__environ은 환경 변수 중 하나로 시스템의 정보를 갖고 있는 변수이다.(execve 계열의 함수가 참조한다.)libc파일에서 심볼을 찾을 수 있다. environ에 들어있는 값을 확인한 모습이다. 해당 부분들이 stack 영역에 속하는 것 또한 알 수 있다. 전체적인 내용이다._init()이 실행될 때 호출되어 사용되는 듯 하다. dreamhack - __envirion#include #include #include #include #include void sig_handle() { exit(0);}void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); signal(SIGALRM, si..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ gadget을 사용하여 쓰기 권한이 있는 영역에 Fake Stack를 구성하는 기법이다.payload가 저장되어 있는 경우, ret까지만 overflow가 발생해야 한다.payload가 저장되어 있지 않은 경우, chain + leave_ret 까지 넣을 있어야 한다.일반적으로 bof취약점을 한번 밖에 사용하지 못하거나 ret까지만 overflow가능한 경우 사용하는 기법이다. 간단한 예제를 통해 살펴보도록 하겠다.// gcc -no-pie -fno-stack-protector -z execstack -o ex ex.c#include #include int cnt = 0;void gift(){ __asm__ ("pop %r9")..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ Frame Pointer Overflow (간략하게 설명)sfp를 변조하는 것으로, 결과적으로 보았을 때, IP 레지스터를 변조하는 기법이다.sfp 영역에 최소 1바이트 이상의 overflow가 가능해야 한다.main()이외의 함수가 필요하다. 이 기법은 Epilogue 때문에 가능하다. leave - ret는 이전 함수의 sfp를 복구하고, return을 수행한다.각 구성을 제대로 살펴보면 아래와 같다.leave - mov esp, ebp - pop ebpret - pop eip - jmp eip 간단한 그림을 가지고 살펴보겠다.일반적으로 함수가 호출되면 위와 같은 구조를 지니게 된다.이제 여기에 FPO를 시행해보겠다.먼저 mo..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ Out Of Bounds는 배열의 인덱스 값을 음수 혹은 배열의 크기를 벗어난 값을 입력했을 때 발생한다. 개발할 때 인덱스에 대한 검증 과정 코드만 넣어주면 방지가 가능하다. if (idx = 128) { printf("Invalid index!\n"); return; } 아래 예제를 가지고 살펴보도록 하겠다.// gcc -no-pie -fno-stack-protector -z execstack -o ex ex.c#include #include void gift() { printf("Hello! ZZoMblE"); system("/bin/sh");}void initialize() { set..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ canary leak을 다룰 때도 사용했던 기법이다.https://whrdud727.tistory.com/entry/PWNABLE-Canary-%EC%9A%B0%ED%9A%8C [PWNABLE] Canary 우회※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 이전 포스팅에서 canary에 대해 다루었다. 이번에는 그 우회 방법들을 다루겠다. 1. canary leak 2. got overwrite (간단하게만 설whrdud727.tistory.com canary뿐만 아니라 stack, pie_base, libc_base 등의 값을 leak할 때 가장 많이 사용하는 친구 중 하나이다.일반적으로 printf(..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ libc 파일 내에서 execve('/bin/sh',0,0) 과 같은 셀을 실행주는 부분을 찾아주는 tool이다.다시 말해서 stack의 ret 위치에 one_gadget이 들어간다면 shell을 바로 얻을 수 있다는 것이다. 설치 방법gem install one_gadget 보통 ctf같은 곳에서는 libc파일을 제공해주지만 우리는 예제를 가지고 할 것이기 때문에 로컬 libc 파일을 가지고 해보겠다.사용 방법은 이미지와 같이 사용하면 된다.one_gadget {libc} 총 4개의 one_gadget이 있다고 나와있다.다 똑같은 거 아니냐고 말할 수 있는데, 기능은 같은게 맞지만 사용할 수 있는 상황이 다르다.예를들어 가장 ..