CPP

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::ifstrea..

keyme
'CPP' 태그의 글 목록