실제 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 |