file 명령을 통해 64bit 리눅스 환경의 바이너리임을 알 수 있다.
IDA를 통해 Import, String 등 정보를 얻기 위해 확인해보았지만 깔끔히 비어있다...
실행시키면 다음과 같이 password를 입력받는다.
임의의 password 를 입력하니 "Permission denied (password)." 문자열을 출력한다.
IDA를 통해 debugging을 하다보면, 키 값이 생성된다는 것을 알 수 있다.
맨 처음 풀 때는 노가다를 해서 메모리에 키 값을 찾아냈다. 좀 더 빨리 풀기위해 시도하다 password를 입력받는 곳에서 브레이포인트를 설정한다면 메모리에 키 값이 생성되있는 것을 확인할 수 있다.
바이너리 코드를 보면 이러한 키 값을 입력받기 위해 syscall 을 사용한 것을 알 수 있다.
그리고 strace를 이용하여 어디에서 입력받는지 알 수 있다.
해당 코드부분에 breakpoint를 걸고 실행하면 키 입력받을 때 멈출 것이다.
breakpoint 지점까지 간 후, 스택을 확인해보면 다음과 같이 키 값이 생성된 것을 알 수 있다.
KEY : H4PPY_C0DEGaTE_2014_CU_1N_K0RE4
'ctf' 카테고리의 다른 글
[CodeGate 2015 CTF] yocto (0) | 2016.07.06 |
---|---|
[CodeGate 2014 CTF] 4stone (0) | 2016.06.24 |
[Plaid 2013 CTF] pork (0) | 2016.06.03 |
[CodeGate 2014 CTF] nuclear (0) | 2016.04.19 |
[CodeGate 2013 CTF] vuln200 (0) | 2016.04.17 |