일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- wnourefresh
- packet filter
- DOCKER-USER
- mvwin
- edge trigger
- vtable
- cbpf
- ncurses
- Compiler
- iptables
- level trigger
- 취약점
- rfc5508
- REDIS
- .net core 7
- 풀이
- architecture
- ioctl
- epoll_wait
- BOF
- C언어
- 어셈블리어
- NAPT
- doupdate
- Docker
- wrefresh
- packet flow
- .nret core 배포
- LOB
- epoll
- Today
- Total
목록Computer Science (129)
Tuuna Computer Science
추가) JMPREL 이라고 .rel.plt부분의 구조체는각 각 0x24의크기인데이는 reloc_offset으로 _dl_fixup()함수내부에서 찾아낸다. 그리고 rel.plt 구조체 내에는 3개의 멤버가 있는데 각 각, reloc_offset에 맞게 정의된 함수의 GOT주소값 r_info라고 하위 1바이트는 심볼의 타입을 나타내고 나머지는 값은 dynsym내에서 인덱스값을 지정하는거 같다. 즉, 처음 .rel.plt의 주소값이 A라면 특정 함수의 relocation 구조체의 주소값은 A+reloc_offset*24로 설명되며 특정 함수의 .dynsym 위치는 .dynsym의 주소값 + relocation.r_info(나머지 부분)*24하면 구해진다. 그럼 이 특정 함수의 .dynstr의 값은 어케구하냐 ..
heap address leak a, b, c 3개를 malloc 요청하고 c와 b 순서대로 free시키면 fastbin이므로 LIFO원칙에 따라 b의 fd에는 C의 heap주소값을 가리키게 된다. 이때 a를 overflow시킬 수 있다면 b에 있는 C의 heap주소를 leak해낼 수 있다. 이때 a chunk를 특정 문자로 b의 fd까지 넣으면 printf로 인해서 널문자까지 출력되는데 이때 C의 heap주소값도 포함되게 된다.
unsorted bin을 통해서 library base address를 leak할 수 있다는 정보를 얻었고 실제로 재현. ptr1와 ptr2라는 128byte의 malloc을 요청한다. 이는 72byte인 fastbin보다 큰 수이기 때문에 free시 unsortedbin에 들어가게되며 병합되어 small bin으로 가게된다. 이때 ptr1을 처음 free했을 때 unsorted bin에 들어가게 되는데 단일 chunk로서 fd와 bk를 연결할 곳이 없어 fd와 bk모두 main_arena+88의 주소를 가리키게 된다. 그럼 이때 free된 청크를 다시할당하면 UAF취약점이 발생하게 되어 main_arena+88의 주소값을 leak할 수 있게 된다. main_arena는 libc.so.6 에 존재하므로 ..
malloc & heap 찍어누르기 2탄과 3탄은 트레이닝 바이너리 문제를 풀다가 unsortedbin을 통해 library leak과 fastbin을 통해 특정 메모리 할당에 대해 배운것을 정리할겸 작성 malloc을 통해 stack 공간 할당하기 기본적인 이론은 fastbin에 들어있는 chunk들은 병합을 하지 않으며 LIFO방식의 단일 연결리스트를 구성하고 있다. 그리고 재할당시 최상위 chunk를 재할당하며 다음 재할당시 반환된 chunk의 fd값에 있는 chunk를 재할당하게 된다. 그럼 fd값을 조작할 수 있다면 조작된 fd값에 allocate가 된다. 일단 a와 b를 malloc을 통해 할당한다. 0은 8바이트로 취급된다. b와 a 순서대로 free한다. a와 b는 8바이트이므로 fastb..
protostar heap3문제의 double free bug를 구글링 3일 동안 해가면서 공부한것을 정리하려함. 일단 설명할 malloc()은 x86기준으로 설명할 것임. 우리가 알고 있는 malloc함수는 Heap영역에 우리가 원하는 크기만큼 메모리를 할당하는 것인걸로 알고 있고. 해제 할때는 해당 메모리의 포인터값을 free()함수의 인자로 넣으면 된다는 것을 알고 있다. 그런데 여기서 이상한 점이 있다. free()라는 함수에 단지 Heap영역에 할당받은 포인터값을 넣었는데 어떻게 메모리에서 해제되었을까. 그 이유는 malloc의 chunk(메모리 할당 부분)에서 찾아볼 수 있다. struct malloc_chunk { INTERNAL_SIZE_T prev_size; /* Size of previ..
컴파일러가 기계어 코드를 만들어 내기까지의 단계에는 Lexical Analysis, Syntax Analysis, Semantic Analysis, IR Generation, IR Optimization, Code Generation, Optimization이 있다. Optimization 단계의 경우 최종적으로 만들어낸 기계어 코드를 바탕으로 최적화를 시키는데 예를 들어, Control Flow Analysis과 Data Flow Analysis을 바탕으로 최적화를 진행시킨다. 여기서 Data Flow Analysis의 경우 내가 잘 모르기때문에 일단 패스할 예정 (공부해서 추가할거임) Control Flow Analysis의 경우 프로그램의 제어흐름을 분석하는 것을 의미한다. 그럼 컴파일러는 Cont..
// [ROTATE shift] unsigned int _rotl(unsigned int value, int shift) { if ((shift &= 31) == 0) return value; return (value > (32 - shift));} /* 이때 32는 int형이 32일 때를 가정한 것이다. */ unsigned int _rotr(unsigned int value, int shift) { if ((shift &= 31) == 0) return value; return (value >> shift) | (value
JMP명령어와 CALL명령어에 사용되는 오퍼랜드가 절대주소가 아닌 상대주소로 쓰인을 알게되었음. 구하는 방식은 현재 위치하는 주소를 뛰어갈 주소에서 뺀다음 JMP의 명령어 바이트만큼(5byte) 뺀다. 상대주소 = 뛰어갈 위치의 주소 - 현재 위치하는 절대주소 - 5 지금까지 어셈블리단에서 작성하면 어셈블러가 자동으로 변환해주었나 보다 ㅎ
IMAGE_IMPORT_DESCRIPTOR를 엄청나게 헷갈려했기에 정리하는 겸 배운만큼 써볼려함. 일단 IMAGE_IMPORT_DESCRIPTOR은 typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; DWORD OriginalFirstThunk; // INT(Import Name Table) address (RVA) }; DWORD TimeDateStamp; DWORD ForwarderChain; DWORD Name; // library name string address (RVA) DWORD FirstThunk; // IAT(Import Address Table) address (RVA) } IMAGE_IMPORT_DESCR..
첨에 찾은게 아래 방식이여서 이방식을 계속사용하다가 case WM_CREATE : // Get the handle to the client area's device context. hdc = GetDC (hWnd); // Extract font dimensions from the text metrics. GetTextMetrics (hdc, &tm); xChar = tm.tmAveCharWidth; xUpper = (tm.tmPitchAndFamily & 1 ? 3 : 2) * xChar/2; yChar = tm.tmHeight + tm.tmExternalLeading; // Free the device context. ReleaseDC (hWnd, hdc); // Set an arbitrary maxi..