CTF | wargame

Sharif 2016 / forensic 150 strange pdf (pdf 분석)

nopdata 2017. 3. 30. 00:02
Keyword : pdf 분석

pdf 분석 문제이다. 원래 nurilab에서 공개한 pdfdot을 사용하려고 하였으나, 버전 문제로 인해 실행이 불가능 해서 직접 분석을 하였다.

먼저 pdf을 열어보면 다음과 같다.

가운데에 sharifctf라는 문구가 회전하며 들어가 있다.

pdf의 경우 obj link list라고 이해하면 쉽다. 따라서 하나의 obj에 암호화된 데이터가 숨어 있다거나, obj link가 끊어진 obj에 숨겨진 데이터가 있을 가능성이 크다.
이번 문제의 경우 후자이다. obj link가 끊어진 obj가 다수 있었고, 이 obj들의 link를 걸어주면 된다.

notepad++로 보면 다음과 같다.

1 0 obj는 Root obj로 최상위에 존재를 하며 여기부터 시작을 한다.
Type은 Catalog로 최상위 이며 다음으로 지정하는 것은 Pages, obj이다. Page의 묶음을 지정하는 obj이며 2 0 obj로 되어 있다.

2 0 obj를 보면 Type은 위에서 지정 하였듯이 Pages로 되어 있으며 Kids로 3 0 R을 가진다. 여기서 2 0 obj의 Type이 Pages 였으므로, Kids의 obj들은 Page가 되어야 성립이 된다.

3 0 obj를 보면 Parent가 2 0 obj로 지정되어 있으며, Contents가 5 0 obj로 지정되어 있다. 3 0 obj는 페이지를 지칭하며, 실제 내용은 5 0 obj에 존재한다는 의미이다.

5 0 obj를 보면 data가 적혀 있다. 3 0 obj에 들어갈 데이터가 stream으로 들어있다.

그런데 데이터를 더 보면


'%%%..'로 나뉘어 있고 그 뒤에  5 0 obj처럼 데이터가 들어가 있는데 이 데이터는 위에서 처럼 링크가 되어 있지 않는다.
그렇다는 것은 이 데이터를 출력하면 데이터가 나온다는 소리이다. 결과적으로 새로운 Page obj를 만들어주고, 이 데이터들을 추가 해 준다음 Pages obj에 추가 해주면 된다.
     
숨겨진 obj link 연결 된 파일

숨겨진 obj link 연결 시 나오는 화면

위와 같은 아스키 코드값의 숫자가 1장에 하나씩 나온다. 이 숫자들을 모두 모아 조합을 하면



답을 얻을 수 있다.

Answer : SharifCTF{d1242d2d0969741dde7ed79c3c409c46}