system hacking61 Memory Corruption: Double Free Bug free 함수로 청크를 해제하면 ptrmalloc2는 tcache나 bins에 추가하여 관리한다. 이후 malloc으로 비슷한 크기의 동적 할당이 발생하면 연결리스트들을 탐색하여 청크를 재할당해주는 메커니즘을 가지고 있다. tcache와 bins를 free list라고 통칭하면, free list의 관점에서 free는 청크를 추가하는 함수, malloc은 청크를 꺼내는 함수이다. 그러므로 임의의 청크에 대해 free를 두 번이상 적용할 수 있다는 것은 청크를 free list에 여러 번 추가할 수 있다는 뜻이다. 청크가 free list에 중복해서 존재하면 청크가 duplicated됐다고 표현한다. Double Free Bug Double Free Bug는 같은 청크를 두 번 해제할 수 있는 버그를 말한.. 2022. 1. 6. Memory Corruption: Use After Free Dangling Pointer Dangling Pointer는 유효하지 않은 메모리와 영역을 가리키는 포인터를 말한다. 메모리의 동적 할당에 사용되는 malloc 함수는 할당한 메모리의 주소를 반환한다. 일반적으로 메모리를 동적 할당할 때는 포인터를 선언하고, 그 포인터에 malloc 함수가 할당한 메모리의 주소를 저장한다. 그리고 그 포인터를 참조하여 할당한 메모리에 접근한다. 메모리를 해제할 때는 free를 호출하고 free 함수는 청크를 ptmalloc에 반환하기만 할 뿐, 청크의 주소를 담고 있던 포인터는 초기화하지 않는다. 즉, free 호출 후 포인터를 초기화하지 않으면 포인터는 해제된 청크를 가리키는 Dangling Pointer가 된다. // Name: dangling_ptr.c // Co.. 2022. 1. 5. Memory Corruption: Format String Bug 포맷 스트링 %[parameter][flags][width][.precision][length]type 형식 지정자(specifier) 형식 지정자 설명 %d 부호있는 10진수 정수 %s 문자열 %x 부호없는 16진수 정수 %n 인자에 현재까지 사용된 문자열의 길이를 저장 %p void형 포인터 width 최소 너비를 지정한다. 치환되는 문자열이 이 값보다 짧을 경우, 공백문자를 패딩해준다. 너비 지정자 설명 정수 정수의 값만큼을 최소 너비로 지정 * 인자의 값 만큼을 최소 너비로 지정 // Name: fs.c // Compile: gcc -o fs fs.c #include int main() { int num; printf("%8d\n", 123); printf("%s\n", "Hello, world".. 2022. 1. 5. Out of Bounds 배열의 속성 배열은 연속된 메모리 공간을 점유하며, 배열이 점유하는 공간의 크기는 요소의 개수와 요소 자료형의 크기를 곱한 값이된다. 배열이 포함하는 요소의 개수를 배열의 길이라고 부른다. 배열 각 요소의 주소는 배열의 주소, 요소의 인덱스, 요소 자료형의 크기를 이용하여 계산된다. Out of Bounds OOB는 요소를 참조할 때, 인덱스 값이 음수이거나 배열의 길이를 벗어날 때 발생한다. 개발자가 인덱스의 범위에 대한 검사를 명시적으로 프로그래밍하지 않으면, 프로세스는 앞서 본 식을 따라 요소의 주소를 계산할 뿐, 계산한 주소가 배열의 범위 안에 있는지 검사하지 않는다. 만약 사용자가 배열 참조에 사용되는 인덱스를 임의 값으로 설정할 수 있다면, 배열의 주소로부터 특정 오프셋에 있는 메모리의 값을 .. 2021. 12. 30. 이전 1 2 3 4 ··· 16 다음