Featured image of post CSTV - CAPTURE THE FLAG 2023 | Forensics

CSTV - CAPTURE THE FLAG 2023 | Forensics

Trong bài viết này mình sẽ Writeups 3 bài Forensics

Nói thật thì đây là 1 giải khá khó chịu với mình, vì ngoài độ guessing của các thử thách (forensics, mobile) thì thật ra chẳng có gì để nói cả (và rất tiếc với 1 mình mình làm thì không thể giải quyết được toàn bộ cùng 1 lúc)

Lost Puppey

Description: This is my lost puppey. He is trying to hide himself and hide something from me. Can you find them for me?

Attachment: Lost.docx

Đề bài cho mình 1 file docx, dựa vào đề bài để tìm xem thứ gì bị ẩn giấu thì với kinh nghiệm mình sẽ unzip nó ra

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
┌──(root㉿kali)-[/home/kali/Desktop/cstv]
└─# unzip Lost.docx 
Archive:  Lost.docx
  inflating: [Content_Types].xml     
  inflating: _rels/.rels             
  inflating: word/_rels/document.xml.rels  
  inflating: word/document.xml       
 extracting: word/media/image1.jpg   
 extracting: word/media/image2.jpg   
  inflating: word/theme/theme1.xml   
  inflating: word/settings.xml       
  inflating: docProps/core.xml       
  inflating: docProps/app.xml        
  inflating: word/webSettings.xml    
  inflating: word/styles.xml         
  inflating: word/fontTable.xml 

Ở đây để ý rằng có 2 file media trong thư mục word/media/

word/media/

Có vẻ như image1.jpg đang bị corrupt, mình sẽ kiểm tra các byte và header xem có vấn đề gì không

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
┌──(root㉿kali)-[/home/…/Desktop/cstv/word/media]
└─# xxd image1.jpg 
00000000: 504b 0304 1400 0900 0800 d922 0955 4ac4  PK.........".UJ.
00000010: 894f 8fde 0200 59e1 0200 0800 1c00 7465  .O....Y.......te
00000020: 7374 2e6a 7067 5554 0900 035a 19f2 620f  st.jpgUT...Z..b.
00000030: 1af2 6275 780b 0001 04e8 0300 0004 e803  ..bux...........
00000040: 0000 413d 3e5e 82e4 e725 28b6 3da2 ab50  ..A=>^...%(.=..P
00000050: f6e0 2ad2 47c4 a8af 7599 2983 861a 5c2e  ..*.G...u.)...\.
00000060: 7ec5 636d 2019 9865 db00 2663 779f afff  ~.cm ..e..&cw...
00000070: 18a2 0efe 5ef0 ab03 f443 dd7d 84a4 ba16  ....^....C.}....
00000080: d23d b327 64b3 6c03 7be3 d7e3 77b2 7d38  .=.'d.l.{...w.}8

Yah, vậy nó thực chất là 1 file ZIP, đến đây cần giải nén nó ra nhưng xuất hiện thêm 1 vấn đề mới: password của file ZIP, với độ lỏ này thì chạy tools zip2john chắc là được rồi

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
┌──(root㉿kali)-[/home/…/Desktop/cstv/word/media]
└─# zip2john image1.zip > hash.txt
Created directory: /root/.john
ver 2.0 efh 5455 efh 7875 image1.zip/test.jpg PKZIP Encr: TS_chk, cmplen=188047, decmplen=188761, crc=4F89C44A ts=22D9 cs=22d9 type=8

┌──(root㉿kali)-[/home/…/Desktop/cstv/word/media]
└─# john hash.txt                                            
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 4 OpenMP threads
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, almost any other key for status
Almost done: Processing the remaining buffered candidate passwords, if any.
Proceeding with wordlist:/usr/share/john/password.lst
loveyou          (image1.zip/test.jpg)     
1g 0:00:00:00 DONE 2/3 (2024-01-06 18:19) 33.33g/s 1587Kp/s 1587Kc/s 1587KC/s 123456..ferrises
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 

Vậy mật khẩu file ZIP này là loveyou sau khi giải nén ra thì được cái ảnh test.png

Với JPG thì mình không nghĩ nhiều cho lắm, ném lên Aperi’Solve cho tự xử lý nốt

Steghide

flag: hackathon{bbc649da49b02570835df50fd173bff7d4933f07}

Whose name is it?

Description: I fell like there are many people drawing my secret…

Attachment: capture.pcap

capture.pcap

Ở chall thứ 2 thì có vẻ đúng hơn 1 chút với cái nghĩa forensics …

HTTP object

Sau khi check các object xuất hiện trong lưu lượng mạng thì thấy có 1 file thực thi (mình đã rev nó + decompile thử) nhưng mà không có gì để “khai thác” nên chuyển hướng qua phương án khác

Trong quá trình tìm kiếm thì mình có thấy trong udp stream xuất hiện việc gửi nhận 1 txt nào đó khá khả nghi

Bắt thử 1 query trong đó và decode thử theo thói quen thì thấy rằng đây là header của 1 file ZIP, thấy có hope nên theo hướng này luôn

