#dokydoky
ghostparty.cpp 소스를 보면서 실제 문제가 될만한 곳들을 먼 훑어본 후, 익스플로잇 해봅니다.전체 소스코드는 여기서 확인.https://github.com/dokydoky/writeup/blob/master/pwnerable.tw/ghostparty/ghostparty.cppVulerability case 1Uninitialized variable, UAF, memory leakclass Alan : public Ghost { public : Alan():lightsaber(NULL){ type = "Alan" ; }; Alan(int ghostage,string ghostname,string ghostmsg){ type = "Alan"; age = ghostage ; name = new ch..
0. Introghostparty binary기준으로 C++ string, vector 분석 내용을 정리합니다. c++ reversing에 익숙하지 않으신 분은 Reversing C++ programs with IDA pro and Hex-rays 을 먼저 읽어보시는걸 추천합니다. reversing하면서 정의한 구조체는 맨 아래에 적어두겠습니다.c++코드와 IDA에서 decompile된 코드를 비교하면서 정리하겠습니다. (테스트 환경은 64bit Ubuntu 16.04)1. stringstring은 dynamic char 배열입니다. 표현되는 방식이 여러개 있지만, 여기서는 ghostparty 바이너리에서 사용된 방법을 기준으로 설명합니다. string의 member는 아래와 같습니다. 주의해야 할 것은..
Double free 취약코드 struct P {}; class C { P *p; public: C(P *p) : p(p) {} ~C() { delete p; } void f() {} }; void g(C c) { c.f(); } void main() { P *p = new P; C c(p); g(c); } g()의 매개변수 타입을 reference로 변경해주면 되지만, 근본적으로 이런 실수가 발생하지 않게 복사 생성자와 대입 연산자를 삭제한다. 이 경우 g()함수의 매개변수가 reference 타입이 아니면 컴파일 에러가 발생하여 컴파일 타임에 오류를 확인할 수 있다. struct P {}; class C { P *p; public: C(P *p) : p(p) {} C(const C&) = delete..