본문 바로가기
Wargame Write-Up/N0Named

[N0Named] (Forensic) [C] 조별과제_배드엔딩 / 누가 진짜일까? / 어제 뭐 했어? / 너의 집 비밀번호는? / Left Side B / 우리의 추억들 / 아니 오해라니까 / 우리 이제 그만하자

by snwo 2021. 4. 28.

조별과제_배드엔딩

ppt 를 열고, 흰 네모 두개를 없애보면, pptx -> zip -> folder -> flag 를 볼 수 있다.

.zip 확장자로 바꾸고, media 폴더에 보면, secret.png 가 있당.

누가 진짜일까?

두 파일은 크기가 같고, 외견상으로 같아보이지만,

바이트단위로 비교해보면 다른 부분이 있다. 그 부분을 모아서 출력하면 된당.

어제 뭐했어?

패킷파일에서 http 를 필터링하고있다. mandu-mandu.shop 사이트에서 받아오는건데, 지금은 없다.

그래서 패킷으로 분석해보면, download.php 를 HTTP stream 으로 follow 하면, 비밀번호가 보이고,

music.php 를 tcp stream 으로 follow 하면, PK로 시작하는 zip 파일이 보인다.

 

RAW 로 저장한 다음에, PK 문자열을 찾고, 그 위치 전에있는 데이터를 싹 지우면 zip 파일이 나오는데,

아까 비밀번호로 압축해제하면 된당.

 

너의 집 비밀번호는?

zip 암호푸는 툴들은 보통 4글자 넘으면 돈내라한다.

이 문제는 생년월일 6글자+[qwerty] 이므로, 돈내지 않고, 꽁짜로 풀어보자.

소수코드.

더보기

 

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
import zipfile
import threading
fname="./zip.zip"
def extract(str):
        file=zipfile.ZipFile(fname)
        for i in range(len(str)):
                try:
                        file.extractall(pwd=str[i].encode())
                        print(f"[+] find !!!! : {str[i]}")
                        exit(0)
                except:
                        pass
def add_list():
        lst=[]
        for i in range(120,100,-1):
                for j in range(1,13):
                        for k in range(1,33):
                                for alpha in ['q','w','e','r','t','y']:
                                        s=f"{i%100:02d}{j:02d}{k:02d}"+alpha
                                        lst.append(s)
 
        f=open("./plist.txt","w")
        f.write('\n'.join(lst))
        f.close()
 
def main():
        with open("./plist.txt","r"as f:
                data=f.read().split('\n')
                ld=len(data)//8
                t_list=[]
                for i in range(8):
                        t_list.append(threading.Thread(target=extract,args=(data[i*ld:(i+1)*ld],)))
                        t_list[i].start()
 
 
if __name__=="__main__":
        add_list()
        main()
cs

 

일단 멀티쓰레드로 구현했따. (8스레드)

가능한 경우의수들은 파일로 저장했다. (변수에 저장했다가 재실행하면 다시생성해야함)

99년생 ~ 70년생으로 했다가, 안나와서 20년생 (??) ~ 00년생으로 했더니 나왔당.

 

Left Side B

 

fake flag 를 준다. .bmp 파일이고, Left Side B -> LSB 가 힌트라 했으니 stegsolve 로 풀어보자

 

일단 밑쪽에 뭐가 있다. 근데 이거는 딱히 데이터가 나오지 않아서, HxD 로 열어봤다.

 

앞쪽 데이터가 수상했다. FF 는 LSB 가 1이고, FE 는 LSB 가 0이다.

FE FF FE FE ~~~ -> 0100~~~~ -> 10진수 -> Crypto.Util.number.long_to_bytes 로 바꾸면 된당.

 

우리의 추억들

먼저 텍스트파일을 보니, 폴더와 파일들이 보인다. FTK Imager 로 열어서 휴지통을 살펴보도록하자.

이런 사진들이 보인다. 썸네일 복구 들어본거 같아서 확인해보도록하자.

/유저이름/Appdata/Local/Microsoft/Windows/Explorer 에서 확인할 수 있다.

파일탐색기에서 보이는 사진의 썸네일은 윈도우 자체적으로 생성하여 데이터베이스로 남겨놓는다고한다.

Thunbcache Viewer 으로 256으로 끝나는 파일을 열어보니, 썸네일이 많이 나오는데,

내리다보니까 나온당.

아니 오해라니까

사이트 기록을 보기위해 Appdata/Local/Google/Chrome/User Data/Default 에 들어갔다.

혹시 몰라서 DownloadMetaData 에 들어가 보니까

이런게 있었고, q 는 "파이어폭스" 이다. 그렇다 파이어폭스로 뭔가 봤을 것이다.

우리 이제 그만하자

D 드라이브