Vậy việc của mình bây giờ chỉ là filter toàn bộ các udp.stream từ 188 đến 1569 (kết thúc) để filter với dns && udp.stream >= 188 && udp.stream <= 1569 và viết script để loại bỏ các phần thừa rồi ném qua cyberchef cho xử lý nốt

script:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import re

pattern = re.compile(r'\b(\d+\.\d+[a-fA-F\d]+)\.\w+\.\w+\.\w+\b')

with open("dnsfilter.txt","r") as f:
    input_text= f.read(); 

match = re.findall(pattern,input_text)

with open("output.txt", "w") as output_file:
  # Các queries trùng lặp 6 lần, loại bỏ bớt  
  for m in range(0, len(match), 6): 
      output_file.write(match[m].split('.')[1])

flag: CSTV_2023_{ba69f4c8c869295a9a8024b32a177bc63a942ffd}

L4g

Description: Can you deal with the lagging. If you can f the lag You will get the flag.

Attachment: 3y3L4g & 34rL4g.wav

Ở thử thách for cuối cùng này thì mình nhận được 2 file (1 wav và 1 file data), với kinh nghiệm thì mình xiên được file WAV đầu tiên bằng việc xem ảnh phổ của âm thanh

Nhìn qua thì thấy rằng đây là 1 đoạn mã Morse đơn giản –> WH4TY0UH34R1SN0TWH4TY0US33KF0R, cái này chắc là để dùng sau vì còn 1 file mắt lag nữa (mình nghi là file ảnh)

Dựa vào header của file này thì đúng là các byte đã bị sửa và bản gốc là 1 file ảnh PNG, mình sẽ sửa lại header trước thành PNG

Ngoài ra thì còn 1 thứ khiến mình để ý nữa là 1HdR, khả năng là bị lỗi chunk (IHDR)

Ở đây mình sử dụng tool: PNG-Fixer để kiểm tra các chunk có vấn đề

Vậy là từ đây thì biết được có 2 chunk bị sai là 1HdRIPAD (IHDRIDAT) tiến hành sửa lại toàn bộ (bằng HexEd)

Sau khi fix xong chunk thì sẽ chuyển qua [PCRT](để kiểm tra các tổng quan các byte)

Mình vừa mới fix lại cái IPAD xong nên bây giờ cần sửa lại IDAT chunk data length ở offset 0xD0002 (bằng HexEd)

Cứ vậy sửa lỗi tiếp đến bao giờ có thể nhìn được ảnh (bỏ qua bước sửa CRC chunk vì ảnh ban đầu đã lỗi sẵn)

Ảnh sau khi sửa xong: output.png

Mở trên Windows sẽ nhìn thấy luôn chứ không bị lỗi nữa, có thể đọc đoạn chữ trên ảnh là: Mắt hơi lag xin thông cảm và đoạn số là 123321232123

Đến hiện tại thì cả 2 file mình đã khai thác được toàn bộ file ảnh (bao gồm cả metadata của ảnh nữa) vậy chỉ còn lại file wav là chưa thực sự khai thác hết, với đoạn key trên có lẽ là pass của việc dùng tool? bài này stegano nên chắc cũng chỉ được có thế (mình mất nhiều thời gian suy nghĩ đủ hướng chỉnh ảnh các kiểu …)

1
2
3
4
┌──(root㉿kali)-[/home/kali/Downloads]
└─# steghide extract -sf 34rL4g.wav 
Enter passphrase: 
wrote extracted data to "Br41nL4g.txt".

yah, xong lag mắt, lag tai giờ đến lag não, không biết troll gì nữa đây …

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
+++>-<+-.-+.+-+
++++--+---+<.-+
+>++--+--.+.--+
+++.--+--<+>--+
++++--+---+-.-.
++++--..-.+--.<
++<+--<.->+--<.
++<+.--+-++--..
++<++--+.++.->.
++<++--.-+++-+.
[>-.+--+-+++-+.
>+]-+--+-+++-+.
++>-+--+-+++-+.
>+>-+..+-+++-+.
++>-.>>+-+++-+.

Đến đây thì mình khá cạn lời rồi, vì brainfuck này không phải là nạp vào là ra mà phải lag tí não nữa mới được, chắc là cũng đọc theo chiều dọc giống như cái ảnh kia?

1
2
3
4
5
6
x = "+++>-<+-.-+.+-+++++--+---+<.-++>++--+--.+.--++++.--+--<+>--+++++--+---+-.-.++++--..-.+--.<++<+--<.->+--<.++<+.--+-++--..++<++--+.++.->.++<++--.-+++-+.[>-.+--+-+++-+.>+]-+--+-+++-+.++>-+--+-+++-+.>+>-+..+-+++-+.++>-.>>+-+++-+."
for j in range(15):
    for i in range(j, len(x), 15):
        print(x[i], end = "")

# ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.++++++.-----------.++++++.<------------.>+++++.<------.>-----..++.+++++.-------.--------.<-.>+++++++++++++++++++++++.<.>----.+++++++.--.---------------.<.>++++++++++.<.........

yah got it, giờ chỉ cần chuyển nó qua sha1 rồi nộp flag thôi :3 (và đến cuối cùng thì cái mã morse trong file wav ban đầu chẳng để làm gì :3)

flag: CSTV_2023_{1d7e89b852c2ef64283df637d0a36f16c3417f18}