본문으로 바로가기

Codegate 2017 prequals Babypwn Write Up

category 해킹/Write Up 2017. 2. 16. 21:04

0. Introduce

대회당시 취약점은 바로 찾았으나 익스프로잇할때 조건들을 상세히 따지지않고 막무가내로 풀다가 시간이 오래걸렸던 문제였습니다.. 다음부턴 익스하기전에 바이너리분석부터 끝내놓고 해야겠습니다..


1. Binary

Stack CanaryNx가 켜져있는 것을 확인할 수 있다.

바이너리는 소켓서버 프로그램이였으며, 로컬에서 babypwn을 실행한다면 tcp 8181포트로 접근할 수 있다.


세가지의 메뉴로 구성되어 있으며, Echo는 입력받은 문자열을 출력하며 Reverse Echo는 입력받은 문자열을 거꾸로 출력한다. 또한 일정시간이 지나면 Time Out!이 뜨면서 자동으로 나가진다.


2. Vulnerability

echo에서 입력받는 부분을 확인해보면 0x64만큼 입력을 받는데 선언된 버퍼는 0x50이므로 BOF가 발생한다.

(reverse echo도 마찬가지)


3. Exploit

echo에서 dummy(56) + ret(4) 이런식으로 ret을 덮어씌울 수 있는데, stack canary가 걸려있으므로 stack smashing detected가 발생한다.

하지만 echo에 출력하는 부분을 확인해보면 strlen으로 입력값의 크기를 측정하고 그만큼 send하기 때문에 카나리 바로 전까지 데이터를 채우고 send하면 카나리를 Leak할 수 있다. (카나리의 마지막 1바이트가 00이므로 dummy+1을 보내야함)


그리고 payload의 길이가 0x2C이상이면 안되기 때문에 (0x64 0x38) 최대한 간단히 payload를 구성해야한다.


하지만 pltsystem이 있으므로 libc_baseleak할 필요없이 Write권한이 있는 메모리 영역에다가 명령어를 입력하고 system함수를 호출 하는 방식으로 RTL chaining을 하면 풀 수 있다.


Full Exploit Code

(https://github.com/LYoungJoo/CTF-Write-Up/blob/master/2017_CodeGate_Prequals%20Write%20Up/babypwn.py)


4. FLAG


한번 보내서는 인식이 잘 안되서 쉘스크립트로 여러번 계속 보냈더니 FLAG를 얻을 수 있었다.

FLAG : Good_Job~!Y0u_@re_Very__G@@d!!!!!!^.^



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

9447CTF 2015 serach engine Write Up  (2) 2017.02.19
Codegate 2017 prequals BabyMISC Write Up  (0) 2017.02.16
Hackcon Mini 2017 Pwnable WriteUp  (0) 2017.02.12
Plaid CTF 2014 ezhp Write Up  (0) 2017.01.29
Codegate 2014 angry_doraemon  (0) 2017.01.28