반응형
반응형
반응형

올해에는 대학부로 참여했다. 분야별 난이도 차이가 좀 큰 편이었다.

처음에 크립토 잡고 풀다가 하루 다 보내버리고 뒤늦게 웹에 합류하여 문제를 풀었다. 좀 더 빨리 웹을 잡고 풀었으면 좀 더 점수를 낼 수 있었을 텐데 아쉬웠다. 그리고 예선전은 인원 제한이 없는걸 몰랐어서 처음엔 4명 모아서 할려고 했다가 대회 시작 직전에 뒤늦게 사람 2명밖에 못 데려온 것도 좀 아쉬었다. 내년에는 소학회원들 많이 데리고 하면 좋을 거 같다.

 

코게에도 포렌식이나 네트워크 문제 나왔으면 좋겠다. 예전엔 그래도 한 두개씩 나왔던거 같은데..

 

WEB - superbee

golang으로 작성되어 있고

 

beego 라는 프레임워크를 사용하고 있다.

 

 

플래그는 app.conf에 정의되어 있고 (물론 주어진 파일에서는 REDEACTED)

 

main.go

http://[IP]/main/index 경로로 접속하면 flag를 확인할 수 있도록 되어 있지만

 

main.go

쿠키값을 비교하여 admin이 아니면 플래그를 확인할 수 없고, login 페이지로 redirect된다.

 

 

먼저 어드민 패스워드를 획득하여 어드민계정으로 로그인 하는 방법은

패스워드를 알아낼 방법이 없으므로 불가능하고

 

SSTI일까 생각해봤지만,

main.go

사용자가 입력한 값으로 render하는 곳이 없고, 애초에 beego에서는 값을 직접 때려주기 때문에 불가능하다.

 

어떻게 풀어야 될까 생각을 해보다가

main.go

/admin/authkey 페이지로 접근해서 encrypted_auth_key를 얻고

aes 복호화를 해서 평문 auth_key를 얻어서 sess 쿠키 값을 설정해서 main/index로 접근하여 flag를 얻는 루트같았다.

 

main.go

그러지 않고서야 aesencrypt함수를 넣어두고 admin페이지를 만들어둘 이유가 없다고 생각했다.

 

main.go

그런데 admin/authkey에 접근할려면 domain이 localhost가 되어야 한다.

아니 ssrf때릴 곳도 없는거 같은데 어떻게 domain명을 localhost로 만들지 고민을 하다가

Ctx.Input.Domain()이 사실 처음 보는 함수였기 때문에 정확히 어떻게 동작하는 지 알 필요가 있었다.

 

 

https://github.com/beego/beego/blob/develop/server/web/context/input.go

코드를 살펴보니 request의 host가 공백이면 localhost를 return해주고 있었다. (.....이게 맞나?)

 

 

그래서 burp suite로 리퀘 잡아서 Host 부분을 공백으로 바꿔주었더니

 

00fb3dcf5ecaad607aeb0c91e9b194d9f9f9e263cebd55cdf1ec2a327d033be657c2582de2ef1ba6d77fd22784011607

encrypted_auth_key값을 얻을 수 있었다.

 

해당 값을 복호화하기 위해서는 key값에 사용되는 auth_crypt_key값을 알아야하는데

 

main.go

키값이 공백일 수는 없는데.. 라고 생각을 하다가 

 

Padding 함수를 보면

main.go

Padding(key, 16)ciphertext가 [] 이더라도

16 - 0 % 16 = 16

16을 16번 반복 => [16] * 16 이 된다

즉 auth_crypt_key값이 공백이어도 된다.

 

main.go

aes cbc이고, iv와 key값이 동일하다

 

​복호화하여 auth_key를 구할 수 있다.

 

Md5("sess") = f5b338d6bca36d47ee04d93d08c57861

Md5(admin_id + auth_key) = Md5("admin" + "Th15_sup3r_s3cr3t_K3y_N3v3r_B3_L34k3d") = e52f118374179d24fa20ebcceb95c2af

 

 

Cookie: f5b338d6bca36d47ee04d93d08c57861=e52f118374179d24fa20ebcceb95c2af

이렇게 쿠키를 설정해주고, /main/index로 접근하면 flag를 확인할 수 있다.


WEB - babyfirst

로그인하고, 메모 작성하고, 메모를 읽는 간단한 서비스이다.

 

flag는 /flag에 있다.

 

memoServiet.class를 디컴파일해서 살펴봐야한다.

메모를 읽어오는 getMemo 함수를 보면 db에서 가져온 memo데이터를 가지고 lookupImg 함수를 돌리는데

 

lookupImg함수는 memo 내용에서 [URL] 패턴을 찾아서 해당 url 데이터가져와서 base64로 인코딩해서 <img>에 담아준다.

