전체 글 208

codegate 2013 - forensic 300 (docx 분석)

keyword : docx 분석 url : http://forensicinsight.org/wp-content/uploads/2013/03/F-INSIGHT-CodeGate-2013-Write-ups.pdf docx계열의 문제는 시그니쳐가 zip과 같아 압축을 풀어 대충 찾아보았는데 wirte up을 보니 docx 파일이 문제로 주어질 경우 ooXML 포맷의 특징을 이용한 Data Hidden 문제일 가능성이 크다고 한다. docx파일을 그래도 열면 다음과 같이 나온다. 사진들이 여러개 나열되어 있을 뿐이다. 압축을 풀고, 폴더들을 훑어 보았을 때, 의심가는 파일은 embeddings\oleObject1.bin파일이었다. docx에 대한 분석을 해본적이 없어 분간이 가지 않았으나, 파일의 마지막 부분에 ..

CTF | wargame 2017.03.29

codegate 2013 - forensic 500 (R-Studio 카빙, Logical File Hash)

keyword : R-Studio 카빙, Logical File Hash url : http://forensicinsight.org/wp-content/uploads/2013/03/F-INSIGHT-CodeGate-2013-Write-ups.pdf 이 문제는 출제 당시에 논란이 있었던 문제이다. 500점인데 비해, R-Studio로 카빙을 하면 답을 바로 얻을 수 있는 문제이기 때문이다. [ FTK Imager ] 위 사진은 FTK Imager로 열었을 때의 모습이다. 6번째 Recovered Partitiond 있는데 Root 하위를 보면 특별한 파일이 생성된 것을 볼 수 없다. folder3하위에 사진 한장이 지워져 있긴 하나 특별한 사진은 아니다. [ R-Studio ] 위 사진은 R-Studio를..

CTF | wargame 2017.03.29

codegate 2011 - forensic 100 (카빙, foremost)

keyword : 카빙, foremost url : 지문에는 아무런 단서가 없고 unkown이라는 파일이 하나 주어진다. 시작 시그니쳐를 보면 MZ로 실행파일임을 알 수 있지만, 실행파일 문제가 포렌식으로 나올리 없고, 데이터의 크기로 보아 다른 데이터가 숨어 있을 것이라고 판단이 되었다. 해서 카빙을 했는데, R-Studio도, winhex도 만족스러운 결과물을 도출하지는 못하였다. 그래서 검색을 하던 도중 linux계열에서 사용되는 foremost를 사용해 보기로 하였다. [ foremost carving ] [ resut file list ] 카빙을 하면 위처럼 다양한 카테고리 별로 파일이 추출된다. 여기서 zip의 00008888.zip파일을 보아야 한다. 압축을 풀면 다음과 같은 목록이 생성된다..

CTF | wargame 2017.03.29

volgactf 2017 / nested (USB 패킷 분석, 복구, jpg, gz 스테가노그래피 - outguess, gzsteg)

write up : https://github.com/yogamaya/VolgaCTF_Quals_2017/blob/master/Nested/readme.md 문제는 패킷 파일 하나가 주어진다. 대강 형태는 다음과 같다. [ 문제 패킷 일부 ] USB를 통해서 데이터가 오감을 볼 수 있다. 보면 USBMS 프로토콜을 이용해서 큰 데이터가 오가는 것을 볼 수 있는데, 이 데이터들을 복구 시켜야 한다. 데이터 전송 이전에는 LBA 주소가 전송되는데 이 주소에 맞게 복구를 해야한다. wireshark에서는 패킷의 데이터들을 복구하기가 힘들기때문에 tshark를 이용하였다. tshark -T fields -e data -r dump.pcap -w output.raw "(usbms && (usb.dst == hos..

CTF | wargame 2017.03.29

insomnihack 2017 - The Great Escape part 1 - Forensics (와이어샤크 ssl 키 적용 분석)

