본문으로 바로가기

XiomaraCTF 2017 Xor Tool Write Up

category 해킹/Write Up 2017. 2. 27. 21:22

0. Introduce

format string문제에 조금 공포증이 있어서 아마 처음에 FSB문제였다는걸 알았으면 최대한 나중에 건드렸을꺼 같은 문제입니다. 하지만 생각보다 바이너리가 작고 FSB버그에만 집중해서 문제를 풀 수 있어서 재미있었습니다. 이제 FSB문제에 자신감이 조금 붙은것 같습니다. 그리고 이문제를 풀면서 느낀건데 완전 계산만 하는 fsb문제같은 경우에는 계산대로 되서 문제가 풀렸을때 기분이 정말 좋았습니다~


1. Binary

Canary가 걸려있고 Nx가 활성화 되어있다.


[1] Encrypt : Enter your message to encrypt를 입력후 Your encrypted msg 가나옴. (2와 msg xor)

[2] Decrypt : Enter your key to decrypt를 입력후 Enter your message to decrypt를 입력하면 Your encrypted msg가 나옴 (key와 msg xor)

[3] Exit : exit(0)


2. Vulnerability

- [1] Encrypt에서 buf크기는 50이지만 79개를 입력받아 생기는 버퍼오버플로우

- [2] Decrypt에서 buf크기는 50이지만 54개를 입력받아 생기는 버퍼오버플로우

- [3] Decrypt에서 key와 xor한 결과를 printf(s);처럼 출력을해서 발생하는 포맷스트링버그


처음에 생각했을때는 카나리 leak을 해서 버퍼오버플로우를 할까 했는데 문제는 이전 문제와 같이 \n을 0으로 바꾸는구문이 있었다.

그래서 그냥 버퍼오버플로우로 공격하려하면 카나리때문에 안되고 버퍼오버플로우로 canary leak을 해보려해도 위에 구문때문에 실패한다. 그래서 포맷스트링으로 카나리 leak을 해도 \n이 존재하지 않는데 0 을 대입하려해서 프로그램이 종료된다. 그렇기때문에 그냥 Decrypt에서 포맷스트링으로 문제를 풀어야한다.


3. Exploit

익스는 생각보다 간단하다.

1) system_add & bin/sh_add leak

2) ret leak

3) ret + 8 = /bin/sh

4) ret = system_add

페이로드를 최대 54바이트밖에 못짜기때문에 전부 따로따로해야한다. 3번과 4번순서가 중요하다. 그다음부터 익스는 계산이다.

(대회때 어떻게 문제를 풀었는지 기억은 안날만큼 정신없이 풀다보니까 풀렸다..)

(https://github.com/LYoungJoo/CTF-Write-Up/blob/master/2017_XiomaraCTFpwn%20Write%20Up/Xor%20Tool.py)


4. FLAG