본문 바로가기

CTF

DEFCON 2016 baby-re (from angr)

실제 DEFCON를 할때는 같은 팀원인 rls1004가 13차(?) 방정식을 엑셀을 이용하여서 풀었었다.


이 문제가 열리자 마자 10분 만에 푸는 팀들을 보고 어떻게 리버싱을 하길래 저렇게 빨리 풀 수 있을지가 궁금 했었고 wrtie up을 뒤지던 중 angr를 이용한 풀이를 보았다.


참고 : http://hack.carleton.team/2016/05/21/defcon-ctf-qualifier-2016-baby-re/


angr는 Shellphish 팀에서 만든 툴이다. 아직 모든 기능을 접해 보진 못했지만 symbolic excution을 가능하게 해주기 때문에 CTF에서 활용 범위가 매우 넓다.


angr 설치 : https://github.com/angr/angr

angr를 활용한 CTF 풀이 : http://docs.angr.io/docs/examples.html


이 angr라는 툴을 이용해서 bybe-re 문제를 접근 해보자.



간단히 13개의 값을 입력 받아 CheckSolution의 반환 값을 체크해서 flag를 출력 하는 방식이다. CheckSolution 함수를 통과하는 13개의 값이 어떤 값 인지만 알아내면 된다.


이 문제는 symbolic excution에 특화 된 문제이다. 왜냐하면 symbolic excution의 개념 자체가 어떤 분기로 접근 하기 위한 정확인 input을 방정식의 해를 구하는 방식으로 구해 주기 때문이다. ( 단, 시간은 조금 오래 걸린다 )


angr를 사용하면 CheckSolution 안으로 분기 하는 정확한 입력 값을 구해 낼 수 있다.


예제를 보자.



정말 짧다 ..


중요한 부분은 path_group.explore(find=0x40294b, avoid=0x402941)이 부분이다.



0x40294b로 가는대 0x402941 여기를 피해 가라는 의미이다. 즉 flag를 출력 해 주는 값을 찾으라는 부분이다. 나머지 문법은 알아서 찾아 보면 된다.



돌리면 8분만에 나온다;; 연구 해볼 가치가 충분히 많고 ctf에서 엄청난 위력을 발휘 할 거 같다.

'CTF' 카테고리의 다른 글

codegate nuclear pwn tools 사용  (0) 2016.08.21
DEFCON 2016 easy-prasky  (0) 2016.06.06
DEFCON 2016 xkcd  (0) 2016.05.26
2016 PCTF tonneree 200점  (0) 2016.04.21
2016 codegate watermellon exploit only  (0) 2016.03.15