รอบคัดเลือก ระดับ Senior, ใน repo นี้เป็นโจทย์ที่ทีมเราหา flag ได้ภายในเวลาแข่งขัน
Members
Challenges
- Web Application
- Pickle
- Hidden Attack
- Nginx Secmis
- Digital Forensic
- Covered Track
- Nebula
- Pickle
- 3rd Tier Assignment
- Reverse Engineering & Pwnable
- Read
- Reverse CTF
- CryptoLockerMe
- Programming
- Decrypt message
- C#
- Northwind4SQLServer
- enc_dir
- Network Security
- The puzzle
- Secret Message
- MitM
- xfil
- SOMEWHERE
- Mobile Security
- hello flutter
- Show Me The Flag
- mflag
- hflag
- WidgProx
- Cryptography
- ZeroRight
- Lineman
Digital Forensic
Digital Forensic > Nebula
.
└── Nebula.mp4Flag found by: @c0ffeeOverdose
เป็นไฟล์ video ที่ไม่มีเบาะแสอะไรเลย

ไม่รู้ทำไม ลองคิดว่ามันจะมี text ที่เป็น flag อยู่ด้ายในหรือเปล่า ?
และใช่ เมื่อค้นหาด้วย flag pattern ก็พบเข้ากับ flag ที่อยู่ท้ายไฟล์ Nebula.mp4

Programming
Programming > Decrypt message
.
└── Decrypt message
├── encrypt.py
├── key.txt
└── secret.txtเราได้ file มา 3 ไฟล์ จากการอ่านไฟล์เราก็ทราบว่า
encrypt.pyใช้เข้ารหัสkey.txtใช้เก็บ keysecret.txtใช้เก็บข้อความที่ถูกเข้ารหัส

แต่ความแปลกคือ key.txt ดูเหมือนจะไม่ได้มี key เดียวนะสิ
ดังนั้นเราจึงสรุปสิ่งที่เราจะทำออกมาได้ 2 อย่างคือ
- เขียน decrypt.py
- หา key ที่ถูกต้อง
from cryptography.fernet import Fernet
fm = open("flag.txt", "w")
fs = open("secret.txt", "rb")
fk = open("key.txt", "r")
secret = fs.read()
for key in fk.read().split("\n"):
try:
cipher_suite = Fernet(key.encode())
decrypted_message = cipher_suite.decrypt(secret)
break
except:
pass
fm.write(decrypted_message.decode())
fm.close()
fs.close()
fk.close()python3 decrypt.pyแล้ว flag จะอยู้ในไฟล์ flag.txt

Network Security
Network Security > The puzzle
.
└── The puzzle.pcapngFlag found by: @c0ffeeOverdose
ไฟล์ที่เราได้มาคือไฟล์ pcapng เป็นไฟล์ packet capture สามารถเปิดได้โดยใช้ Wireshark

เมื่อเราเปิดขึ้นมาก็พบกับ HTTP Protocol เป็น packet แรก ที่บอกถึงว่ามีการ upload ไฟล์บางอย่าง งานนี้เดาไม่ยากเลยว่าต้องทำอะไร
เราจึงทำการ export HTTP ออกมาดู
File > Export Objects > HTTP

และสิ่งที่เราได้มาก็คือไฟล์ภาพ ที่เป็น QR Code

เราก็ได้ทำการ scan ดูแล้วพบว่าไม่สามารถสแกนได้ ด้วยสาเหตุง่ายๆคือ QR Code มีรูปแบบไม่ถูกต้อง ในที่นี้คือขาด Position ไป 2 ที่
เราจึงจะทำการแก้ไขภาพโดยการตัดต่อภาพ เราจะใช้โปรแกรมอะไรก็ได้ (แต่ตอนแข่ง @c0ffeeOverdose เขาใช้ Paint กับรูปตัดแปะง่ายๆ ไม่ปรับสี)
ในที่นี้เราจะยกตัวอย่างโดยใช้ GIMP
- Colors > Saturation = 0
- Colors > Threshold = Auto (160, 255)

เมื่อเราทำการ export ออกมาแล้ว เราก็ทำการนำมือถือมา scan QR Code ก็จะได้เป็น link https://bit.ly/ctt23 เมื่อเข้าไปแล้วจะถูก redirect ไปที่ https://shelldo.000webhostapp.com/flag.txt อีกที

Network Security > Secret Message
.
└── TheSecretMessage.pcapไฟล์ที่เราได้มาคือไฟล์ pcap เป็นไฟล์ packet capture สามารถเปิดได้โดยใช้ Wireshark
เมื่อเราเปิด เราจะเห็นว่ามี packet ไม่กี่อัน และพบกับ HTTP จึงไม่รอช้าที่จะ export HTTP ออกมาดู
File > Export Objects > HTTP

เราได้ไฟล์ upload.php มาสองไฟล์ และมีไฟล์หนึ่งที่มีความน่าสนใจ เพราะ HTTP ได้บอกว่ามันคือ zip ไฟล์ และเราจึงดึงเอา data มาเขียนเป็น zip file

