본문 바로가기

CTF

DEFCON 2016 xkcd

Challenge Description:

 

리버싱 + 포너블

 

Material:

 

 

Solution:

 

2016 DEFCON에서 가장 많이 푼 문제였다. 적당한 리버싱과 적당한 메모리 릭을 하면 풀 수 있는 문제.



strtok로 자르면서 형식에 맞는지 검사한다. 하나하나 일일이 해보면서 맞춰보면 아래와 같은 형식이 된다. “”안에 들어 있는 문자를 (* LETTERS)에서 *개만큼 출력시켜 주는 형식이다. 소스를 보면 알겠지만 “”안에 들어 있는 문자 보다 많은 *개를 입력해 주면 프로그램을 종료 시켜 버린다.

 

SERVER, ARE YOU STILL THERE? IF SO, REPLY "aaaaaa" (6 LETTERS)

 

         

         


소스를 분석해 보면 “globals”에 내가 입력 한 값이 들어가고 “unk_6b7540”에 플래그가 저장 되어 있다. 따라서 “globals”를 출력 할 때 “unk_6b7540”에 있는 플래그를 릭 시켜서 푸는 문제이다.

 

 “unk_6b7540”“globals”offset0x200이기 때문에 우리는 0x200개만큼 입력을 주고 LETTERS에 값을 적당히 늘려주면 된다. (플래그의 길이를 모르기 때문에 한 글자씩 늘려 나가야 한다.)

 

앞에서는 “”에 있는 문자의 개수 보다 많은 LETTERS를 입력하면 프로그램을 종료 시켜 버리지만 “”안에 있는 문자를 strlen으로 체크 하기 때문에 “”안에 있는 문자가 512개인 경우 flag와 연결되어 strlen의 반환값이 512+len(flag)가 되어서 위와 같이 입력해도 프로그램이 종료되지 않는다.


Conclusion:

서버가 닫히기 전에 스크린 샷을 찍지 못했다-_-

 

'CTF' 카테고리의 다른 글

DEFCON 2016 easy-prasky  (0) 2016.06.06
DEFCON 2016 baby-re (from angr)  (0) 2016.05.31
2016 PCTF tonneree 200점  (0) 2016.04.21
2016 codegate watermellon exploit only  (0) 2016.03.15
2016 codegate JS_IS_NOT_A_JAIL exploit only  (0) 2016.03.15