SECPlayground HALF YEAR CTF Event 2024
แนะนำกด Toggle theme เป็นสีดำนะครับ
สวัสดีคร้าบทุกคน สำหรับปีนี้ผมก็ได้แอบๆ แวะไปลองโจทย์ CTF ในชื่องาน HALF YEAR CTF Event 2024 จัดโดย SECPlayground ที่เป็น Platform การเรียนรู้ และ Hand-on จาก Lab จริง เกี่ยวกับ Cybersecurity ที่ดีระดับต้นๆ ของประเทศไทยเลยก็ว่าได้ครับ
flag format : forensic{}, crypto{}, web{}
Overview
สำหรับ Map ในงานนี้ก็สร้างสรรค์และเป็นเอกลักษณ์ไม่เหมือนใครเป็นปกติครับ ฟีเจอร์เด่นๆ คือ ใครทำโจทย์ได้ครบก่อน ก็จะมีผู้เล่นแสดงโชว์บน Map ครับ เปรียบเสมือนการยึดพื้นที่นั่นเอง
ที่นี้มาเข้าเนื้อหากันครับ สำหรับผมอาจจะทำโจทย์ไปไม่เยอะครับส่วนใหญ่น่าจะเป็นข้อที่ทุกคนทำได้ครับ แต่ยังไงก็ลองมาดูแนวคิดและเทคนิคในการทำโจทย์ของผมดูครับ สำหรับใครที่ทำโจทย์ได้คะแนนลำดับสูงๆ ผมก็อยากให้มาแชร์ความรู้และเทคนิคให้กันบ้างก็ดีนะครับ จะได้เป็นวิทยาทานให้กับผู้เล่นใหม่ๆ ครับ
Network Security
ในหมวดหมู่ Network Security จะมีทั้งหมด 3 ข้อ โดยเป็นโจทย์ระดับง่ายทั้งหมดครับ
Guardian Network#1
จากโจทย์ง่ายๆ เลยให้ตามหา username กับ password
pass : secplayground
จากโจทย์เราจะได้ไฟล์ .pcapng
มา สำหรับผมขั้นแรกไปเช็คก่อนว่าหลักฐานที่ได้มามี Protocol ไหนที่มีข้อมูลมากที่สุด
จากที่เห็นก็จะเป็น protocol HTTP ครับ แล้วมาดูรายละเอียดใน OSI Layer กัน
เจอข้อมูลที่หน้าสนใจแล้วก็ใช้ เครื่องมือ tshark
ดึงออกมาให้หมดได้เลย
tshark -r network_capture.pcapng -Y 'http' -T fields -e 'urlencoded-form.value' | grep login
เราได้ Credentials มาทั้งหมดแล้ว แล้วถามว่าเราจะรู้ได้ไงว่า Attacker ใช้ User คนไหนที่สามารถ Access เข้าเครื่องได้
ทำการ Filter urlencoded-form
จะได้ frame ของ index.php ที่กำลังจะ Request ใส่ Credentials เข้าไป
ถ้าลองเช็ค tcp.stream
จะเป็นว่า User pinkky จะ Response ว่า "Access Denied! Login Failed."
แต่ถ้าเป็น User admin
สรุป Flag ที่ได้คือ
forensic{admin:P@ssw0rd}
Guardian Network#2
ข้อถัดไปก็จะถามต่อว่า Attacker ใช้ CVE อะไรในการโจมตี จากที่เราวิเคราะห์มาแล้วว่า Attacker ได้ทำการเข้าสู่ระบบด้วย User admin แล้ว Dashboard ที่เห็นคือ cactiConsolePage ดังนั้น ผมเลยค้นหาว่า http.request.uri
ไป GET ไฟล์อะไรไปบ้าง
tshark -r network_capture.pcapng -Y 'http' -T fields -e 'http.request.uri' | grep cacti
ซึ่งที่สุะดุดตาก็คือ importing packages ซึ่งจากที่สืบค้นข้อมูลมา ก็เลยไปเจอช่องโหว่
PoC
Login into Cacti with an user having the “Import Templates” permission
Go to Import/Export -> Import Packages
Upload and import the
test.xml.gz
file previously generatedNotice how the PHP file will be written into the
resource
directory, accessible at http://[cacti]/resource/test.php:
ผมก็เลยลองหา test.xml.gz
ดูว่ามีมั้ย
สรุป Flag ที่ได้ก็คือ
forensic{CVE-2024-25641}
Guardian Network#3
ข้อนี้มาแปลกให้หา Flag เลย 😹 งั้นจัดไป
strings network_capture.pcapng | grep flag
forensic{FaDfa9O5ntsLJNx}
Cryptography
ต่อมาเป็นหมวดหมู่ Cryptography ครับ มีแค่ข้อเดียวเป็นโจทย์ระดับกลาง 😾
mystery
หืมมม.... หาข้อความที่ Mr. Red ทิ้งไว้ 🤔
โจทย์ให้ไฟล์ pcapng มา ใหญ่มากกกก
ขั้นแรกผมก็เช็ค Protocol เหมือนเดิม สะดุดตาสุดๆ คือ ไฟล์รูปภาพ JPEG มี Packets เยอะจัดๆ
Export object ทั้งหมดออกมาเลย
มีรูปทั้งหมด 1001 รูป OMG!?!
ดูเหมือนว่าจะต้องเปลี่ยนไฟล์ format เป็น jpg ด้วยเพราะไฟล์ที่ Export ออกมาไม่ได้ใส่นามสกุลมา
จัดไป Bash Script!!!
สวยงาม 😻 ไปกันต่อๆ จากที่เราทราบแล้วว่าเราได้ไฟล์รูปภาพมา เราก็ทำการ Stegano (Steganography) รูปภาพกันต่อเลย
exiftool work\(100\).jpg
หลังจากที่ผมลอง เช็คข้อมูล META Data รูปภาพก็เจอกับ Comment ที่สะดุดตาเหมือนการเข้ารหัส Base64
นั่นแสดงว่าทั้งหมด 1001 รูป จะต้องมี Comment Base64 ที่เป็น Flag ซ้อนอยู่ในสักรูปแน่นอน
จัดไป Bashscript!!
ใช้เวลาไป 26 sec ไม่นานเท่าไหร่ อิอิ 😹
cat result_stegano_METADATA.txt | grep flag
ดูเหมือนว่า Flag ไม่ได้อยู่ในนี้แค่รูปเดียว มีทั้งหมด 2 รูป
สองรูปนี้นี่เอง อิอิ 😼
forensic{jeuuq_5372}
Web Application Security
หมวดหมู่สุดท้ายใน Blog ของผมนะครับ 555 ผมไม่ได้ถ่ายเก็บไว้ตอนอัพโจทย์ใหม่ ขออภัยครับ เลยเขียนได้แค่ข้อเดียว เป็นโจทย์ระดับกลางครับ 😾
Hesitation
จากโจทย์ได้บอกเราว่าได้ถูกจ้างให้ไป แฮกบริษัทคู่แข่ง ซึ่งกำลังดำเนินโครงการชื่อว่า Monitor System ถ้าทำสำเร็จจะได้รางวัล แบบตึงๆ
ผมจะท่องบทนี้ไว้ในหัวเสมอเวลา ทำ Red Team ว่า "Enumeration is the KEY 🔑" 😹
อย่างแรกไปดู Source Code ก่อนเลย!!!
นั่นไง สั้นๆนิดเดียว ไปดู /assets/js/app.js
ก่อนเลยครับ
หน้าตา Code แบบนี้ Obfuscation มาแน่นอนดังนั้นใช้ Online JavaScript beautifier โล้ดดดด
ดีขึ้นเยอะ พอเรามานั่งอ่านก็ไปสะดุดตากับ function นี้
หืมม แสดงว่าต้องมีหน้า Login ได้เวลา Directory Fuzzing!!
dirsearch -u http://34.126.118.33/
_|. _ _ _ _ _ _|_ v0.4.3
(_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460
Output File: /mnt/c/Users/Ar3mu/Desktop/reports/http_34.126.118.33/__24-07-26_10-56-30.txt
Target: http://34.126.118.33/
[10:56:30] Starting:
[10:56:44] 403 - 278B - /.ht_wsr.txt
[10:56:44] 403 - 278B - /.htaccess.bak1
[10:56:44] 403 - 278B - /.htaccessBAK
[10:56:44] 403 - 278B - /.htaccess_sc
[10:56:44] 403 - 278B - /.htaccessOLD
[10:56:44] 403 - 278B - /.htaccess_extra
[10:56:44] 403 - 278B - /.htaccessOLD2
[10:56:44] 403 - 278B - /.htpasswd_test
[10:56:44] 403 - 278B - /.htaccess.orig
[10:56:44] 403 - 278B - /.htaccess.sample
[10:56:44] 403 - 278B - /.htaccess.save
[10:56:44] 403 - 278B - /.htaccess_orig
[10:56:44] 403 - 278B - /.html
[10:56:44] 403 - 278B - /.htpasswds
[10:56:44] 403 - 278B - /.httr-oauth
[10:56:44] 403 - 278B - /.htm
[10:56:46] 403 - 278B - /.php
[10:56:52] 301 - 317B - /__MACOSX -> http://34.126.118.33/__MACOSX/
[10:57:43] 301 - 322B - /administrator -> http://34.126.118.33/administrator/
[10:57:43] 200 - 240B - /administrator/
[10:57:43] 200 - 240B - /administrator/index.php
[10:57:49] 301 - 315B - /assets -> http://34.126.118.33/assets/
[10:57:49] 403 - 278B - /assets/
[10:58:25] 200 - 1KB - /Dockerfile
[10:58:30] 302 - 0B - /error.php -> /
[10:58:46] 200 - 3KB - /index.html
[10:59:21] 200 - 779B - /readme.txt
[10:59:24] 200 - 82B - /robots.txt
[10:59:28] 403 - 278B - /server-status/
[10:59:28] 403 - 278B - /server-status
[10:59:33] 200 - 182B - /start.sh
สรุปเราเจอ Path ที่เข้าได้คือ
[10:57:43] 200 - 240B - /administrator/
[10:57:43] 200 - 240B - /administrator/index.php
[10:58:25] 200 - 1KB - /Dockerfile
[10:58:46] 200 - 3KB - /index.html
[10:59:21] 200 - 779B - /readme.txt
[10:59:24] 200 - 82B - /robots.txt
[10:59:33] 200 - 182B - /start.sh
ก่อนอื่นเรามาดู robots.txt ก่อน
จากนั่นมาเช็ค Path /administrator/
อ่าวหวานเลย ลองใส่ Credential ที่เราเจอมาจาก app.js
user : admin pass : TH3_0ld_P@ssw0rd
สรุปไม่ถูก โดน Rabbit Hole ซะแล้ว
โอเคครับ ไปกันต่อมาเช็ค Path /start.sh
อ่าวมีไฟล์ bot.py ด้วย
นั่นไงเจอละ Credential ที่แท้ทรู
user : admin pass : itsme3
ครับ...
web{I3L1nD_XS5_5O_FunNy}
เรื่องนี้สอนให้รู้ว่า "Enumeration is the KEY 🔑"
Special : Forensic File Hunt
โจทย์ข้อนี้อยู่ในหมวดหมู่ Digital Forensic ครับ ผมเขียนเพิ่มมาอีกหนึ่งข้อเป็นข้อพิเศษละกันครับ เนื่องด้วยหลังงานแข่งมีพี่เฉลยมา ผมเลยไปลองทำแล้วทำได้ แต่ตอนแข่งผมโดน Rabbit Hole นานจนเสียเวลาไปเยอะครับ ส่วนโจทย์คำถามผมไม่ได้ถ่ายภาพไว้ เลยมีแค่ไฟล์มา ขออภัย ณ ที่นี้ด้วยครับ ซึ่งโจทย์ข้อนี้ถามว่าให้เราหา Flag ในไฟล์ Excel ครับ
เริ่มแรกโจทย์จะให้ไฟล์ Extension คือ .E01 ขออธิบายเพิ่มเติมในส่วนของไฟล์นี้จะได้มาจากการเก็บหลักฐานพวก Volume Images, Disk Image, Memory และ Logical Files โดยใช้ Software ที่เรียกว่า EnCase ครับ
ref : What is .E01 File Extension? EnCase Image File Format (whatisfileextension.com)
แต่จริงๆแล้วก็มีเครื่องมือย่าง FTK Imager ก็สามารถเก็บหลักฐาน แล้วเลือก Image Type ก็ได้เช่นกันครับ
FTK Imager : Select Image Type
ref : Digital Forensics Part 1 — Evidence Acquisition | by WIRAPONG PETSHAGUN | Medium
โดยปกติถ้าเราเจอไฟล์ Disk Image Files อย่าง .E01 เราก็จะได้โปรแกรมในการวิเคราะห์ เช่น
FTK Imager
หรือไม่ก็
Autopsy
สำหรับผมเริ่มแรกเราจะใช่ FTK Imager เพราะ เราจะไม่ได้ไปวิเคราะห์ละเอียดมาก เราจะเข้าไปเช็คก่อนว่าไฟล์หลักฐานที่ได้มา มีข้อมูลอะไรบ้างในเบื้องต้น
Add Evidence Item
Select Source
Select File
ให้เราไปที่ Basic data partition(3) > NONAME [NTFS] ในส่วนนี้เราจะพบว่าเป็น Storage ประเภท NTFS (New Technology File System) ที่เราใช้กันในระบบปฏิบัติการอย่าง Window ครับ
มาต่อกันครับ จากนั้น Navigation ไปที่ Path [root] > Users > secplayground > Desktop
ก็จะเจอกับไฟล์ flag.xlsx ทำการ Export Files โล้ดดดด
ธงชาติไทยจะมิให้ใครย่ำยี 🥲
สรุปอันนี้คือ Flag หลอกนะครับ
โอเคครับ หลังจากที่ได้เฉลยจากพี่ๆ ก็เลยได้คำตอบว่า จะมีไฟล์ Excel อยู่ในไฟล์ zip จากภาพแมว
ใช่ครับจะเห็นว่าเจอ ไฟล์ zip ชื่อว่า catdata.zip ครับ
กลับไปที่ Workspace ของผมดีกว่า อิอิ
เหมือนว่าไฟล์ zip จะเข้ารหัสด้วยนะครับงั้น ต้องเป็นหน้าที่พี่ John The Ripper จัดการ!!!
ใช้เวลาไปทั้งหมด 1m 3s ไฟล์เยอะจัด
528 ไฟล์ OMG!?! สาวกทาสแมวชัดๆ 😼
จากนั้นเราก็ทำการ Stegano ภาพซึ่งเราจะใช้เครื่องมืออย่าง Binwalk เพื่อ Extract ไฟล์ที่ฝั่งอยู่ใน Firmware Images ในระดับ Binary Files ครับ
ref : Digital Forensics Examiner: September 2019 (dforensic.blogspot.com)
binwalk -e * > test.txt
เราก็จะได้ ไฟล์รูปภาพที่ Extract ข้อมูลแยกเป็นโฟลเดอร์ออกมา
สรุปก็คือ ไปเจอที่รูป cat8.jpg
หืม... เหมือน Encode ด้วย Hex อยู่นะช่องแรก
ทำการ Decode ด้วย Hex > Base64 ก็จะได้ Flag
forensic{Kuch1ng}
ก็จบกันไปสำหรับ Write up SECPlayground HALF YEAR CTF Event 2024 ครับ หวังว่าผู้เข้าแข่งขัน คนอื่นๆ จะมาเขียนกันเยอะๆ นะครับ วงการ Cybersecurity จะพัฒนากันต่อไปได้ไกล ถ้าพวกเราหันมาเข้าร่วม Comunity และ Share ประสบการณ์กันครับ เนื้อสิ่งอื่นใดจากแข่งขัน คือ Collaboration and Knowledge Sharing ครับ ขอบคุณที่เข้ามาอ่านจนจบนะครับ
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣤⣤⣤⣤⣤⣤⣤⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀
⢀⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠛⠻⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⡿⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣤⣴⣿⣿⣿⣿⣿⡿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠋ ⢀⣀⠀⠀⠀⠀⠀⠀
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠁⠀⠀ ⣴⣿⣿⣿⣦⠀⠀⠀
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣀⠀⠀⠀ ⢿⣿⣿⣿⡟ Ar3mus@ SECPlayground HALF YEAR CTF Event 2024
⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄ ⠉⠉⠁⠀⠀⠀⠀
⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀
⠀⠀ ⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋
⠀⠀⠀ ⠀⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠁
⠀⠀ ⠀⠀⠀⠀⠉⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠉⠙⠛⠛⠻⠿⠿⠟⠛⠛⠋⠉⠀⠀⠀⠀⠀
Subscribe to my newsletter
Read articles from Ar3mus directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Ar3mus
Ar3mus
Student at NKRAFA who interesting about Cyber Security and Head of NKRAFA Cyber Club 2024