반응형
반응형
반응형

2021-11-24 01:16 작성 2021-11-28 19:42 공개


아주대 사이버보안학과의 날을 맞아 11월 27일 토요일 12:00 부터 23:59까지 12시간동안 후이즈 & 해머 CTF가 개최되었다.

난 포렌식 5문제와 미스크 한 문제를 출제 및 대회 운영 및 관리를 담당하였다.

 

문제를 제작할 때 항상 참신하고 재밌는 문제를 만들려고는 하는데 쉽지가 않다. 요즘 학교 과제하느라 CTF도 열심히 안하고 포렌식 공부도 거의 안해서 머리 속에 새로운 지식이 없다. 정체된 상황에 올해 대회 문제출제를 두 번 하면서 아이디어가 거의 바닥나 버렸다. 여기서 문제를 더 뽑아내려고 하다보니 문제 퀄리티가 개인적으로 아쉽다.

앞으로도 문제 출제하려면 공부해야겠다..

 

 


Official Write up

원래 출제자 롸업 안썼는데 이번 대회에서는 문제풀이 세미나가 없어서 작성하게 됐다.

문제만들면서 플래그 값 설정하는 것도 하나의 재미라고 느끼는데, 이번에는 그냥 문제명이랑 소금 섞어서 md5 해시값을 플래그 값으로 설정했다. 밀린 과제하면서 문제 만들려다보니 시간을 조금이라도 줄이려..

문제 난이도는 사보 학생들만 참여하고 대회 시간이 12시간으로 짧은 것을 고려하여 전체적으로 쉽지만 다양하게 (스테가노, 멀티미디어, 네트워크, 메모리, 디스크) 출제했다.

 

Forensic

사보의 기묘한 모험 - 436 points, 7 solvers

 

Whois&HaMer.png 이미지 파일 하나가 주어진다.

HxD

해당 파일을 헥스 에디터로 열어서 보면, PNG 푸터 시그니쳐 뒤에 데이터가 존재함을 알 수 있다.

 

binwalk 명령어를 사용하면 PNG + ZIP + PNG 구조로 이루어진 것을 확인할 수 있다.

가운데 ZIP 파일 영역을 따로 추출(헥스에디터로 직접 뽑아내기, Winhex 기능 사용하기,foremost 사용하기, 다양하다)해서 압축을 풀면 flag.7z 파일이 있으며

flag.7z 파일의 압축을 풀면 flag.txt를 얻을 수 있다.

 

 

flag.txt의 내용을 base64 디코딩하면 플래그를 획득할 수 있다.

 

ASCTF{5B75794CE6A122D57EDAABFE80CD09F1}

 

 

 


그날 본 사진의 크기를 우리는 아직 모른다. - 484 points, 4 solvers

 

i_found.png 이미지 파일 하나가 주어진다. 이미지 뷰어로 열어보면 아무것도 보이지 않는다.

왜냐하면 사진 크기가 1 * 1로 설정되어 있기 때문이다.

그런데 사진 크기가 1 * 1 가 정상일리 없다.

tweakpng.exe로 열어보면 IHDR 청크의 CRC값이 올바르지 않다고 한다.

따라서 사진의 크기 값이 강제로 수정되었으며, 올바른 크기값을 찾아야한다는 것을 알 수 있다.

 

IHDR 청크의 구조는 아래와 같다.

https://ryanking13.github.io/2018/03/24/png-structure.html

데이터 무결성을 검증하기 위한 CRC 값이 포함되어 있는데, 주어진 파일의 CRC 값이 정상이라고 가정할 경우 이 CRC 값을 사용해서 brute force로 원본 크기 값을 찾아낼 수 있다.

 

주어진 파일의 IHDR CRC 값은 0x770f8fb2 이다.

 

width 값과 height 값을 0부터 2999까지 브포하는 파이썬 코드 쓱 짜서 돌려주면

 

금방 나온다.

 

나온 값으로 수정해주면

 

플래그를 획득할 수 있다.

 

ASCTF{9B7ECCDFD7DE68131D92660B786B9725}

 

 

 


포렌식 문제에 페이크 플래그밖에 없는 뉴비포렌서로 환생해버렸다 - 472 points, 5 solvers

 

ASCTF.pcap 파일 하나가 주어진다.

 

Wireshark로 열어보면 802.11 패킷들을 확인할 수 있다.

 

패킷을 살펴보면 누군가에 의한 대량의 Deauthentication 패킷이 발생하였고 이후 HonHaiPr_05:b6:c7의 EAPOL 패킷이 캡쳐된 것을 확인할 수 있다. EAPOL 패킷이 캡쳐되었으므로 이후 데이터 패킷들을 복호화할 수 있다.

 

