본문 바로가기

System Hacking/CTF

DEFCON 2015 prequals - wwtw

DEFCON 2015 prequals, wwtw


FSB 문제, 라이브러리 정보 없음.



[# 2015.06.22 -> 이해하기 쉽게 헷갈리는 변수명 수정]


메모리 보호기법은 PIE까지 다 걸려있다. 아래와 같이 게임? 하는 부분으로 시작한다.

 20x20 맵 상에서 움직여서 E까지 움직이면 되는데, 스테이지를 5개 깨면 게임은 끝나고 인증부분으로 넘어간다.

게임 자체에는 공격벡터가 없다. 이 부분을 자동화해서 코딩해야 좀 더 분석이 편해졌을텐데, 게임 부분은 직접 움직이는 쪽으로 코딩해서 분석에 오래걸렸다. 나중에 자동화 코드도 짜봐야겠다.




게임이 끝나면 위와 같은 인증함수로 넘어가는데, Key값을 얻어내는건 어렵지않다. Key값은 "UeSlhCAGEp" 이다.


문제로 주어진 바이너리에는 FSB 취약점이 존재하는데, 해당 함수까지 접근하는 과정이 까다로웠다.(자동화 코드 + Tradiskey + 인증 변조)

해당 함수에 접근하기 위해서는 아래 함수 sub_E08() 이 가장 핵심적인 부분이 된다. 0x50A4에 저장되는 값은 일종의 시간 정보로 생각되는데, 아래 범위에 있어야만 FSB() 함수에 접근이 가능해진다.



0x50A4에 저장되는 값을 변조하려면 먼저 아래 함수들을 봐야한다. 

먼저 소켓을 생성해서 fd를 dword_50b0[2] 에 저장한다, 그리고 127.0.0.1 에 1234 포트로 연결한다.


그리고 dword_50b0[2]에 저장된 fd를 이용하여 4바이트 값을 받아오는데, 이걸 0x50A4에 저장하게 된다.

그리고 이 값을 통해서 인증을 하게 된다. 이 값을 통해 결과적으로 FSB()함수에 접근이 가능해지므로 이 값을 변조해야한다.


signal(14, FD로부터 읽어오는 함수())로 시그널 핸들러를 새로 세팅하고 alarm(2) 한다. 그리고 아래 선택지를 입력받는 부분인

if( read(0, dword_b0B0, 9) <= 0 ) 에서 9바이트 값을 입력받는데, 근데 fd가 저장된 위치가 dword_b050[2]이므로 여기서 dword_bo50[2]를 조작하고, 시그널 핸들러가 호출되면 0x50A4에 원하는 값을 입력할 수 있게 된다.



이제 FSB가 존재하는 함수에 접근할 수 있는데, 스택상에 s가 존재하므로 더블 스테이지 없이 값을 바로 변조할 수 있다.

EIP를 컨트롤하는건 어렵지 않는데, 라이브러리 정보가 주어지지 않아 라이브러리 함수간의 오프셋을 알 방법이 없었다.




평소에 문제 풀 때, 라이브러리 정보가 주어지지 않는 경우를 생각해보지 못해서 삽질만 엄청 했다.

라이브러리 함수간의 오프셋을 구하기 위해 여러가지 삽질을 했는데, 결과적으로 사용한 방법은 아래 익스플로잇과 같다.

먼저 SFP에 저장된 ebp 값을 fake-ebp를 사용하여 Stack-pivoting 했다. fake-ebp는 GOT 테이블의 주소 + 0x40c위치로 지정했다.

그리고 print(s) 가 호출되는 시점으로 RET를 변조하여 s = ebp - 0x40c 이므로 결과적으로 GOT 테이블의 값들을 출력하게 된다.

그리고 읽어낸 함수들의 오프셋을 이용하여 라이브러리 정보를 알아냈고, system함수 까지의 오프셋을 추가로 계산했다.





익스플로잇은 간단하게 system("/bin/sh").



익스플로잇은 리눅스에서만 사용 가능



wwtw_c3722e23150e1d5abbc1c248d99d718d


[exploit.py & leak.py]

wwtw.tar.gz

[변수명 등 편의상 약간 수정한 익스플로잇(2015.06.22)]

wwtw2.tar.gz



'System Hacking > CTF' 카테고리의 다른 글

CodeGate 2010 - yboy ( xbox pwned )  (0) 2015.08.21
CodeGate 2015 Quals - Mashed Potato  (0) 2015.06.24
Plaid_CTF 2014 - ezhp  (0) 2015.05.15
CodeGate 2015 Quals - Sokoban  (1) 2015.05.15
Codegate 2015 - Bookstore  (2) 2015.03.21