keyword : 와이어샤크 ssl 키 적용 분석 문제는 와이어샤크 파일 하나가 주어진다. 다른 50점 문제의 난이도를 보면 꽤나 간단한 문제이다. 대충 흐름을 보면, TLS통신으로 데이터를 송수신한다. 물론 암호화 되어 있어 볼 수 없다. 뒷부분에는 SMTP를 통해 메일 전송을 한다. 중간 부분을 보면 FTP통신도 있다. 패킷량은 적기 때문에 전체 흐름 분석의 난이도는 없는 문제이다. ftp패킷을 보면 private key가 전송되는 것을 볼 수 있다. 이 private key를 추출해서 tls통신의 암호화 해제에 사용해야 한다. 단, tls통신이 하나의 ip주소에 대해서 하는것이 아니기 때문에, 대상 ip주소를정확히 해야 한다. 여기서 약간 문제가 있었는데 먼저 3번 tcp 스트림을 보면 아래와 같다..

CTF | wargame 2017.03.29

wargame.kr / ip log table (blind sql injection)

그냥 돌다가 wargame.kr 문제나 하나 풀어볼까 하고 들어왔다가 쉬워보여서 푼 문제. 블라인드 스크립트는 하나 짜놔야 할 것 같다. 문제 페이지는 위처럼 구성된다. 저기서 접속을 할 때마다 log가 찍히며 클릭을 하면 check.php로 idx를 파라미터로 넘기면서 시간을 반환받는다. admin login에서는 id, pw를 입력받고 로그인을 하도록 한다. 이 문제의 경우, idx를 파라미터로 넘겨, ip의 접속기록을 확인해주는 check.php에서 취약점이 발생한다. idx를 기준으로 테이블에서 조회가 될 경우, 접속기록을 반환하지만, 조회가 안되는 거짓인 데이터의 경우, 1970 ~의 시간을 반환한다. 이 것을 가지고 참, 거짓을 판별하면 된다. 먼저 테이블 명을 따야 하는데 본래 기본적인 테이..

CTF | wargame 2017.03.27

xcz.kr / Revershit! (숨겨진 메뉴 찾기)

프로그램의 흐름은 위와 같다. 메인 메뉴가 있고, 데이터를 삽입하거나 조회하거나 지우는 등의 기능을 한다. 데이터는 log.txt로 저장이 된다. key를 어디선가 찾아야 한다면 보통 메뉴가 아닌 숨겨진 메뉴에 있을 가능성이 크므로, 먼저 string 조회를 해 보았더니 key메시지가 출력되는 함수를 찾을 수 있었다. 04123E0함수의 일부이다. Key로 무언가 출력이 되는데 그 이전에 어떠한 연산을 진행한다. 04123E0 함수는 2번 옵션인 List 기능 수행시 동작이 된다. ollydbg로 동적 디버깅을 하며 위 부분을 찾아가 보았더니 각각 a1+4는 입력한 이름, a1+28은 성별, a1+29는 클래스에 해당하며, 나이는 중요하지 않다. 제일 처음 조건으로 a1+4 == 'E'가 되어야 하기 때..

CTF | wargame 2017.03.27

xcz.kr / Rendzvous (패킷 분석, 알수없는 패킷 데이터 찾기)

pcap파일 하나가 주어진다. 대강 분석을 해 보면 이런저런 사이트들을 왔다갔다거린다. 패킷량이 많지 않아 분석이 크게 어렵진 않다. 분석을 하다 보면 xcz.kr/homepage에 접속을 하고 거기서 Chat.exe라는 파일 하나를 다운로드 받는다. Chat.exe는 실행시키면 아래와 같이 구성된다. 1:1 채팅을 지원해주는 프로그램인 듯 하였다. 비밀 친구와 대화하기에는 아주 적합한듯한.. 일단 위와 같은 파일을 다운로드 받았다는 것을 확인하였으므로 채팅한 내용을 파악해야 한다. tcp stream 106을 보면 아래와 같이 구성된다. 단 한번밖에 연결하지 않는 ip주소이며 오가는 데이터 또한 위처럼 상당히 수상하다. 따라서, Chat.exe를 통해 오간 데이터라는 가정을 하였다. Chat을 리버싱 ..

CTF | wargame 2017.03.27

codegate 2016 / compress (사용자 정의 암호 분석, 암호 compress)

문제는 파이썬 소스코드가 주어진다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 import md5 def encode(input_string): print input_string h = md5.md5(input_string[:4]).hexdigest() table = { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 0 } out = ..

CTF | wargame 2017.03.16