본문으로 바로가기

Plaid CTF 2014 ezhp Write Up

category 해킹/Write Up 2017. 1. 29. 20:37

0. introduce

Heap 공부를 하려고 heap문제중에 난이도가 쉬운편에 속하는 CTF문제를 찾다가 알게되었다.

처음에 이상한 함수를 보고 겁먹었는데 gdb로 뜯어보는게 제일 좋은것같다.


1. binary

하나도 안걸려있다!

1 to add a note.

2 to remove a note.

3 to change a note.

4 to print a note.

5 to quit.


이렇게 5개의 메뉴를 가지고 간단하게 note를 할 수 있는 프로그램이였다.

특이한점은 노트를 추가할때 사이즈만 등록해서 추가하고 내용을 추가하려면 change a note에서 내용을 추가해야 한다.


2. Vulnerability


add a note인데 sub_804858B함수를 확인해보면 커스텀 malloc함수인걸 알 수 있다.

이 함수에서는 입력받은 크기만큼 그냥 malloc해준다.


change a note를 보면 원하는 청크를 선택해서 원하는 사이즈만큼 데이터를 넣는다.

그러므로 Heap Overflow가 발생한다.


print a note이다. 청크내용을 출력한다.우리는 원하는 청크를 Heap Overflow로 마음대로 조작할 수 있으므로 여기서 Memory leak이 나는것을 알 수 있다.


3. Exploit

이 프로그램에서 사용하는 Malloc을 분석해보면 청크는



prev_size(4) + size(4) + fd(4) + bk(4) + data(?)


이런 형식으로 구성 되었다. 그리고 fd와 bk는 &size + 4, &size + 8이렇게 되었다.

좀 신기한점은 free하지 않아도 fd와 bk가 있다는 점이 신기했다.

그리고 sub_804858B를 보면 지금 malloc에 적용되어있는 fd, bk검증 구문이 없는것을 알 수 있고 이것은 fd, bk를 조작해서 원하는곳에 값을 쓸 수 있다는것을 말한다.

나는 다음과같이 exploit을 했다.


1. 힙 청크 3개를 선언. (size = 12)

2. 첫번째 청크를 overflow시켜서 두번째 청크의 fd를 leak함.

3. leak한 fd에 + 0xc를 해서 3번째 청크 데이터주소를 구함.

4. 다시 첫번째 청크를 overflow시켜서 두번째 청크의 fd, bk를 (leak_add+0xc), (exit_got+4)로 조작한다.

5. 2번째 청크를 지워서 unlink가 발생하도록 한다.

6. 3번 청크의 데이터 에다가 쉘코드를 써준다.

7. exit_got를 실행


이게 순서가 정말 중요하다.. 순서를 이상하게 했다가 오래걸렸다..



https://github.com/LYoungJoo/CTF-Write-Up/blob/master/2014_Plaid_ctfpwn%20Write%20Up/ezhp.py


Clear~

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

Codegate 2017 prequals Babypwn Write Up  (0) 2017.02.16
Hackcon Mini 2017 Pwnable WriteUp  (0) 2017.02.12
Codegate 2014 angry_doraemon  (0) 2017.01.28
HDcon luckyzzang write up  (0) 2017.01.27
3DS CTF 2016 not-the-same-200 Write Up  (0) 2017.01.27