Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

binee::

[Boston key party 2015] simple Calc write up 본문

CTF

[Boston key party 2015] simple Calc write up

binee108 2016. 3. 7. 23:05

boston key party 문제 중에서 가장 쉬웠던 문제로 생각한다.

그래서 가장 많은 사람이 풀었다.

소스코드를 보자마자 취약점을 찾을 수 있었고

해당 취약점을 exploit하는 아이디어 또한 간단했다.


그래서 2시간만에 exlpoit 만들고 인증하려고 했지만

중간에 server에서 time을 걸고 일정 시간이 지나면 세션을 끊어버리는 것을 모르고 있어서

local에서 잘되는데 remote로 안되는 이유를 알 수 없어서 뻘짓을 많이 했다.

그래서 네트워크 문제로 생각하고 sleep도 걸어서 하는 과정에서

서버에서 일정시간 동안만 세션을 유지하고 timeout이 나면 세션을 끊는 것을 알 수 있었다.






분석


해당 binary 파일은 64bit elf 파일이고

NX-bit만 걸려 있는 것으로 보아 RTL이나 ROP를 통해서 문제를 해결 하면 될 것 같다.

또한 statically linked로 되어있어서 ROP 가젯을 찾기 좀더  유용 할 것으로 보인다.


실행 화면을 확인하면 4칙연산 기능을 하는 프로그램인 것을 확인 할 수 있다.

연산 횟수를 저장하고 5번 기능을 통해서 연산의 결과를 저장하는 간단한 프로그램이다.


몇가지 입력에 대한 조건이 걸려 있었다.

Expected number of calculations 의 입력 값은 4 이상, 255 이하이고 

연산에 사용하는 X 와 Y의 값은 40이상 만 입력을 받는다.

조건이 맞지 많을 경우 프로그램을 종료한다.


그렇다면 해당 프로그램의 취약점은 어디서 발생하는지 IDA를 확인해보면

memcpy(&v5, v8, 4 * v7) 에서 발생한다.


Expected number of calculations에서 입력 받은 값(v5) * 4 만큼의 사이즈를

v5(ebp-0x40) 의 위치에 저장한다.

스택의 구조를 살펴보면 [buffer 64][sfp 8] [ret 8]의 구조를 가지므로

72(buffer+sfp)만큼 dummy 값으로 덮고 8바이트를 원하는 address주소로 변조하면 Buffer overflow 취약점이 발생한다.

단, NX-bit가 걸려 있으므로, RTL과 ROP를 둘중 하나를 선택해야되는데, 

statically linked 로 되어 있어서 RTL를 사용 할 수 있는 상황이 아니다.






Exploit


ROP를 통해서 exploit을 해야되는데, mprotect 함수 또한 사용 할 수 없으므로,

syscall로 exploit 하기로 했다.

gadget은 ROPgadget을 이용하여 ROPchain을 쉽게 구할 수 있었다.




그렇다면 구한 payload를 넣기 위해서는 어떻게 해야할지 봐야하는데,

malloc으로 할당 받은 Heap 영역에

adds, subs, muls, divs 함수의 결과값을 저장한다.

연산 결과를 구해놓은 gadget을 넣어주면 간단히 해결 할 수 있다.

하지만 연산과정에서 X, Y의 값이 40이상이라는 조건이 있으므로, 

gadget + 0을 넣을 수 없으므로, 

(gadget+100) - 100 이런식으로 본래 가젯의 값의 100을 더하고

subs 함수에서 100을 빼는 방법으로 payload를 저장했다.














'CTF' 카테고리의 다른 글

[sCTF 2016] pwn2 write up  (0) 2016.04.19
[sCTF 2016] pwn1 write up  (0) 2016.04.19
[Codegate 2016] oldschool write up  (2) 2016.04.19
[Codegate 2016] manager write up  (0) 2016.04.02
[Codegate 2016] watermelon write up  (1) 2016.03.27