[file:///flag]가 되면 좋겠지만 file로 시작하는 건 필터링해버린다.


종료 30분 남은 시점에셔 여기서 막혀서 못 풀었다.

[url:file:///flag] 로 하면 된다.

https://github.com/openjdk/jdk11/blob/master/src/java.base/share/classes/java/net/URL.java#L575

 

GitHub - openjdk/jdk11: Read-only mirror of https://hg.openjdk.java.net/jdk/jdk11/

Read-only mirror of https://hg.openjdk.java.net/jdk/jdk11/ - GitHub - openjdk/jdk11: Read-only mirror of https://hg.openjdk.java.net/jdk/jdk11/

github.com

ㅠㅠ 아쉽


CRYPTO - dark-arts

 

챌린지 1,2,3,4를 모두 통과해야 플래그를 얻을 수 있다.

 

 

CHAL1은 GUESS_MODE()를 64번 통과해야 한다.

 

 

GENERATOR1에서 랜덤으로 func_gen 과 func_random 둘 중 하나로 고정되서 리턴한다.

gess_mode에서 x에 값을 직접 넣어서 그 결과를 알 수 있고, 그 값들을 가지고  mode가 0일지 1일지 (func_gen을 통과한 결과인지 func_random을 통괗나 결과인지)를 맞춰야 한다.

func_gen과 func_random 둘다 결과는 무조건 0 또는 1이 나온다.

 

func_gen은 랜덤 seed와 x의 각 bit를 내적한 값으로 66행의 식을 계산한 값이 결과가 된다.

x가 0 [0]이라면 prod가 0이 되고 66행의 계산 결과는 0이 된다.

x가 1 [1]이라면 prod는 1 또는 0이 되고, 1이라면 66행의 결과는 (1 % 2 + 1 % 3 ) %2 = 0

x가 2 [0,1]이라면 prod는 1 또는 0이 되고, 결과는 0

x가 3 [1,1]이라면 prod는 2 또는 1 또는 0이 되고 2라면 (2 % 2 + 2 % 3 ) % 2 = 0

x가 4, 5, 6, 8, 9, 10, 11 일 때에도 (bit 중 1인 bit의 개수가 3개 미만인 수들) 모두 결과는 0이 된다.

x가 7 [1,1,1] 이라면 prod가 3이 될 수도 있는데 (3 % 2 + 3 % 3) % 2 = 1이다.

따라서 x에  0,1,2,3,4,5,6,8,9,10,11 넣어서 결과가 1 나오면 무조건 mode=1

모두 0이 나오면 mode = 0 으로 판단하도록 코드를 작성하여 돌렸다.

 

 

 

 

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
from pwn import *
context.log_level = 'debug'
 
 
= remote("13.209.188.120"9003)
p.recvuntil("Challenge 1\n")
= 0
for _ in range(64):
    print(_)
    for i in range(13):
        if(i==7 or i==11):
            continue
        p.sendline("0")
        p.sendline(str(i))
        if(1 == int(p.recv())):
            p.sendline("1")
            p.sendline("1")
            f = 1
            break
    if(f):
        f = 0
        continue
    p.sendline("1")
    p.sendline("0")
p.interactive()
 
cs

 

 

chal2도 guess_mode()를 64회 통과해야하는데

 

이제는 리턴 값이 0,1,2,3,4 총 5개 이며

func_gen에서 x를 sha256을 돌려서 사용한다.

일단 x에는 int만 들어가고 x를 0부터 1씩 증가시켜 넣어서 결과를 확인했을 때 규칙을 찾을 수 없었고

sha256(x) 의 결과들 중에서 bit중 1의 개수가 작아봐야 80-90개 사이였기 때문에

chal1처럼 풀 수 없었다.

 

다르게 풀어야 되는 거 같은데..

반응형
반응형

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
반응형

Obligatory Shark

 


Every Breath You Take

https://steamid.uk/profile/76561199216646356


Height and width are empty.

But we have a CRC.

1200 x 675

 

hmm

found something

 

she is queen mary

 

why it is not working?

반응형

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

Codegate 2021 Quals Write Up  (0) 2022.02.28
ASCTF 2021 문제 풀이 및 출제 후기 - Forensic(5), Misc(1)  (0) 2021.11.24
Digital Overdose 2021 Autumn CTF 2021 Write up  (0) 2021.10.09
DownUnderCTF 2021  (0) 2021.09.25
FIESTA 2021 Write up  (0) 2021.09.25
반응형

HASH Cracking

Hash 1

hashcat.exe -a 0 -m 0 hash.txt rockyou.txt

phantomlover

 


Hash 2

https://www.tunnelsup.com/hash-analyzer/

-m 100

fishchips

 


Hash 3

-m 1700

mommadobbins


Hash 4

https://md5hashing.net/hash_type_checker

sha2-256 -> nothing

ghost -> -m 6900

happyfamily


Hash 5

-m 3200

cowabunga

 


Hash 6

-m 500

scottiebanks


Hash 7

-m 1800

igetmoney


Steganography

A cornucopia of numbers

bin to ascii

base64 decode

DO{C0nVeR510n_m4Dn355}


The Detective


Queen's gambit

tweakpng.exe

base64 decode


Not exactly Nestene's Autons

stegsolve


Phreak File

cellphone keypad sound

 

use dtmf

decoded value가 부정확하게 나와서 직접 debug해서 값을 선별했다.

numbers to alphabet


OSINT: Tour de Japan

1 - Dare enter the mirror world

google image search

Tokyu_Plaza


2 - The land of culture

AKIBA

 

Akihabara

bic_camera_akiba

 

 


3 - A childhood favourite

sunshine_city


4 - One of the classics

"Inside Tokyo’s dedicated Nintendo, Pokémon, and Capcom Stores | Solid State Now"

 

SHIBUYA_PARCO


5.a - The Central Hub

tokyo_station


5.b - This way, Emperor Naruhito

Gyoko-Dori

 


6

 

구글 이미지 검색에서 비슷한 위치가 나온다.

(왜 문제 풀 당시에는 못찾았었지.. 구글 이미지검색을 안했었던가..)

오나기 강에서 같은 나무 난간을 찾을 수 있다.


7

거대한 환풍구처럼 보인다. 하지만 저것만 가지고 위치를 판단하기 어렵다.

오른쪽 뒷쪽을 보면 돌 벽이 있다.

이전 문제들이 도쿄에 있었으므로 이번 문제도 도쿄에 있을 것이라고 예상하고 dokyo stone wallls를 검색해본다.

tokyo castle

 

근처 로드뷰를 확인해보면,

 

문제의 사진에 나온 가로드의 형태와 비슷한 것을 확인할 수 있다.

이 것으로 이 주변이 맞음을 확인할 수 있다.

주변 영국 대사관 앞에서 같은 구조물을 찾을 수 있다.


8 - A staple drink of Japan

melon_soda


9

울창한 나무들, 연못, 기와지붕, 노란 건물, 하얀 건물이 보인다.

 

역시나 tokyo로 키워드를 두고 이미지 검색을 하면 tokyo garden이라는 키워드를 뽑아낼 수 있다.

tokyo garden들로 검색을 해보면 그 중에 happo-en에서 사진들 중에 한얀 건물과 연못 사진을 확인할 수 있다.

https://www.tripadvisor.com/Attraction_Review-g14131029-d504482-Reviews-Happo_en_Garden-Shirokanedai_Minato_Tokyo_Tokyo_Prefecture_Kanto.html#/media-atf/504482/317969107:p/?albumid=101&type=0&category=101


10

(아니 이건 히라가나 가타카나 한자 읽을 줄 알아야 풀 수 있는 문제 아닐까..)

참고한 롸업에 따르면, 선거 포스터처럼 보이는 곳에 荒川西日三글자를 통해서 아라카와구 니시닛포리 3초메 인 것을 알 수 있다고 한다.

(문제 풀 때 구글 이미지 번역으로 사람이름 알아내서 지역구가 도쿄도 인 것 까지밖에 못알아 냈다.)

 

이어서 오른쪽 상단 간판에 '테루'가 써져 있는데 호텔의 호'테루'다.

荒川 西日暮里 3丁目 おんぼろホテル을 검색해서  谷中 富士見ホテル임을 알아내고 (못찾겠는데요)

문제 사진 오른쪽 간판 밑에 <-30m 가 써있으므로 호텔 반경 30m 내 사진과 같은 장소를 로드뷰로 찾아낸다.찾은 장소는 谷中 大島酒店인데, 이 곳이 夕焼けだんだん라고 하는 유명한 장소라고 한다.

 

 

谷中 Yanaka답은 Yanaka

 

근데 사진 장소는 아라카와구인데 정답은 다이토구 야나카야? 뭐지

 


11 - An island of mascots

amami

 

일본어 대충 읽을 줄 알아서 품 ㅋㅋ

 


12


13 - The river of Sakura

meguro river


Log Analysis

Part 1 - Ingress

search "cmd"


 

 

반응형

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

ASCTF 2021 문제 풀이 및 출제 후기 - Forensic(5), Misc(1)  (0) 2021.11.24
Killer Queen CTF 2021 write up  (0) 2021.10.31
DownUnderCTF 2021  (0) 2021.09.25
FIESTA 2021 Write up  (0) 2021.09.25
Fword CTF 2021 Forensics Write up  (0) 2021.09.25
반응형

Forensics

A challenge.gif file is given.

When you open the file, it looks like a parts of the QR code images.

 

To split the images.

https://ezgif.com/split/

 

Split animated GIF image in frames (free online tool)

This online tool is designed to convert an animated GIF (and WebM, APNG, MNG, AVIF) image into individual frames for editing or viewing them separately.

ezgif.com

 

Then you can get 12 piece images of 10 QR code images divided by color.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
import cv2
 
for i in range(10):
 
    chunks = []
    for j in range(12):
        imgfile = "./img/frame_" + "{0:03}".format(j*10+i) + "_delay-0.05s.gif"
        #img = cv2.imread(imgfile, 1)
        ret, frame = cv2.VideoCapture(imgfile).read()
        img = frame[1:210:300].copy()
 
        chunks.append(img)
    cv2.imwrite("./img/"+str(i)+".jpg", cv2.vconcat(chunks))
cs

I wrote a python code to concat images and read 5.jpg % 7.jpg.

decode base64

get flag


4기가짜리 메모리 덤프 파일이 주어진다.

멀웨어 이름, 멀웨어 지속 메커니즘의 이름, 감염 경로 폴더를 찾아야 한다.

 

iamgeinfo

Win7SP1x64

 

userassist

수상해보이는 notsuspicious.exe 실행 기록이 있다.

 

filescan으로 해당 파일 찾아서 dumpfiles로 덤프하니까 윈도우 디펜더가 반응한다.

windows defender

 

파일명 notsuspicious.exe

폴더명 PJxhJQ9yUDoBF1188y

 

virustotal 돌렸는데, 원본 파일명은 BitcoinBlackmailer.exe 이었다.

혀튼 레지스트리 키 추가하고, 프로세스 생성해서 돌리는데

플래그를 어떻게 작성해야 되는거지..

반응형

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

Killer Queen CTF 2021 write up  (0) 2021.10.31
Digital Overdose 2021 Autumn CTF 2021 Write up  (0) 2021.10.09
FIESTA 2021 Write up  (0) 2021.09.25
Fword CTF 2021 Forensics Write up  (0) 2021.09.25
InCTF 2021 Forensics  (0) 2021.08.22

반응형

한 달 전쯤 있었던 Fword CTF 2021에 포렌식 문제 몇 개 있길레
나중에 풀고 정리할려고 포렌식 문제 파일만 받아두었는데
피에스타 하느라 못 풀어보고 있다가 이제서야 푸네요.

 

2.00GB 크기의 challenege.raw 파일이 주어진다.

메모리 덤프파일이므로 vol로 분석을 진행한다.

imageinfo

Win7SP1x64

 

문제 지문을 보면 연락을 취했었다라고 되어 있는데 userassist를 확인해보면 메일 클라이언트인 thunderbird가 실행되었던 것을 확인할 수 있다.

userassist

 

메일 정보가 담긴 파일 내용을 확인해봐야 할 것 같은데 cmdline에서 메일 파일들을 notepad로 열었던 기록이 있다.

플래그 파일을 연 기록도 있다.

경로를 찾아봐야하는 수고를 덜었다.

cmdline

 

filescan으로 해당 파일들 오프셋 찾아내서 dumpfiles로 뽑아내면 된다.

flag.txt.asc

flag가 PGP 메세지로 구성되어 있다.

 

INBOX

ctf.user가 ctf.user 자신에게 보내버린 메일

그리고 필요할거라는 데이터가 포함되어 있다.

보낸 날짜는 Friday, 20 Aug 2021 5:03

 

Spam

패스워드를  환경변수 345YACCESSTOGENERATEP455 에서 얻을 수 있을 것 같다.

envar findstr "345Y"

pPaAsSpPhHrR445533

 

PGP 메세지를 복호화하기 위해서 INBOX에서 주어진 데이터를 key파일로 사용하고 key 파일에 대한 패스워드로 pPaAsSpPhHrR445533 사용하여

PGP 메세지를 복호화하면 23b2e901f3c3c3827a70589efd046be8 가 나온다.

 

위 세 개 정보를 조합하여 플래그를 완성하면 된다.

 

 

 

디스크 덤프 파일이 주어진다.

 

설치된 프로그램들을 확인해보면 zenmap과 mailbird가 설치되어 있는 것을 확인할 수 있다.

%APPDATA%\Local\Mailbird\Store\Store.db 를 확인하여 메일 내용을 확인해보면 

instructor name 이 SBA임을 확인할 수 있다.

 

 

 

반응형

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

DownUnderCTF 2021  (0) 2021.09.25
FIESTA 2021 Write up  (0) 2021.09.25
InCTF 2021 Forensics  (0) 2021.08.22
SSTF 2021 write up  (0) 2021.08.16
RACTF 2021 Write up  (0) 2021.08.15
반응형

  InCTF 2021 Forensic 문제의 write up보고 다시 푼 내용을 정리하였습니다.

 

https://blog.bi0s.in/2021/08/16/Forensics/Ermittlung-InCTF-Internationals-2021/

1. chat application program 찾기

2. userassist로 마지막 실행시각 확인

3. NTUSER.DAT에서 unread 메세지 개수와 프로그램 버전 확인

4. procdump, strings로 프로그램 버전 확인

 

 


ermitting.raw파일이 주어지는데, 용량은 0.99GB로, 메모리 덤프파일로 추측된다.

 

volatility를 사용하여 분석을 진행한다.

먼저 imageinfo로 프로필을 확인한다.

WinXPSP2x86

 

 

 

pstree에서 firefox.exe와 msimn.exe가 실행중이었음을 확인할 수 있다.

 

msimn.exe는 Outlook Express의 프로세스이다.

 

firefox를 사용하였으므로 firfoxhistory를 확인해보았지만, 의미있는 정보는 없다.

 


 

확인한 프로세스들 중에서 chat application program라고 할만한 것은 msimn.exe밖에 없다.

 

cmdline 플러그인을 사용하면 Outlook Express가 실행되는 부분을 찾을 수 있다.

따라서 1번 질문에 대한 답은 Outlook_Express 이다.

 


 

2번 질문, 해당 프로그램을 마지막을 이용한 시각은 pslist, pstree에서 확인할 수 있다.

 

아니면 userassist 플러그인을 사용하여 확인하는 방법도 있다.

실행횟수도 확인 가능하다.


outlook express 의 unread 메세지 개수는 NTUSER.DAT 레지스트리에서 찾을 수 있다.

 

hivelist로 NTUSER.DAT의 주소값을 찾고

 

dumpregistry로 해당 hive파일을 추출한다.

 

Software\Microsoft\Windows\CurrentVersion\UnreadMail\

REGA등으로 확인하면 된다.

해당 계정의 email주소도 확인할 수 있다.

 

volatility에서 printkey 플러그인을 사용하여 printkey -o 0xe1aa5b60 -K "Software\Microsoft\Windows\CurrentVersion\UnreadMail\" 로 확인할 수도 있다.


4번 질문, 채팅 프로그램의 버전 구하기.

프로그램의 버전을 찾는 방법에는 2가지가 있다. 1. NTUSER.DAT hive에서 찾기 2. 해당 프로세스를 dump떠서 찾기 

 

1. 레지스트리에서..

Software\Microsoft\Outlook Express\5.0\Shared Settings\Setup

 

2. 프로세스 dump에서...

volatility     procdump -p 2132 -D ./

리눅스 strings 명령어 사용해서 FileVersion을 찾을 수 있다.

 


https://blog.bi0s.in/2021/08/16/Forensics/Heist-InCTF-Internationals-2021/

 

1. NTUSER.DAT 레지스트리에서 default browser 찾기

2. top-visited website 확인

3. TeamViewer 아티팩트 분석

4. TeamViewer 아티팩트 분석


Heist.E01 ~ Heist.E10 10개로 분할된 이미지 파일(, disk dump)이 주어진다.

Autopsy를 사용하여 분석을 시작하자.

 

원래는 FTK Imager를 사용했었다가 이번에 autopsy를 사용해봤는데 autopsy가 분석하기에 더 편한 것 같다.

앞으로 Autopsy를 사용해야겠다.

 

1번 질문, 기본 브라우저.

 

NTUSER.DAT: Software\Microsoft\Windows\Shell\Associations\UrlAssociations\{http|https}\UserChoice

에서 기본 브라우저로 설정된 브라우저를 찾을 수 있다.

Chrome

 


2번 질문, top-visited 웹사이트 url 찾기

크롬 방문기록을 확인하기 위해 추출하는 History 파일이 있는 위치에 Top Sites라는 파일이 있다.

역시나 sqlite db파일인데

autopsy에서는 바로 데이터를 볼 수 있다.

 

top_sites 테이블에서 url_rank 값이 낮을 수록 가장 많이 방문한 사이트이다.

따라서 ebay.com

 


3번 질문, 가장 최근에 팀뷰어에서 파일 전송 세션이 시작된 시각

 

TeamViewer는 유저 데이터를 두 곳에 저장한다.

1. C:\Program Files\TeamViewer\
2. C:\Users\<User Profile>\AppData\Roaming\TeamViewer\

그리고 확인해야할 주요 파일은 1번 경로에 Connection_incoming.txt와 2번 경로에 Connections.txt 이다.

 

connection_incoming.txt example, Img src:  mii-cybersec

 

Connection_incoming.txt에서 filetransfer 세션 기록을 찾을 수 있었다.

해당 세션의 시작시간인 20-07-2021 07:48:50 이다.


4번 질문, 파일 전송 세션에서의 id와 hostname

3번에서 사용한 파일에서 찾을 수 있다.

920981533 & DESKTOP-S34NLCJ

 


반응형

 

 

https://blog.bi0s.in/2021/08/16/Forensics/Heist-Continues-InCTF-Internationals-2021/

1. Slack user id와 workspace id 찾기

2. remote connected PC의 배경화면 확인하기

3. 연결된적 있었던 2개의 USB의 파일시스템 확인하기

4. 윈도우10 타임라인에서 voice modulator 사용 시간 확인하기

 

문제파일은 위 heist 문제와 동일하다.

 


Slack user log는 Users\Danial Benjamin\AppData\Roaming\Slack에 있다.

주요 파일은 .\Local Storage\leveldb\000004.log 와 .\storage\root-state.json이다.

 

000004.log 에는 workspace에 대한 metadata(workspace name, user id, workspace id, icons 등)가 포함되어 있다. 

root-stat.json에는 workspace에서 다운받은 파일들에 대한 정보와 workspacedp 대한 metadata 일부가 있다.

root-stat.json

root-stat.json에서 domain, workspace id, user id, workspace name을 확인할 수 있으며

domain - heistplanning.slack.com
Workspace Name - Heist Planning
User ID - U027XK55WCT
Workspace ID - T027GM97WJ3

 

000004.log

000004.log에서 한 번 더 확인이 가능하다.

 


2번 질문, 원격으로 연결된 PC의 배경화면에 있는 글자 확인하기

 

이 문제 파일에서는 2개의 원격 프로그램 TeamViewer와 AnyDesk를 찾을 수 있다.

AnyDesk에서는 Remote PC의 배경화면을 썸네일로 사용하며,

해당 섬네일은 Users\Danial Benjamin\AppData\Roaming\AnyDesk\thumbnails 에서 찾을 수 있다.

 

 


3번 질문, 연결된 적이 있는 2개의 USB의 파일시스템 알아내기

3. Team restored 2 USB devices (Sandisk 3.2Gen1 & Toshiba External USB 3.0) at the leader’s place. What is the file system of these 2 USB devices?

 

SYSTEM레지스트리에서 해당 USB 2개 연결된 흔적을 찾을 수 있다.

 

이벤트 로그에 USB connection과 removal에 대한 detail들이 저장된다.

EVENT ID 1006번에서 찾아볼 수 있으며, 해당 ID는 Microsoft-Windows-Partition%4Diagnostic.evtx에서 찾을 수 있다.

 

해당 evtx를 파싱하여 CSV로 추출하기위해 Eric Zimmerman의 EvtxExplorer를 사용한다.

https://ericzimmerman.github.io/#!index.md

 

Eric Zimmerman's tools

 

ericzimmerman.github.io

사용 예제

 


Microsoft-Windows-Partition%4Diagnostic.evtx에서 얻을 수 있는 모든 아티팩트들에 대해서는https://dfir.pubpub.org/pub/h78di10n/release/2 (by Alexandros Vasilaras, Evangelos Dragonas, and Dimitrios Katsoulis)

 

USB Forensics – Recover more Volume Serial Numbers (VSNs) with the Windows 10 Partition/Diagnostic Event Log · DFIR Review

Synopsis Forensics Question: How many Volume Serial Numbers (VSNs) of previously connected devices can be recovered from a single Windows event log?OS Version: Microsoft Windows 10 Pro 2004 Build 19041 (Original Tests)Microsoft Windows 10 Pro 20H2 Build 19

dfir.pubpub.org

에 자세히 설명되어 있다고 한다. (나중에 정독해봐야겠다.)


해당되는 USB의 각 Payload에서

 

Vbr0값을 찾고 hex값을 ascii로 변환해주면

SanDisk 3.2Gen1 FileSystem - FAT32

파일시스템을 찾을 수 있다.

 

Toshiba USB 3.0 FileSystem - NTFS

 


4번 질문, 음성 변조 프로그램 사용 시간 구하기.

 

Windows10 1803버전 부터는 Timeline 기능이라는 것이 있다. http://www.forensic-artifacts.com/windows-forensics/timeline

 

디지털 포렌식 아티팩트 & 증거 분석 기법 공유 | 인섹시큐리티

[증거]테이블의 상단 칼럼 정보를 통해 응용프로그램 이름, 마지막 실행 시간 정보를 확인 할 수 있고 우측 [세부 정보]테이블을 통해서도 확인 가능

www.forensic-artifacts.com

 

C:\Users\<user>\AppData\Local\ConnectedDevicePlatform\L.<profile>\ActivitiesCache.db

 

추출하여 dbbrowser를 사용해서 열었다.

AppId에서 Voicemod Desktop을 찾고, ActivityType이 6인 것들 중에서 Payload에서 activeDurationSeconds 값을 확인한다.

해당 값을 모두 합치면 된다.

 

ActivitiyType == 6는 "App in focus"를 의미한다.

 


 

 

https://blog.bi0s.in/2021/08/16/Forensics/Heist-Ends-InCTF-Internationals-2021/

 

1. Google Keep Notes에서 note의 생성시각 추출

2 3 4. Slack Messages에서 장소와 일정 찾기

5. Google Tasks에서 completed tasks 개수 구하기

6. Google Docs cache에서 secret code 추출

7. Game 첫 실행 시각 찾기


./data

Android Device dump가 주어진다.

abrignoni의 ALEAPP를 사용하여 데이터를 파싱한다. (python3.9+가 필요하다.)

https://github.com/abrignoni/ALEAPP

 

GitHub - abrignoni/ALEAPP: Android Logs Events And Protobuf Parser

Android Logs Events And Protobuf Parser. Contribute to abrignoni/ALEAPP development by creating an account on GitHub.

github.com

 

ALEAPP을 돌려주면 이렇게 HTML 보고서를 확인할 수 있다.

안드로이드 10임을 확인할 수 있다.

 

1. When did the Professor create the note for Rio?

Google Keep에서 해당 노트를 찾을 수 있으며,  생성 시각도 확인할 수 있다.

 

Google Keep 아티팩트s https://g4rud4.gitlab.io/2021/Google-Keep-Notes-and-Lists-Mobile-Artifacts/

 

Google Keep - Notes and Lists: Mobile Artifacts | Nihith's Blog

Google Keep is one of the best notes storing app for Android from Google can be installed through Google Play store. In this blog post I am gonna explain about the Google Keep Mobile Artifacts, one can find in an android mobile dump. The Google Keep Notes

g4rud4.gitlab.io


2. Where did Professor and Rio, Plan to meet to plan the heist?

Slack 아티팩트 분석

https://abrignoni.blogspot.com/2018/09/finding-slack-messages-in-android-and.html

 

Finding Slack app messages in Android and using json_extract to do it.

Short version: The Slack app for Android keeps message related data in the TCJRXQD1B database located in the following directory: ...

abrignoni.blogspot.com

 

쿼리

https://github.com/abrignoni/DFIR-SQL-Query-Repo/tree/master/Android/SLACK

 

GitHub - abrignoni/DFIR-SQL-Query-Repo: Collection of SQL query templates for digital forensics use by platform and application.

Collection of SQL query templates for digital forensics use by platform and application. - GitHub - abrignoni/DFIR-SQL-Query-Repo: Collection of SQL query templates for digital forensics use by pla...

github.com

 

\data\data\com.Slack 경로에 유저 데이터가 있다.

SELECT datetime(ts , 'unixepoch') AS 'Time Sent', channel_id, user_id, json_extract(message_json, '$.text') AS 'Messages' FROM messages ORDER BY ts;

 

 

 


3. When did Rio plan to meet Professor?

 

 

 


4. How many members did Rio gathered for the heist?

 

 

 

 


5. How many tasks did Rio created in planning the heist, and how many did he complete?

 

 


6. There is a secret code present in a document shared between Rio & Professor, can you find out what it is?

 

문서를 공유한 것을 확인할 수 있고, 기기에 Google docs 앱이 설치되어 있는데 이 앱 캐시에서 해당 문서를 찾을 수 있다.

 

data\data\com.google.android.apps.docs\cache\docs_glide\data

png 파일이 존재한다.

 

시크릿 코드를 찾을 수 있다.

 

 

 


7. We found a game installed on the device. When did Rio first open this game?

dr. driving이라는 게임 하나가 깔려 있다.

data\data\com.ansangha.drdriving 에 유저 데이터가 있다.

.\shared_prefs\com.google.android.gms.measurement.prefs.xml 파일을 보면

first_open_time 값을 찾을 수 있다.


The Big Score

https://blog.bi0s.in/2021/08/20/Forensics/InCTFi21-TheBigScore/

Challenge Description


We sent Michael over to the Union Depository to collect data from one of their systems for the heist. We were able to retrieve the data, but it looks like they were able to read the message sent to us that Michael had typed from their system. Fortunately, he took the memory dump before escaping the building. Analyze the memory dump and find out how the message was compromised.

 

리눅스 메모리 덤프 파일 분석

 

리눅스 메모리 덤프인 lime 파일이 주어진다.

볼라티리티로 해당 메모리 덤프를 분석하기 위해서, 리눅스 프로파일을 빌드해주어야 한다. (기본 지원이 안되는 프로필인가 봄)

 

그래서 해당 파일의 프로필을 알아내야 하는데, 당연하겠지만 볼라티리티 imageinfo로는 안나온다.

대신 strings와 grep 명령어로 찾아낸다.

$ strings the_big_score.lime | grep 'Linux version'

Linux version 5.4.0-42-generic (buildd@lgw01-amd64-023) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #46~18.04.1-Ubuntu SMP Fri Jul 10 07:21:24 UTC 2020 (Ubuntu 5.4.0-42.46~18.04.1-generic 5.4.44)

 

그리고 동일한 버전의 vm을 구축하고 프로필을 빌드한다.

https://github.com/volatilityfoundation/volatility/wiki/Linux

 

GitHub - volatilityfoundation/volatility: An advanced memory forensics framework

An advanced memory forensics framework. Contribute to volatilityfoundation/volatility development by creating an account on GitHub.

github.com

 

https://github.com/volatilityfoundation/profiles/tree/master/Linux/Ubuntu/x64

 

GitHub - volatilityfoundation/profiles: Volatility profiles for Linux and Mac OS X

Volatility profiles for Linux and Mac OS X. Contribute to volatilityfoundation/profiles development by creating an account on GitHub.

github.com

여기 있는 것이라면 가져다 써도 되는데, 커널 버전이 안맞아서 오류가 난다.

 

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

 

 

$ 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

 

특이사항 하나를 찾을 수 있다.

 

링크로 들어가면, base64로 인코딩된 실행파일을 찾을 수 있다. 파일로 저장되지 않고 바로 메모리로 올라가 실행된다.

base64 디코딩해서 ida로 까보면 되는데, 기능은 간단하다.

git clone repo -> python 스크립트 실행 -> repo 제거

스크립트는 /dev/input/event2에서 데이터를 읽어와 hex로 인코딩해서 termbin에 업로드한다.

업로드한 경로는 hashed, reversed 되서 bin/log에 랜덤해시로 저장

 

bin/log를 추출하여 hash값을 얻기 위해, linux_enumerate_files 플러그인을 사용한다.

 

vol.py -f the_big_score.lime --profile=LinuxUbuntu18_04_1-5_4_0-42x64 linux_enumerate_files | findstr bin/log
vol.py -f the_big_score.lime --profile=LinuxUbuntu18_04_1-5_4_0-42x644 linux_find_file -i 0xffff8aa80573b890 -O ./

다음과정 생략.


Darkness

https://github.com/teambi0s/InCTFi/tree/master/2021/Forensics/Darkness

E01 파일 주어짐.

의심스러운 웹사이트 방문, 삭제된 중요한 키 파일

 

  1. The zip file is actually deleted from disk and can be recovered by extracting the Volume shadow copy from the .E01.키파일이 담긴 zip 복구 . 모르겠다.

 

방문기록 확인

 

pastebin.com 접속 기록을 확인할 수 있지만 그 이상은 없다. (흔적을 덮기 위해 방문기록을 지웠기 때문.)

 

윈도우에는 옵션으로 진단 데이터를 수집하는 기능이 있고 해당 데이터에는 MS edge 브라우저 방문기록 등이 있다.

 

C:\ProgramData\Microsoft\Diagnosis\EventTranscript\EventTranscript.db

 

Events_presisted 테이블에서  ogging_binary_name = msedge.exe 로 필터링 후 payload에서 navigationUrl값에서 url 찾기.

 

이게 오피셜 롸업이고,


방문기록에서 pastebin.com이 나온 것을 근거로 pastebin.com을 검색해서 찾아내면 된다.

해당 링크는 edge cache 폴더에 있는 파일에서 발견되었다.

 

해당 링크로 들어가면 패스워드를 요구하는데,

 

Archives에서 confidential.zip을 찾을 수 있고

 

해당 zip파일에서 패스워드를 찾을 수 있다.

반응형

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

FIESTA 2021 Write up  (0) 2021.09.25
Fword CTF 2021 Forensics Write up  (0) 2021.09.25
SSTF 2021 write up  (0) 2021.08.16
RACTF 2021 Write up  (0) 2021.08.15
RCTS CERT CTF 2021 write up  (0) 2021.08.11
반응형

 

 

 

'cat flag' => 7161132565001953639 = 103 * 408479 * 170205956447

 

 


아래 Mars Rover 와 Remains 문제는 https://github.com/theori-io/ctf/blob/master/2021/SSTF2021/SSTF%202021%20The%20Duck%20-%20Write%20Up%20-%20rev%201.pdf 를 보고 푼 풀이를 작성하였습니다. (08.23)

 

Mars Rover

 

MarsRover.png 파일이 하나 주어진다.

파일을 살펴보면 2가지 특이사항이 있었다.

1. 이미지 양 옆 검은색 바 (stegsolve로 보았을 때)

 

2. TweakPNG로 청크를 확인했을 때, 일반적이지 않은 작고 여러개로 존재하는 IDAT 청크 

 

풀이를 보니 이 중에서 2번째를 이용하는 것이었다.

아니 왜 기본에선 뒷 값이 ...으로 보여서..

IDAT 청크의 CRC값의 마지막 1바이트가 ASCII범위의 값이다.

 

https://pyokagan.name/blog/2019-10-14-png/의 코드를 사용해서 해당 값을 추출하면 된다.

 

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
import zlib
import struct
 
= open('MarsRover.png''rb')
 
PngSignature = b'\x89PNG\r\n\x1a\n'
if f.read(len(PngSignature)) != PngSignature:
    raise Exception('Invalid PNG Signature')
 
flag = ''
 
def read_chunk(f):
    global flag
    # Returns (chunk_type, chunk_data)
    chunk_length, chunk_type = struct.unpack('>I4s', f.read(8))
    chunk_data = f.read(chunk_length)
    chunk_expected_crc, = struct.unpack('>I', f.read(4))
    chunk_actual_crc = zlib.crc32(chunk_data, zlib.crc32(struct.pack('>4s', chunk_type)))
    flag += chr(chunk_expected_crc & 0xff)
    #if chunk_expected_crc != chunk_actual_crc:
    #    raise Exception('chunk checksum failed')
    return chunk_type, chunk_data
 
chunks = []
while True:
    chunk_type, chunk_data = read_chunk(f)
    chunks.append((chunk_type, chunk_data))
    if chunk_type == b'IEND':
        break
 
print(flag)
 
cs


Remains

주어진 Remains.zip을 열어보면 data 파일이 있다.

$file data로 7z 파일임을 알 수 있다. (간단하게 시그니쳐 확인해보면 된다.)

data.7z에 bin.sav 파일이 있다.

 

sav파일은 버츄얼박스 스냅샷으로 머신 상태를 저장했을 때 생기는 파일이다.

해당 파일을 뭘로 열어야 분석할 수 있을까..

 

 

관련 롸업을 찾아보면 됐다.

https://ox002147.gitlab.io/writeup-bitsctf-for60.html -> http://blog.rentjong.net/2014/05/asis-quals-2014-forensic-300.html -> https://www.dropbox.com/sh/vtsk0ji7pqhje42/AABY57lRqinlwZpo8t9zzGYka

 

savparser

Dropbox를 통해 공유함

www.dropbox.com

 

remains롸업에서도 해당 파일을 사용했다.

 

$gcc parsvbox.c lzf_d.c

$./a.out bin.sav

로 파싱 이후

readss.c의 코드에서 파일명 수정해주고

$gcc readss.c -o b.out

$./b.out

하면 out.raw파일이 생성됨. 해당 파일을 헥스에디터로 열어서 앞에 더미데이터를 지워주면 PNG로 열 수 있음.

 

이러한 스샷 이미지를 얻을 수 있다.

 

./sav를 실행하고 Wanna flag? 라는 문자열이 출력된 것을 확인할 수 있다.

bin.sav-pgm.out 파일에서 해당 문자열을 찾을 수 있고

조금 내려보면 ELF 시그니쳐를 찾을 수 있다.

해당 바이너리를 추출해서 IDA로 열어서 리버싱으로 플래그를 찾아내면..

반응형

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

Fword CTF 2021 Forensics Write up  (0) 2021.09.25
InCTF 2021 Forensics  (0) 2021.08.22
RACTF 2021 Write up  (0) 2021.08.15
RCTS CERT CTF 2021 write up  (0) 2021.08.11
RTLxHA CTF 21 write up  (0) 2021.08.01
반응형

OSINT - Triangles

 

go to google image search

 

 

 

 

done.


Osint - Silver Darlings

search image with "cafe de la mairie"

 


OSINT - 50m on the Right

 

image search -> Armação de Pêra

you can find "bistro 24" in this image.

 

 

 

 

And there is a restaurant on the other side.

 


OSINT - John Poet

i searched image with "R.H.C"


OSINT - Skyline

First, when I searched the highest three buildings, it didn't come out, so I searched the color of the sheet.

Then, I could find similar cable car image.

 

It was london cable car.

 

 

반응형

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

InCTF 2021 Forensics  (0) 2021.08.22
SSTF 2021 write up  (0) 2021.08.16
RCTS CERT CTF 2021 write up  (0) 2021.08.11
RTLxHA CTF 21 write up  (0) 2021.08.01
Securebug.se CTF Loki 2021 write up  (0) 2021.07.19

+ Recent posts