일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- srop
- K-shield Junior
- _IO_FILE
- DreamHack
- Lazenca
- heap feng shui
- DFB
- Android
- shellcode
- Dynamic Analysis
- seccomp
- malware
- __environ
- _IO_FILE Arbitrary Address Read
- heap exploit
- 나뭇잎 책
- H4CKING GAME
- RTL
- DFC 2022
- _IO_FILE Arbitrary Address Write
- tcache
- HackCTF
- Reversing
- GOT overwrite
- vtable
- BOF
- master canary
- heap
- UAF
- ROP
- Today
- Total
목록heap (17)
Studying Security

_int_free() 이해하기 메모리가 해제된 chunk의 포인터가 올바르게 정렬된 포인터인지 확인하기 위해 misaligned_chunk()를 요청함 chunk의 정렬이 올바르지 않다면 "free() : invalid pointer" 메시지와 함께 종료 해당 chunk의 size에 저장된 값이 MINSIZE 보다 작고 해당 값이 정상적으로 정렬된 값인지 확인함 조건을 충족하지 못한다면 "free() : invalid size" 메시지와 함께 종료 해당 chunk의 크기가 fastbin에 해당하는지 확인 다음 chunk의 size에 저장된 값이 아래 조건에 만족하는지 확인 (chunk의 "size"에 저장된 값 - 사용된 flag bit를 모두 제거한 값) = av->system_mem의 값) 확인 해당..

※ malloc()에서 Top chunk를 사용하여 메모리를 할당하는 방법 p = av->top; (main_arene→top이 가지고 있는 값을 victim에 저장) size = chunksize(p); (top chunk의 크기를 size에 저장) "top chunk의 크기(size)" >= "새로 요청된 메모리의 크기(nb) + chunk의 최소 크기(MINSIZE)"일 경우 Top chunk의 공간 사용 "remainder_size" = "size" - 새로 요청된 메모리의 크기(nb)를 뺀 값 "remainder" = victim에 저장된 값 + 새로 요청된 메모리의 크기(nb) main_arene→top = remainder set_head()를 이용하여 새로 요청된 메모리의 크기(nb)를 v..

Poison null byte Off-by-one에 기본을 둔 heap관련 취약점으로 chunk의 size 값에 null byte를 저장할 수 있으며 변경된 크기가 유효한 크기가되면 사용할 수 있습니다. 공격 대상 heap 영역과 공격 대상 heap 영역에 할당할 수 있는 fast bin이상의 heap 영역이 필요합니다. 과정 malloc(0x80), (0x200), (0x80) wrote a fake prev_size free(0x6020a0) overwrite a null byte in the size area of free chunk malloc(0x80) malloc(0x80) free(0x602090) free(0x6022b0) malloc(0x280) 해당 과정을 거치고나면 같은 메모리 영역(..

Overlapping chunks란? free chunk의 size 값을 변경하여 해당 free chunk가 원래 크기보다 더 큰 메모리를 할당받도록해 기존 chunk의 공간을 덮어쓰는 기법입니다. Unsorted list에 chunk가 배치되어 있고 해당 chunk가 요청된 크기를 할당하기에 충분하다면, 해당 chunk를 재할당합니다. 만약 요청된 메모리의 크기가 해당 chunk의 크기보다 작다면, 해당 chunk에서 요청된 크기만 큼 메모리를 할당하고 남은 메모리 공간은 arena에 반환합니다. 메모리를 분할하고 남은 크기가 매우 작을 경우에는 메모리를 분할하지 않고 chunk를 재할당합니다. 주의점 Free chunk의 "size"에 저장되는 값 다음 free chunk의 "mchunkptr" 이거..

malloc()이 unsorted bin에 등록된 chunk를 재할당 할때 해당 chunk를 unsorted bin의 list에서 어떻게 삭제하나? 메모리 할당 요청(malloc) 요청 size에 적합한 chunk가 fast bin, small bin, large bin에 존재하는지 확인한다. 2번 과정에서 적합한 chunk를 찾지 못하면 unsorted_chunks(av)->bk와 unsorted_chunks(av)의 반환 값 비교한다. 서로 다르다면 Unsorted bin에 free chunk가 존재한다는 뜻을 의미 Unsorted bin에 free chunk가 있다면 unsorted_chunks->bk의 값을 victim에 저장한다. victim->bk가 가지고 있는 데이터를 bck에 저장한다. 간..
Heap Feng Shui란? Heap 영역에 할당된 chunk의 레이아웃을 조작하여 Exploit에 용이하게 하는 기술 이를 이용해 Exploit의 정교함과 신뢰성을 높일 수 있다. 관련 문제 2022.04.29 - [Wargame/HackCTF] - [HackCTF] pwnable: 풍수지리설 풀이 [HackCTF] pwnable: 풍수지리설 풀이 Mitigation Vulnerability Analysis IDA disassembler를 이용해 main함수부터 살펴보자 menu 0. add_location 1. delete_location 2. display_location 3. update_desc 크게 4개의 함수가 보이고 해당함수에 대.. j4guar.tistory.com Reference h..

Heap Spray란? Heap 영역을 확장하면서 해당 영역을 특정 값[주소 값 or NOP or NOP+Shellcode 등]으로 가득 채우는 기술 Exploit의 성공 가능성을 높이기 위해 많은 Heap 공간을 요청 Heap Spray로 대부분의 아키텍처와 운영체제에서 heap이 할당되는 시작 위치의 예측이 가능합니다. 대략적으로 동일한 위치에 Spray된 Heap이 존재하며 Heap을 연속으로 할당한 경우 대부분 순차적으로 할당됩니다. Heap영역의 값을 읽어 해당 주소로 이동하는 함수 포인터를 덮어쓸 수 있는 취약성이 있을 경우에 사용될 수 있다. Heap영역의 주소를 함수 포인터로 사용하여 실행 흐름을 제어할 수 있습니다. 단. Heap spray 사용시 무작정 큰 사이즈의 요청을 통해 heap..

Mitigation Vulnerability Analysis IDA disassembler를 이용해 main함수부터 살펴보자 menu 0. add_location 1. delete_location 2. display_location 3. update_desc 크게 4개의 함수가 보이고 해당함수에 대한 기능을 살펴봐야겠다. 0. add_location s(description)라는 변수에 해당함수로 들어오기 전에 입력한 크기(a1)만큼 메모리를 할당 v2에 128byte의 메모리를 할당 (4byte는 s(description)의 주소값 + 124byte는 Name 입력) 이 후 update_desc함수 실행(description을 재입력(length와 text) 받음 메모리를 재할당받는게 아님) 이를 그림..