Thailand Cyber Top Talent 2022: Writeup

Nisaruj Rattanaaram
3 min readOct 13, 2022

--

ปีนี้โจทย์ค่อนข้างท้าทายดี ถึงทีมจะไม่เข้ารอบแต่ทีมก็ได้ความรู้ประสบการณ์กลับมาเยอะครับ และเนื่องจากสมาชิกในทีมคาใจกันหลายข้อ เลยนำโจทย์มาลองทำต่อหลังแข่งเสร็จครับ 555

post นี้เลยมาแบ่งปัน writeup ครับผม :D (ทุกข้อในนี้ทำได้หลังแข่งนะครับ)

Programming 01 (Pinpad)

โจทย์คือให้ crack hash นี้: 12d6a23f0c832e89607381fb6f703f475e5bd22a0
พร้อมให้รูปภาพ pinpad มารูปนึง

pinpad.jpg

จากรูปคงให้ Brute force โดยใช้เลขบน pad แน่ ๆ แต่เป็น hash ประเภทไหนล่ะ? ความยาวมันแปลก ๆ ลองเอาเข้า hash identifier ก็ไม่เจอ

https://hashes.com/en/tools/hash_identifier

เลยย้อนกลับมาที่รูปภาพซึ่งคิดว่าอาจจะมีคำใบ้อยู่ ลอง exiftool หน่อย

exiftool pinpad.jpg

ชัดเลย~ คำใบ้อยู่ที่ Author: Seven-Digits กับ Comment: RipeMD+SHA1 ซึ่งบอกจำนวน 7 หลักกับวิธีเข้า hash มา ตอนแรกก็งงอยู่สักพักว่ามันบวกกันยังไง ปรากฏว่าเอา digest ของ RipeMD กับ SHA1 บวกกันตรง ๆ (แบบ Arithmetic) ได้เลย สังเกตจากความยาว hash ที่ได้จะตรงกับ target พอดี!

ที่เหลือก็แค่ brute force ด้วยตัวเลข 0–9 กับ . ตรงนี้เทคนิคของใครของมันเลย

ดันทำได้หลังแข่งเลยไม่รู้ถูกมั้ย แต่น่าจะใช่แหละ
tctt2022{1.61803}

Crypto 01

ให้ QR Code มาอันนึง

challenge.png

ลอง Scan ดูจะได้ string มาชุดนึง

1337:101001001010110010000100100100001010001011101110100110101000100010000010101000101010110010010110101100101101101010001100110111101000001010000010101101001110011010110000111011101000010010110000100000101101100011010110100100101100010010000010101100101001000011001100100000101000001010001010110011001110111010000100110010001000011011011010110011101000001010110000110110101001101010010000101100101110111010100010100100001010111010100010101101001001111

1337 ยังไม่รู้คืออะไร ลองเล่น binary ข้างหลังดูก่อน แปลงเลขฐาน 2 ดูละกัน

จากนั้นแปลงตัวเลขให้เป็น bytes (ใน python ใช้ to_bytes ได้เลย) จะได้ string สวย ๆ มาอันนึง น่าจะ base64

RVBHQwMDAQVKYmFoAAZsXwBXAlkIbAYHfAAEfwBdCmgAXmMHYwQHWQZO

แต่พอลองถอดก็จะพบว่ามันไม่ออก! แต่อย่าลืมว่าข้อนี้เป็นโจทย์ crypto แสดงว่ามันอาจจะ encrypt อะไรไว้ พอคิดแบบนี้ก็เดาต่อได้ว่า 1337 ด้านหน้าอาจเป็น key ไงล่ะ

Key สั้น ๆ แบบนี้ ลองใช้ XOR ธรรมดา (key = “1337”) ก็ออกเลยครับ

tctt2022{QR_15_h1d1n9_50M37H1n9_1mP0R74n7}

Forensics 01

ให้ไฟล์ที่มีชื่อคนต่าง ๆ มาชุดนึง ตามภาพ

ลองค้นชื่อคนใน google จะเจอไฟล์ usernames.txt ใน github สร้างไว้ 2 ปีที่แล้ว ซึ่งลำดับจะตรงกับโจทย์เป๊ะ ตรงนี้สรุปได้ว่า ชื่อ/ลำดับของชื่อไม่มีผลต่อการซ่อนข้อความ

https://gist.github.com/kivox/920c271ef8dec2b33c84e1f2cc2977fc#file-usernames-txt

ลองหาต่อว่ามี bytes แปลก ๆ ซ่อนในไฟล์มั้ย ก็เจอแค่ tab / return / dash และ a — z

Frequency analysis (โปรแกรม HxD)

มาถึงตรงนี้ก็จะเหลือแค่ไม่กี่วิธีที่ทำได้แล้ว ตอนแรกก็ลองนับจำนวนคำแต่ละบรรทัดแล้วแปลงเลขฐานแต่ก็ไม่สำเร็จ พอปรึกษาพี่คนนึงเลยได้ไอเดียว่า tab กับ return อาจจะแทนด้วย 0 กับ 1 ได้

ใช้ text editor ตัดตัวที่ไม่ใช่ \t กับ \r ออก จากนั้น replace ด้วย 0 กับ 1 ตามลำดับจะได้ binary มา พอลองแปลงเป็น string จะได้ base32 ถอดอีกรอบได้ flag

tctt2022{UNIN73nd3D_3FF3c75_oF_5oM3_45Cii}

--

--

Nisaruj Rattanaaram
Nisaruj Rattanaaram

Written by Nisaruj Rattanaaram

Cybersecurity Engineer | HTB CPTS, Sec+, PenTest+, CEH | CTF Player

No responses yet