aircrack-ng와 rockyou.txt로 사전 공격을 해주면 패스워드 12356789를 얻을 수 있다.

다시 wireshark로 돌아와서 Edit > Preferences > Protocols > IEEE 802.11

이렇게 키를 추가해주면 된다.

 

복호화된 패킷들에서 http 필털르 걸어주면

flag.zip파일을 다운받은 것을 확인할 수 있는데, flag.zip 파일에서 플래그를 찾을 수 있다.

ASCTF{6746EAC315DADFED3A6CF3F4F8BBE5E2}

 


메모리 덤프입니디만, 문제라도? - 500 points, 1 solvers

 

리눅스 메모리 덤프 문제 처음 만들어보는데 만들 때 삽질 많이 했던 문제다. 어떤 삽질들을 했는지는 스터디에 오시면 들으실 수 있..

리눅스 메모리 포렌식 특성상 문제 풀이보다 환경 구성이 더 오래걸리는 문제다.

 

먼저 mem.lime이 주어진다.

보통 메모리 덤프파일이 주어지면, 프로필을 확인하기 위해 volatility의 imageinfo 플러그인을 사용하려고 하겠지만

절대 나오지 않는다.

 

프로필을 알아내려면 strings와 grep 명령어를 사용해서 알아내야 한다.

우분투 18.04에 커널은 linux version 5.4.0-42-generic임을 알 수 있다.

