System Hacking Advanced

System Hacking Advanced

[dreamhack] house_of_spirit

개념정리House of Spirit은 fastbin을 공격하는 기법으로, 같은 크기만큼 재할당 하는 경우에는 같은 주소를 반환하는 fastbin 특성을 이용한다. free() 함수의 인자를 조작해서 임의 메모리를 해제할 수 있을 때 사용할 수 있는 기법이다. 정확히는 스택/힙에 fake chunk size를 쓰고 해당 주소에서 0x8을 더한 주소를 free 할 수 있는 경우에 발생한다. ○ House of force와의 차이점House of force은 실제 Top chunk size를 조작하는 공격 기법이지만, House of Spirit은 Top chunk size를 변경할 수 없는 경우에 fake chunk를 구성해서 공격하는 기법이라는 차이점이 있다. 예를 들어보자. 다음과 같이 스택에 prev_..

System Hacking Advanced

[dreamhack] house_of_force

개념정리House of Force 기법은 top chunk의 size를 조작하여, 임의 주소에 힙 청크를 할당할 수 있는 공격 기법이다. top chunk는 기본적으로 다음 할당을 위한 주소를 저장하는 역할을 한다고 이해하면 된다. 따라서 top chunk의 size를 조작한다면 다음에 할당할 주소를 조작하는 것과 같기 때문에 임의 주소에 쓰기가 가능한 것이다. House of Force는 공격자가 top chunk의 size를 조작하고, 원하는 크기의 힙 청크를 할당할 수 있을 때 활용 할 수 있다. ○ _ini_mallocstatic void *_int_malloc (mstate av, size_t bytes){ INTERNAL_SIZE_T nb; /* normalized ..

System Hacking Advanced

[dreamhack] cpp_smart_pointer_1

개념정리○ smart pointer스마트 포인터(Smart Pointer)는 메모리 누수(Memory Leak)를 방지하기 위해 사용되는 C++의 기능 중 하나다. 동적 할당된 메모리를 가리키는 포인터가 더 이상 필요하지 않을 때, 해당 메모리를 자동으로 해제하는 포인터를 말한다. 스마트 포인터는 일반적으로 std::shared_ptr, std::unique_ptr, std::weak_ptr 등의 클래스로 구현된다. 이러한 스마트 포인터들은 더 이상 사용되지 않는 동적 할당된 메모리를 추적하고, 해당 메모리를 자동으로 해제하여 메모리 누수를 방지한다. ○ smart pointer Typestd::shared_ptr은 여러 포인터가 하나의 메모리를 가리킬 때 사용되며, 참조 카운트(Reference Cou..

System Hacking Advanced

[dreamhack] cpp_container_1

개념정리container overflow와 관련된 문제를 다룬다. C++에서는 std::memcpy, std::memmove, std::memset , std::copy 와 같이 메모리를 복사하는 함수들이 사용된다. 해당 함수들을 사용하는 경우에는 주의할 점이 있는데, 길이에 대한 검증이다. 만약, 복사 과정에서 길이에 대한 검증이 존재하지 않다면, 쉽게 overflow가 발생할 수 있다. void f(const std::vector &src) { std::vector dest(5); std::copy(src.begin(), src.end(), dest.begin());}특히, container는 기본적으로 heap 영역에 데이터가 생성되고 std::copy 를 이용해서 cont..

System Hacking Advanced

[dreamhack] cpp_type_confusion

개념정리type confusion은 프로그램에서 사용하는 변수나 객체를 선언/초기화했을 때와 다른 타입으로 사용할 때 발생하는 취약점이다. C와 C++로 만들어진 프로그램에 Type Confusion 취약점이 존재한다면 메모리 커럽션이 유발되어 공격자가 시스템을 장악하는 것이 가능하다. 이러한 취약점은 형 변환(Type Casting)과정에서 발생한다. cast는 변수, 객체의 형태를 기존과 다른 타입의 형태로 바꾸는 것을 말한다. C++에서 객체의 형태를 변환할 때 사용되는 연산자는 다음과 같다. ○ 연산자 종류dynamic_cast런타임에 타입을 체크하여 다운캐스팅을 수행하는 연산자다. 다운캐스팅 시 안전한 형변환이 가능한 경우에만 캐스팅을 수행하며, 안전하지 않은 경우에는 NULL 포인터를 반환한다..

System Hacking Advanced

[dreamhack] cpp_string

checksec└─# checksec cpp_string[*] '/root/dream/cpp_string/cpp_string' Arch: amd64-64-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x400000)문제풀이//g++ -o cpp_string cpp_string.cpp#include #include #include #include #include char readbuffer[64] = {0, };char flag[64] = {0, };std::string writebuffer;int read_file(){ std::ifstream ..

keyme
'System Hacking Advanced' 카테고리의 글 목록 (2 Page)