본문으로 바로가기

CodeBlue CTF 2017 simple memo pad Write Up

category 해킹/Write Up 2017. 11. 11. 20:35

0. introduce

대회 때 대충 예상은 했는데 아니겠지~ 하고 넘기다가 못풀었다..


1. Binary

RELRO

 STACK CANARY 

 NX

 PIE

 RPATH

 RUNPATH

 FILE

 No RELRO

 Canary found  

 NX enabled

  No PIE

 No RPATH

 No RUNPATH

 simple_memo_pad


Init : 20개의 청크를 할당하고 각 청크에 앞부분에 카나리를 넣는다.


1). Write a note on a blank area -> 카나리가 제대로 존재하는지 확인하고 앞 청크부터 기록한다.

2). Edit a note -> 카나리가 제대로 존재하는지 확인하고 입력한 청크를 수정한다.

3). Delete a note -> 카나리가 제대로 존재하는지 확인하고 입력한 청크를 지운다. (unlink)

4). Show a note -> 사용할 수 없는 기능이라고 나온다.


# Edit과 Delete는 한번씩밖에 할 수 없다.


2. Vulnerability

struct note

{

  __int64 canary;

  __int32 chk;

  __int32 index;

  char buf[128];

  __int64 fb;

  __int64 bk;

};


buf에 처음 할당할때는 128을 쓸 수 있고 수정할때는 136을 쓸 수 있어서 fb를 덮을 수 있다.

그리고 Delete되는 부분이 아래와 같이 자체적으로 unlink를 진행하기 때문에 취약점이 발생한다.

fb를 조작가능 하기 때문에 특정한 주소에 bk에 들어있는 주소를 넣는것이 가능하다.


3. Exploit

익스는 생각보다 간단한데, strtab의 주소를 bk의 주소로 덮어주면 된다. 그러면 strtab을 조작할 수 있고, 원하는 함수를 호출할 수 있다.







'해킹 > Write Up' 카테고리의 다른 글

2018 SharifCTF OldSchool-NewAge WriteUp  (0) 2018.02.04
CodeBlue CTF 2017 secret mailer service Write Up  (2) 2017.11.12
Pwnabletw Spirited Away Write Up  (0) 2017.10.08
CTF MISC 정리  (0) 2017.10.05
Pwnabletw BabyStack Write Up  (0) 2017.10.03