리눅스는 리눅스 종류에 커널 종류까지 너무 많아서 볼라티리티에서 프로필을 기본적으로 제공하지 않는다. (https://github.com/volatilityfoundation/profiles 극히 일부만 제공한다.)

따라서 직접 동일 버전의 VM을 구축하여 프로필을 생성해야 한다.

http://old-releases.ubuntu.com/releases/18.04.1/

 

Index of /releases/18.04.1

Select an image Ubuntu is distributed on two types of images described below. Desktop image The desktop image allows you to try Ubuntu without changing your computer at all, and at your option to install it permanently later. This type of image is what mos

old-releases.ubuntu.com

우분투 18.04.1로 가상환경을 구축하고

커널 버전을 맞춰준 뒤에

https://github.com/volatilityfoundation/volatility/wiki/Linux 을 참고하여 프로필을 생성하면 된다.

$ apt-get install dwarfdump

$ apt-get install build-essential

$ cd volatility/tools/linux

$ make

$ head module.dwarf (module.dwarf 파일이 생성되었는지 확인)

 

$ sudo zip volatility/volatility/plugins/overlays/linux/Ubuntu1204.zip volatility/tools/linux/module.dwarf /boot/System.map-5.4.0-24-generic

 

vol.py --info에서 프로필에서 확인 가능하면 성공

분석할 준비가 끝났다.

 

linux_bash

linux_bash 플러그인을 사용해보면 터미널에 입력한 내용을 확인할 수 있는데,

asctf라는 파일을 실행한 것을 확인할 수 있으며

 

linux_pslist

pslist로도 pid 2743에서 확인할 수 있다.

 

asctf 파일을 추출하는 방법은 여기서는 두가지가 있는데, linux_dump_map을 사용하는 것과 linux_find_file을 사용하는 것이다.

 

linux_dump_map을 사용하기 위해서 먼저 linux_proc_maps를 통해 start 주소값을 얻어서

linux_dump_map으로 추출할 수 있다.

 

linux_find_file 을 사용하기 위해서는 정확한 파일 경로를 알아야 한다. 윈도우의 filescan이 있었으면 좋겠지만..

 

다시 linux_bash화면으로 돌아가보면, 앞에 cd .. cd home cd mandu를 통해 현재 디렉토리 위치가 /home/mandu/ 임을 확인할 수 있다.

따라서 asctf라는 파일은 /home/mandu/asctf 에 위치함을 알 수 있다.

Inode 값을 획득할 수 있고 이 값을 사용해서 다시 linux_find_file을 사용하면 파일을 추출할 수 있다,

 

이렇게 추출한 asctf파일을 실행해주면 base64 문자열을 획득할 수 있으며 실행결과에 나와있듯이 base64 디코딩 2번 시도해주면 플래그를 얻을 수 있다.

ASCTF{5818F673E8A6EA7BE5524722407090D5_2743}

 

 

헥스에디터로 열어서 ASCTF 검색하면 바로 찾을 수 있다.

('ASCTF{' 랑 flag 검색하는거는 막았지만 ASCTF는 못 막았다..)

문제 다시 만들기엔 시간이 없어서 pid값을 플래그에 추가해서 인증하는 것으로 수정했다.

(플래그를 출력하는 프로세스의 pid를 찾으라는 내용이 문제 풀이 방향에 힌트를 주는 것 같지만.. 언인텐으로 간단히 풀리는 것 보단 낫다.)

 

[대회 종료 후]
예상대로 출력하는 플래그는 많이들  찾으셨지만 pid값은 제대로 찾지 못하셨다.

그런데 문제가 대회 종료 30분 전까지 안풀렸고, 볼라티리티로 잘 안된다는 문의까지 들어와서 
파일 잘 못 올라갔나 하고 식은땀 줄줄 흘리며 체크섬 확인했다. (문제 만들때 삽질을 많이해서 다른 버전의 파일이 올라갔을 가능성이 1%정도 있었다.) 다행히 파일은 풀리는걸로 제대로 올라갔었다. 

아주사보는 후이즈 선배의 꿈을 꾸지 않는다. - 484 points, 4 solvers

 

ad1 파일이 주어지고, 중요 문서 파일이 암호화되었으니 복호화하라는 문제다.

ad1파일은 autopsy같은 프로그램으로 분석해도 되겠지만 나에게 익숙한 ftk imager로 풀이를 작성한다.

바탕화면을 보면 바로 암호화 '당한 것'으로 보이는 .enc 파일을 찾을 수 있다.

반응형

다운로드 폴더에서는 dream.zip파일을 찾을 수 있으며 그 안에는 아주 수상해보이는 ps1파일, bat 파일을 찾을 수 있다.

(롸업 쓰면서 든 생각인데, zip 파일에 암호 걸어서 패스워드를 웹상의 파일 다운로드 경로에 같이 둬서 크롬 방문 기록을 반드시 확인하게 할 걸 그랬다.)

readme.txt

readme에서는 dream_installer.bat를 실행하라고 한다.

 

dream_installer.bat

dream_installer.bat 은 파워쉘로 dream.ps1을 실행한다.

 

dream.ps1

dream.ps1은 http://35.212.225.5/asctf/hello.pyc 를 임시폴더에 다운받아와 실행한다.

 

임시폴더에서 hello.pyc를 찾을 수 있다.

hello.pyc는 uncompyle6로 디컴파일 할 수 있다.

 

간단하다. 단순 xor이다.

important.enc = important.hwp xor key 이므로 바탕화면에서 찾았던 important.enc를 important.hwp로 이름을 바꾼뒤에 hello.pyc를 실행하면 복호화된 important.enc를 얻을 수 있으며 다시 이름을 .hwp로 바꿔서 열어주면 플래그를 획득할 수 있다.

 

ASCTF{E95312D231A4784B78E631FD91468DBB}


Misc & Crypto

사보 스파이 - 493 points, 3 solvers

 

에니그마랑 난수방송 합친 문제

 

책상 1 폴더에서 에니그마 모델명을 확인할 수 있으며 '글자가 적혀있는 종이.pdf'에서 암호문을 얻을 수 있다.

나머지 3개 파일은 의미 없는 파일이다. 패스.

EVZVKSVSLRNARMMAWNUKQTBZQLJRVVSJXEGGVAKEDDBVIWNIIALLZVWGKHDZJCJFJ
VNSZOOSZGZWGFMOQLJSPWARZREXFCJUIOMNZUQWOSEVZQQWSGZOYOZCXMFCOPL
XVJQWCEGRGIMDCCEJNIPPMADJIMDYSYZVNRYRRZHHGYVZHMHAPEHGGMNAQMYUQN
QCTJYJHESOYNJPUONUURFCCWYITLWGCXMPACWHZZWLKWAIYLDMJBHPSGRNTZXUI
WMYXVRIMPRXMQOGRWYWHHENBXQYWUNQTENFLUDLFEMEKVKCNHFWXXPHNYHJV
VBZBOABVPWPGCKOHPGMULSWZOFXFMVPGSPQAAMJBDNESNWLXZEDRVPFMFGYZAM
QJTHZXGUPSWCXCXJTSAIYFLQPQFXBWHIXOLCFFSHHFAXQKOFWAJYBLDAWIDXXSWF
YIXFPEZJTYGWGZRONJYBXDOZILNJBPSIXZIKMLIJJPCRUZYVNGFOSJGDPNVXBMTBMTPN
OCHOURVHNATIFIBCCFITHPWNOAFAPRCCHZWUBBAQRCVZXQLAOLMDTFMUIQZQLVX
FMMYWAJHMZTFXMPFEDJPJJFHODUZJVLARKQJNKAACXUGQKJBLLIGPHDHKDPTSFJXHG
MOLKNWGSQXTPQEJCROINZZLHYPTQATODLRCEXAMCTRQPOGAMRYEZAASWWTXBAT
VVLTGOAUEBQTOQGFDWTPIYGEVZMXUUYTBTGSAZEIWPXYVOOZWMHLJOCBPFAFOPZ
KGTFSDJTZBNSEIEJBCFHNWMHFOLTIPIWJBDWSFFNPCJQPYQHEMNNDAJAFXDVABJNAZ
TRUABHXKCAKVPDWYDTKSMVSBQQPBIDSJXEZVPPXRTCGJHBWVGWYZYCDSZBYPARV
UKLNYXAKXJDWVRAYBFPHOGHMJUABKPUONDKITAZEGHTHXMZPALYIWLHONLUOMQ
QIBWVKYJBKXHGGCLRUYTJGQAMXEIJJPVVKOARQZHXCRJQYYAAXMSOMQEZKXVOJUSH
UFMTWCHAFZUDZJQGUKLRWHGWOEDYGQFHCAIKSSEZZAJDHIUBXEOZKVOCHLZVRCZ
CDHPIFNNBIMVITTMCQOYUCUPBEMVOLFIBUHAAULTILYLRSGHBLLQTBICBOPXHKYFY
AGRXCRFAEICVLVQWVRGYEJNRKVUUQEQUBBAUSFFIXGQBIAEBWOILJXKKKMYDHKDKH
LLANHSUWFPYHSFZRRDWPSUBOIQVXPFLREWRTBVJZQEBOEJZMAMFVSWNKFEOTGTH
MLWZBUWDIYSCMKAIQDXGVJYUUPZDIXVECZJXGOQCHGKFQWOXSOHWWZBDHIVAIFPG
BJIYKPMBDSQOJJIKXLYWBURLFLRLBFPGBXZMDSFALOEVMIRSWAPJKODZDMUJGNVNWV
VTWAGLDNWIXPMBOXGQGIMBVHERICXTWTXWJYZZMQGAPZQLLHXPPIKVNAGPHXAUT
CPSGQNWPVKVJTHZCXOUOBOSDPNEYTOOTWWQKJGUPFPMMGLHHNZWJIEDNUICSYYA
KVHDLCVKZLEUCBMKAFRKJTEJARZQXNGTDJZBSXWKQXHDASUUEZDJZELOFWOTAJTJV
GXCMSONEBZQFHZLJUDDUKBAKRPWXMUUOUDFOYHMMWWWRFQFLKCAEXMDFGORB
TZIBUEJAVQJWXRFXCIMYIMKMNCNUTFSQZDFPYNMGUAJNJMTRXBSNPNHQUSYFMOYB
BWRKXZKSSIXCRZSXLCGCKGQAAIWGWYALFIKTKHRPBIZWEMMAUFIWIVIGMPDUKALG
YWIXY

책상2 폴더에는 5개의 이미지 파일이 있는데 빨간색으로 모자이크된 부분들이 존재한다.

학과 사이트 또는 구글 검색 관련 이미지에서 원본 내용 또는 이미지를 찾아서 가려진 부분을 순서대로 가져오면

2 1 5 => II, I, V

B

CSM

EBS

A-B, C-D 이다.

 

https://www.dcode.fr/enigma-machine-cipher

해당 정보들을 가지고 에니그마 복호화를 하면 된다.

참고로 복호화된 내용은 http://security.ajou.ac.kr/security/intro/intro01.jsp 의 파파고 영어 번역본이다.

 

라디오 방송 폴더에는 mp3 파일이 존재하는데, 들어보면 여러 정수값들을 불러준다.

해당 값 번째에 해당되는 평문의 알파벳들을 뽑아내면 된다. text[불러주는값]

그러면 RETURNTOTHEDEPARTMENTOFSOFTWARE 가 된다.

따라서 플래그는 ASCTF{RETURNTOTHEDEPARTMENTOFSOFTWARE} 이다.

 

반응형

'CTF Write Up' 카테고리의 다른 글

UTCTF 2022 Write up  (0) 2022.03.13
Codegate 2021 Quals Write Up  (0) 2022.02.28
Killer Queen CTF 2021 write up  (0) 2021.10.31
Digital Overdose 2021 Autumn CTF 2021 Write up  (0) 2021.10.09
DownUnderCTF 2021  (0) 2021.09.25

+ Recent posts