본문 바로가기

CTF

DEFCON 2016 easy-prasky

서버와, 데이터 파일이 하나 주어진다.





file 명령어로 확인 해보면 그냥 data다..




hex로 열어보면 처음에 CGC라는 문자열을 볼 수 있다. 처음에 CGC를 구글링 했는데 닌텐도 위 파일이라 길래 닌텐도 위 에뮬레이터를 설치 했지만 사실 그 문제는 아니고.. Cyber Grand Challenge의 약자이다.


https://github.com/CyberGrandChallenge



위 깃허브에 가면 CGC파일에 관련된 프로그램들이 모여있다.



https://github.com/CyberGrandChallenge/cgc2elf



먼저, cgc를 elf로 변환해 주는 프로그램으로 elf로 변환 한 다음 실행 해보면 입력을 받고 바로 종료 해 버린다.



ida로 까보자.





read를 부르는 부분을 따라가보면 read의 반환 값이 0이 아닐 경우 종료 시켜 버린다. 저기서 엄청 삽질했다 -_-


입력을 받으면 종료 시켜 버리니 공격을 할 수 없다고 판단하고 다른 문제 풀다가 다시 저 문제로 돌아왔다.


생각 해 보면 이 파일은 CGC를 ELF로 변환해 놓은 바이너리기 때문에 우리가 생각하는 ELF와 다를 수 있을 거라고 생각하고 계속 봤다.



그냥 이상한 부분 제외 하고 상식적으로 문제를 봤다.


read로 받는게 0일때 종료 된다고 생각했을때, sub_8048110 함수에서 입력 받는 size가 0x2a이기 때문에 sub_8048370에서 overflow가 발생하고, v2에 까나리를 설정 해 뒀기 때문에 저 값을 맞춰 줘야 한다고 생각했다.


그리고 return address를 덮고 나서는 shellcode를 올려서 실행 하려고 했다.


실제로 저렇게 소스를 짜서 서버에 전송 해봤다.


payload = "A" * 41 + "lddw" + "A" * 100


대충 이런식으로 까나리를 맞춰주고 넣으면 segfault가 뜨고, 플레그가 출력된다.


그러니까 이 문제는 까나리만 우회하고 segfault를 띄우면 되는 문제다. shellcode 따윈 필요없다. 아마 이 문제를 못 푼 사람들은 elf파일 ida에서 막혔을꺼라고 생각한다. 


마지막으로 defcon에서 CGC 문제가 대량으로 열렸는데 그 문제들은 이렇게 막 풀면 안된다. 정석은 'CGC 프로그램을 구동 할 수 있는 환경 구축'을 통한 취약점 탐지다.



'CTF' 카테고리의 다른 글

angry_doraemon exploit only from pwntools  (0) 2016.08.28
codegate nuclear pwn tools 사용  (0) 2016.08.21
DEFCON 2016 baby-re (from angr)  (0) 2016.05.31
DEFCON 2016 xkcd  (0) 2016.05.26
2016 PCTF tonneree 200점  (0) 2016.04.21