본문으로 바로가기

XiomaraCTF 2017 mint Write Up

category 해킹/Write Up 2017. 2. 27. 20:54

0. Introduce

pwn50보다는 확실히 오래걸렸던 문제였습니다. 하지만 leak을 재밌게해서 정말 신박했고 문제를 풀었을때 엄청 좋았습니다. 그런데 실제 ctf 서버에는 aslr이 걸려있지않아서 더쉽게 풀 수 있었습니다.


1. binary

CANARY가 걸려있지 않았고 NX가 켜져있었다. 문제에서 libc를 준것을 보아 간단한 버퍼오버플로우와 ROP를 예상했는데 맞았다.


1. Add text : text입력 후 추가

2. Edit text : text를 수정할 수 있음. [1] Append text [2] Overwrite 둘중 선택가능

3. Display text : text출력

4. Exit : return input


2. Vulnerability

일단 Memory Leak 취약점은 3. Display text에서 아무 text도 없을 때, 출력하면 2바이트가 짤린 임의에 libc주소를 구할 수 있다. 그리고 2. Edit text에서 [1] Append text가 strcat(&dest,src)방식으로 데이터를 넣기때문에 원래 50byte를 입력하고 추가로 50byte를 더 입력할 수 있다. 그것때문에 버퍼오버플로우 취약점이 발생한다.


libc leak을 buffer overflow로 하지못하는 이유는 전체 소스중 입력받는 모든 부분들에 위에 소스처럼 '\n'를 NULL로 변환하는 함수가 있기 때문이다. 전체 문장중에 '\n'이 없다면 0을 넣지 못해서 프로그램이 중단되고, 전체 문장중에 '\n'이 있다면 leak을 할 수가 없다. 그래서 어쩔수 없이 2바이트만 출력되더라도 3. Display text로 leak을 해야한다. 하지만 2바이트만 출력된다고 하더라도 하위 3비트는 같기때문에 8비트중 5번째 있는 값만 구하면 leak을 할 수 있었다.


3. Exploit

leak한 값으로 간단하게 system_add + AAAA + bin/sh로 Exploit하였다. 로컬에서는 5번째 비트 값을 임의로 하나 정해두고 계속 돌리면서 쉘을 획득했지만, 실제 서버에서는 값이 하나로 고정되어있었다. 그래서 손으로 5비트값을 0 ~ 16까지 돌려주었더니 그중 하나로 풀렸다.

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


4. FLAG


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

Codegate 2017 prequals messenger Write Up  (0) 2017.03.11
XiomaraCTF 2017 Xor Tool Write Up  (0) 2017.02.27
XiomaraCTF 2017 pwn50 Write Up  (0) 2017.02.27
Codegate 2017 prequals hunting Write Up  (0) 2017.02.21
9447CTF 2015 serach engine Write Up  (2) 2017.02.19