pwnable

System Hacking Advanced

Pwnable러를 위한 PwnDocker

Pwnable러를 위한 PwnDocker안녕하세요. 오랜만에 게시글로 돌아온 "keyme"입니다. 요즘 pwnable에 빠져서 열심히 학습하고 있는데요. pwnable을 공부하면서 느낀점은 ubuntu 환경을 구축해서 동적디버깅하는 것이 필수라는 것입니다. 따라서 ubuntu 버전 별로 환경을 구축하는 방법을 고민했고 Docker로 구축하는 것이 가장 간편하다는 것을 깨달았습니다. 이번 글은 pwnable을 공부하시는 분들을 위해 ubuntu 버전 별로 Dockerfile을 공유하고자 작성했습니다. 다른 분들의 글도 참고했으나, 과거에 쓰신 것들이라 에러가 발생하는 경우도 있었고 개인적으로 추가하고 싶은 툴들도 있어서 추가/수정해서 신규 버전으로 업데이트 했습니다. 추가로 docker 명령어로 build..

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

keyme
'pwnable' 태그의 글 목록