본문 바로가기
728x90

Systemhacking/Base info12

File Stream Oriented Programming 우리는 여러 File operation 들을 안다. (예를 들어서 fclose, fopen, fread... 등등) 이들은 모두 리눅스의 file descriptor라는 단위(device 따위가 사용함)를 통해 사용되는 operation들이다. 이 file descriptor들은 파일 구조체(_IO_FILE)을 통해 조작 즉, file operation들은 이 _IO_FILE을 참조하여 동작한다. _IO_FILE의 모습에서 일단 _lock에 null을 넣지 않으면 file 연산이 수행되지 않는다는 것만 알아두자. → 우리가 아는 멀티스레딩에서 lock 부분에 해당함(그냥 웬만하면 그대로 두자...) 각설하고! 가장 중요한건 제일 마지막에 있는 _IO_FILE_PLUS의 vtable이다. tele를 통해 .. 2023. 7. 19.
IO_buf_end attack IO_buf란? 파일스트림은 buffering이라는 기술을 구현해 더 안정적이고 효율적으로 동작하게 된다. 즉, 데이터의 생산자와 소비자가 서로 처리속도가 다를 경우 예를 들어, 데이터 처리 속도가 [생산자 > 소비자]인 상황에서 완충 역할을 하게 된다. SysCall은 커널 단에서 작업을 수행하기 위해 존재한다고 말했다, (Application 단에서 디바이스를 조작할 수 있으면, 공격자의 칩입이나 사용자의 실수에 너무 취약하기 때문임) 즉, 어떤 프로세스가 있다면 이 프로세스가 사용하는 데이터는 User ↔ Kernel 영역을 돌아가면서 실행하게 된다. (이를 context switching 이라고 부름) 이때 context엔 레지스터 값이나 flag와 같은 정보들이 저장된다. 만약 아래의 코드에서 .. 2023. 7. 19.
malloc consolidate with Fastbin_Dup Consolidate "Malloc consolidate는 개발자 입장에선 external fragmentation을 막을 수 있어서 좋고, 공격자 입장에서는 fastbin을 병합함으로써 small bin(libc) 주소를 leak하거나, double free(fastbin dup conslidate)할 때 사용한다." ( from brwook ) 아래 코드는 https://github.com/andigena/glibc-2.23-0ubuntu3/blob/master/malloc/malloc.c의 코드 중 fastbin에서 unsorted bin으로 free chunk가 이동하는 malloc consolidate에 해당하는 코드이다. if ((unsigned long)(size) >= FASTBIN_CONSOLIDATION_T.. 2023. 6. 4.
small bin attack House of Lore 라고도 불리우는 small bin attack에 대해 알아보자. 이는 free된 후 small bin에 들어간 chunk의 bk를 조작해, 원하는 chunk를 small bin에 넣는 공격이다. 이때 원하는 chunk는 free된 것으로 설정해도 가능하고, 이미 malloc을 통해 할당 받은 것도 가능하다. 그러나, small bin size의 chunk는 free된 후 unsorted bin에 우선적으로 들어가므로, 더 큰 크기의 chunk를 할당받아, unsorted bin의 free chunk를 small bin으로 이동시켜야 한다. 아래는 small bin의 free chunk 체크 로직을 우회하기 위한 방법이다. real_chunk→bk = fake_chunk fake_.. 2023. 6. 4.
unsorted bin attack unsorted bin에 등록된 chunk가 재할당될 때 bin에서 이를 정리하는 과정에서 발생하는데, 이 공격을 통해 우리는 libc의 bins 주소를 획득하거나, 특정 영역에 큰 수를 저장할 수 있다. unsorted bin attack을 malloc.c 소스코드와 함께 이해하고 싶다면, 아래의 lazenca 사이트를 참조하라 unsorted bin attack[Korean] unsorted bin attack[Korean] - TechNote - Lazenca.0x0 Excuse the ads! We need some help to keep our site up. List Unsorted bin attack Unsorted bin attack을 이해하기 위해서는 malloc()이 unsorted b.. 2023. 6. 2.
unsafe Unlink in heap 이번에 알아볼 기법은 unsafe unlink라는 기법이다. 해당 기법을 알아보기 전에 우선 Unlink라는 것이 무엇인지부터 살펴보도록하자. Unlink란? fastbin을 제외한 나머지 bins(지금부터 설명하는 내용들은 fastbin을 제외하고 나머지 bins과 관련된 설명임)는 어떤 chunk를 free할 때 바로 앞 혹은 뒤에 free chunk가 존재하면 이를 병합하여 관리하는 기능이 있다. 병합 시 기존에 bin list에 등록된 chunk가 존재하고 이들은 double linked list 구조를 가지고 있으므로 chunk 병합을 수행할 때 fd, bk를 정리해주는 과정을 거치게 된다. 이것을 unlink라고 하며 한 문장으로 정리하자면 인접한 두 free chunk를 병합할 때 fd, b.. 2022. 11. 7.
Fastbin Double Free 저번 시간에 이어 heap영역의 취약점을 이용하는 방법에 대해 알아보자. 필자의 pwndbg가 올바르게 작동하지 않아 bound7님의 자료를 참고하여 글을 포스팅함을 알린다. (감사합니다 형님 꾸벅 (_ㅇ_) ) 1. Libc leak Tech Unsorted bins, Small bins, Large bins를 이용하여 main_arena의 주소를 알아내는 방법이다. 만약 Fastbins 이외의 사이즈를 할당한 후 Free하면 FD, BK영역에 main_arena 주소가 들어가는 것을 응용하는 것이다. 2. Fastbin duplicate(Double Free) 더블 프리 취약점이 있을 때 이용할 수 있는 기술로 우리가 원하는 곳에 원하는 값을 쓸 수 있는 방법 중 하나이다. 이러한 취약점이 발생하는 .. 2021. 4. 4.
Heap Base 이제 Heap 영역을 공격하기 위한 기초 지식을 쌓을 것이다. 필자의 pwndbg가 올바르게 작동하지 않아 bound7님의 자료를 참고하여 글을 포스팅함을 알린다. (감사합니다 형님 꾸벅 (_ㅇ_) ) 우리는 C언어를 공부하면서 malloc이라는 함수를 자주 사용한 적이 있다. 그런데 이런 의문을 가진 적은 없는가? "동적 할당된 메모리의 크기를 어떻게 알고 해제(free)할 수 있는거지?" 사실 이러한 문제 말고도 여러 문제가 존재할 수 있다! (예를 들어 해제한 메모리는 어떻게 저장해놓고 다시 사용하는 것이지 등등...) 제작자는 이러한 문제를 해결하기 위해 동적할당한 메모리를 하나의 구조체에 담아서 사용하고 있다. pwndbg로 확인하면 다음과 같은 모습으로 나타나게 된다. 각 데이터의 의미는 다음.. 2021. 4. 3.
What is GOT & PLT PLT - Procedure Linkage Table은 실제 호출코드를 담고있는 테이블로써, 해당 내용을 참조하여 "_dl_runtime_resolve"가 수행되고 실제 시스템 라이브러리 호출이 이루어지게 된다. 쉽게 말하자면 외부라이브러리를 연결해주는 코드를 담고 있는 공간이다. 실제 바이너리에서도 사용하고자 하는 함수/라이브러리 주소 대신 PLT를 호출한다. GOT - Global Offset Table은 PLT가 참조하는 테이블로 procedure들의 주소가 있다. PLT가 어떤 외부 프로시저를 호출할 때 GOT를 참조하여 해당 주소로 분기된다. PLT함수들은 GOT라는 테이블의 주소로 분기하고 GOT는 외부 라이브러리의 함수/변수의 주소를 저장한다. 아래는 PLT, GOT가 프로그램 내부에서 pr.. 2021. 1. 24.
728x90