본문으로 바로가기

Codegate 2014 angry_doraemon

category 해킹/Write Up 2017. 1. 28. 17:14

0. Introduce

문제에는 여러가지 취약점이 있었는데, stack smashing detected가 뜨는걸보고 이부분을 gdb로 뜯어봤는데 데이터가 들어가는 부분부터 보면 주소값이 없어서 왜 버퍼오버플로우가나는데 근처에 주소값이 없는지생각하다가 다른곳을 삽질해서 시간을 조금 낭비했다.. 그냥 2더한값부터 본다면 바로 주소가보였는데.. 어쨋든 취약점 찾는부분 빼고 나머지는 luckyzzang과 거의 비슷했다.


1. Binary


1.Sword

2.Screwdriver

3.Red-bean bread

4.Throw mouse

5.Fist attack

6.Give up

처음 시작할 때 6가지 메뉴가 있으며 도라에몬의 체력을 다 깎으면 이기는 게임이다.



2.Vulnerability


5번을 선택하게되면 이 함수가 실행된다. 그리고 right-fist attack을 선택하면 0x08로 시작하지 않는 4바이트 주소값을 Call한다.

하지만 코드영역을 사용하지 못하면 결국 라이브러리를 사용해야하는데 leak이 나지않아 사용할 수 없다.



4번을 선택하면 실행되는 함수이다. read에서 버퍼오버플로우 취약점이 나며 'You Choose %s'에서 memory leak을 할 수 있다.


3. Exploit

해야하는건 다음과같다.

1. canary leak

: canary를 leak하는건 printf("You Choose '%s' !\n", &buf);를 이용하면 할 수 있다. gdb로 디버깅을해서 카나리의 위치를 찾아보면 buf + 10에 위치하는것을 알 수 있다. 하지만 카나리의 값의 마지막 값이 \x00이라서 카나리 leak이 되지않았다. 그래서 buf + 11부터 leak을 해오고 leak해온 값에다가 \x00을 붙여주었다.


2. system address leak (libc leak)

:  write(0x4, write_got, 0x4) 이런식으로 rop chain을 구성해서 write_got를 leak해온뒤 libc로 system주소값을 구해줬다.


3. write cmd('nc -lvp 5555 -e /bin/sh\x00') on writable address

: read(0x4, writable_add, 0x4) 이런식으로 rop chain을 구성해서 cmd를 send하면 writable address에 cmd를 입력할 수 있다.


4. system + dummy(4) + cmd

: 셋팅하고 leak해온 값들로 최종 Exploit을 하면된다.


5. nc ip port

: 쉘 획득.



https://github.com/LYoungJoo/CTF-Write-Up/blob/master/2014_Codegatepwn%20Write%20UP/angry_doraemon.py


4. NOTE

문제를 풀고 다른 write-up들을 구경하다가 pwntool의 ROP()와 ELF()를 이용하여 쉽게 푸는것을 보았다. 앞으로 그런방법을 연구해 보아야 겠다.


(영어를 잘 못하지만 깔끔하게 익스한것 같아서 기쁘다)




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

Hackcon Mini 2017 Pwnable WriteUp  (0) 2017.02.12
Plaid CTF 2014 ezhp Write Up  (0) 2017.01.29
HDcon luckyzzang write up  (0) 2017.01.27
3DS CTF 2016 not-the-same-200 Write Up  (0) 2017.01.27
3DS CTF 2016 get-started-100 Write Up  (0) 2017.01.27