จากนั้นเราก็ทำการ extract ไฟล์ออกมา และมันซ้อนกัน เราจึง extract ไปเรื่อยๆจนได้ flag.txt

เราได้ text ชุดหนึ่งมา และ pattern นี้ทำให้นึกถึง Base64 แต่มันไม่ใช่เพราะตัว padding มันดันมาอยู่ด้านหน้า จึงเดาๆได้ว่ามันน่าจะเรียงย้อนกลับ เราจึงจับโยนใส่ CyberChef
- Reverse
- From Base64
และเราก็ได้ flag

Network Security > xfil
.
└── xfil
└── xfil.pcapngไฟล์ที่เราได้มาคือไฟล์ pcapng เป็นไฟล์ packet capture สามารถเปิดได้โดยใช้ Wireshark

จากภาพเราจะสังเกตุได้ว่า มี dns query จำนวนมากแต่ server ตอบกลับว่า ไม่มีชื่อดังกล่าว
เมื่อเราสังเกตุจะพบว่า subdomain มีความยาวเท่ากันทุกการ query ยกเว้นครั้งสุดท้าย และชื่อ subdomain นั้นเป็นรูปแบบเลขฐาน 16
เราก็คิดว่าพอเอา data (subdomain) ดังกล่าวมาต่อกัน น่าจะเป็นไฟล์
เราจึงนำ 2 bytes แรกไปค้นหาใน List of file signatures และก็พบว่า มันคือประเภทไฟล์ jpeg
ถึงจุดนี้แล้วไม่ต้องสงสัยแล้วว่ามันคืออะไรนอกจากว่ามันจะคือ ไฟล์รูปภาพ
เราจึงดึง query name เฉพาะที่ client ส่ง ออกมาจากไฟล์ pcap และในไฟล์ pcap นี้ไม่มี packet อื่นที่ไม่เกี่ยวข้องอยู่ เลยไม่จำเป็นต้อง filter อะไรมาก
tshark -r xfil.pcapng -T fields -e dns.qry.name -Y 'ip.src == 172.16.67.130'
ลบ domain name ออก แล้วนำมาต่อกันแล้วเขียนเป็นไฟล์
with open('data.jpeg', 'ab') as f:
try:
while True:
f.write(bytes.fromhex(input().replace('.totallynotmalicious.xyz', '')))
except EOFError:
f.close()tshark -r xfil.pcapng -T fields -e dns.qry.name -Y 'ip.src == 172.16.67.130' | python3 script.pyและ flag ที่เราตามหาก็จะอยู่ในภาพ data.jpeg

Network Security > SOMEWHERE
.
└── SOMEWHERE.pcapngไฟล์ที่เราได้มาคือไฟล์ pcapng เป็นไฟล์ packet capture สามารถเปิดได้โดยใช้ Wireshark

จากที่เราเห็น จะเป็น packet ปะปนกันไปหมด พอถึงจุดนี้ไม่รู้ทำไม เลยลองไป export HTTP ออกมาดู
File > Export Objects > HTTP

แน่นอน เราไม่รอช้าที่จะ save มันออกมาดู และเราก็ได้พบกับ flag ที่อยู่ใน favicon.png

Cryptography
Cryptography > ZeroRight
.
└── ZeroRight.txtเราได้มาเป็น file txt ตัวหนึ่งด้านในเป็น string ที่มีแค่ 0 และ 1

เราเดาว่ามันต้องเป็น text ที่ถูกเข้ารหัสมาเป็น binary แน่ๆ
แต่ปัญหาคือโดนเข้ารหัสอะไรมาบ้างละ ?
ด้วยความขี้เกียจเราจึงจับโยนเข้า CyberChef แล้วใช้เวทมนต์ในการถอดรหัส (แนะนำให้ใช้ Google Chrome)
- Magic with Intensive mode and Depth default (3)
จากนั้นทำการค้นหาทั้งหน้าเว็บด้วยด้วย flag pattern ของงานนี้ CTT23

Cryptography > Lineman
.
└── Lineman.pngFlag found by: @c0ffeeOverdose
เราได้รูปๆหนึ่งมา ไม่รู้ว่ามันคืออะไร แต่รู้สึกคุ้นๆ เหมือนเคยเห็นที่ไหนมาก่อน

ลอง Google len


เลื่อนๆ ไป เหมือนจะเจอรูปที่คล้ายๆ กัน

ลองกด Search image with Google

พอเลื่อนๆ ไป เราก็จะเจอคำประมาณ pigpen, Pigpen Cipher

Hm มันคืออะไร! พอเราลองไป Search ดู

เหมือนจะมาถูกทาง งั้นลอง Search pigpen cipher online decoder เราก็จะเจอเว็บ สำหรับ decode แล้วเราลอง กดตามภาพที่ได้

นี้มันใช่ ใช่แน่ๆ แต่ Flags จะอยู่ในรูป CTT23{Flags} เพราะงั้น Flags ก็จะเป็น CTT23{ILOVENCSA} ง่ายใช่ไหมละ 😏😏😏 (text & emoji by c0ffeeOverdose)
