QUESTCONCTF 2023 : Pirate Theme
| write by Ar3mus


สวัสดีครับสำหรับคนที่เคยอ่าน blog ผมใน medium ตอนนี้ผมจะมาลองเขียนใน hashnode ดูครับ สำหรับอันนี้เป็นงานแข่ง QUESTCONCTF 2023 ซึ่งมาในธีมโจรสลัด โจทย์ค่อนข้างสนุกครับเพราะมีการใส่เนื้อเรื่องเข้าไปในโจทย์ทำให้มีความอินไปกับมัน555 จะเป็นยังไงเชิญรับชมครับ (เปิด sound ไปด้วยครับเพิ่มเพิ่มอรรถรส555)
Medium : gunyakit – Medium
flag format : QUESTCON{C2s3_s3ns1T1v3_F1Ag}
Web
Pirate's Hidden Treasure

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

Ar3mus : หลังจากที่เรา เข้าถึงเว็บไซต์ก็จะพบว่าเราต้องใช้ เบราว์เซอร์โจรสลัด

Ar3mus : จากนั้นเราใช้เครื่องมือ Burpsuite ทำการดัก Request จะเห็นว่าส่วนที่น่าสงสัยใน HTTP Header นั้นคือ Cookie: user=barbossa จากโจทย์ได้กล่าวว่าเราต้องใช้ เบราว์เซอร์โจรสลัด ซึ่งในส่วนของ User-Agent สามารถบ่งบอกถึงเว็บไซต์ที่เราทำการ Request อยู่ได้

Ar3mus : ทำการเปลี่ยน Value ใน HTTP Header โดย User-Agent: pirate

Ar3mus : เราจะพบว่า Response กลับมาว่า เราต้องมาจากเรือแบล็คเพิร์ล

Ar3mus : เราลองเพิ่ม referer: Black Perl header

Ar3mus : เราจะพบว่า Response กลับมาว่า พิสูจน์ตัวตนของคุณเพื่อเข้าถึงสมบัติ! จากโจทย์ได้กล่าวว่า

Ar3mus : นั้นหมายความว่า กัปตันแจ็คสแปร์โรว์ เท่านั้นที่สามารถเข้าถึงสมบัติได้

Ar3mus : ทำการเปลี่ยน Value ใน HTTP Header โดย Cookie: user=Jack Sparrow
Ar3mus : สรุปเเล้ว Request Header จะเป็น
GET / HTTP/1.1
Host: questcon-pirate-treasure.chals.io
Cookie: user=jack sparrow
Cache-Control: max-age=0
Sec-Ch-Ua: "Chromium";v="103", ".Not/A)Brand";v="99"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: pirate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close
Referer: Black Perl

Ar3mus : You got the flag!!
QUESTCON{Thr33_k33p_a_s3cr3t_if_2_of_th3m_ar3_dead}
Cursed Treasure

Ar3mus : กัปตันบาร์บอสซ่า เจ้าเล่ห์และมีไหวพริบ ถือสมบัติต้องคำสาปให้ห่างจากมือของ แจ็คสแปร์โรว์ คุณสามารถเปิดเผยธงที่ซ่อนอยู่และอ้างสิทธิ์ในความร่ำรวยที่ถูกสาปได้หรือไม่?

Ar3mus : ทำการเช็ค source code "CTRL+ U "

Ar3mus : เมื่อเราเข้ามาเช็ค source code จะเห็นว่ามีส่วนลองลิ้งค์ maps.php ที่มีการ query id
ซึ่งเราสามารถใช้เทคนิคการโจมตี Insecure Direct Object Reference (IDOR)
<div class="ship">
<a href="maps.php?id=e25388fde8290dc286a6164fa2d97e551b53498dcbf7bc378eb1f178" class="card card1">MAP 1</a>
<a href="maps.php?id=58b2aaa0bfae7acc021b3260e941117b529b2e69de878fd7d45c61a9" class="card card2">MAP 2</a>
<a href="maps.php?id=271f93f45e9b4067327ed5c8cd30a034730aaace4382803c3e1d6c2f" class="card card3">MAP 3</a>
</div>
อ้างอิงจาก : https://medium.com/@tumnarawit/webgoat-insecure-direct-object-reference-2cb7e3cde332
Insecure Direct Object Reference เป็นช่องโหว่ที่อยู่ในกลุ่ม broken access control ซึ่งช่องโหว่นี้เป็นความผิดพลาดในการทำ Authorization (การตรวจสอบสิทธ์การเข้าถึง) ซึ่งเป็นช่องโหว่ที่เกี่ยวกับการเข้าถึงไฟล์ที่เราไม่มีสิทธิ์ในการเข้าถึงได้นั่นเอง โดยส่วนมากจะพบได้ที่ http parameter เป็นส่วนใหญ่ เช่น example.com/profile?id=1 ถ้าเราลองแก้ id=1 เป็นเลขอื่นแล้วเข้าถึงโปรไฟล์ผู้อื่นได้นั่นคือเว็บนั้นมีช่องโหว่ Insecure Direct Object Reference นั่นเอง

Ar3mus : จากนั้นเราลอง เช็ค hash โดยใช้
CrackStation - Online Password Hash Cracking
Hash Type Result
e25388fde8290dc286a6164fa2d97e551b53498dcbf7bc378eb1f178 sha224 1
58b2aaa0bfae7acc021b3260e941117b529b2e69de878fd7d45c61a9 sha224 2
271f93f45e9b4067327ed5c8cd30a034730aaace4382803c3e1d6c2f sha224 4
Ar3mus : ซึ่งจะเห็นว่าสามารถ crack hash ได้โดยผลลัพธ์ที่ได้เราสังเกตเห็นว่าเส้นทางไป map 3 หายไป

Ar3mus : ให้เราทำการเข้ารหัสเลข 3 ด้วย SHA224 - Online Tools (emn178.github.io)

Ar3mus : จากนั้นใช้ Burpsuite เเล้วเปลี่ยนค่าหลัง query id

Ar3mus : เราจะพบว่า Response กลับมา ซึ่งเราต้องทำการยืนยันตัวตน จากโจทย์ได้กล่าวว่า

Ar3mus : นั่นแสดงว่า Username คือ "Barbossa"

Ar3mus : You got the flag!!
QUESTCON{Th3_Pir4t3s_0f_Th3_Car1bb34n_Arr_Th3_B3st!}
Web Explorer's Journey

Ar3mus : โอ้เพื่อน! รหัสหนึ่งขวด! กัปตันแจ็ค สแปร์โรว์ได้ซ่อนธงโจรสลัดของเขาไว้เป็นความลับโดยใช้รหัสจาวาสคริปต์โบราณ มันเป็นหน้าที่ของคุณที่จะต้องถอดรหัสรหัสและค้นพบสมบัติที่ซ่อนอยู่ใช่ไหม?

Ar3mus : ทำการ enum ข้อมูลเบื้องต้น โดยเช็ค source code


let flag = "flag{Test_Flag}";
let encryptedFlag = "";
function encodeFlag() {
for (let i = 0; i < flag.length; i++) {
encryptedFlag += flag.charCodeAt(i);
}
}
encodeFlag();
console.log("Encrypted Flag:", encryptedFlag);
Ar3mus : โดยผมให้ chatGPT ในการแปลง code ซึ่งคำตอบที่ได้คือ



Ar3mus : นำ encryptFlag จากโจทย์ไปใส่

Ar3mus : You got the flag!!
QUESTCON{W3B_3XPL0R3R_1S_4W3S0M3}
Stego
Mystery

Ar3mus : ที่ซ่อนอยู่ภายในภาพนี้มีข้อความที่ปกปิดรอการถูกเปิดเผย กุญแจสำคัญในการไขปริศนาอยู่ที่หัวใจของธีมของเรา คุณสามารถค้นพบสมบัติที่ซ่อนอยู่โดยไม่ต้องใช้รหัสผ่านได้หรือไม่?
Ar3mus : เริ่มแรกเราจะได้ไฟล์รูปpirate.jpg มา

steghide extract -sf pirate.jpg

Ar3mus : โดยเราจะใช้เครื่องมือ steghide โดยจากโจทย์ บอกว่า
"Can you discover the hidden treasure without a password?"
ทำให้เรารู้ว่าไม่ต้องใส่ passphrase จากนั้นเราจะได้รูปที่ซ้อนอยู่

exiftool mystery

Ar3mus : โดยเราจะพบว่าตรง comment Image Unique ID มีข้อความที่เหมือนเข้ารหัสเป็น base64 (ข้อสังเกตุคือมี "=" ด้านหลังข้อความ)

Ar3mus : You got the flag!!
QUESTCON{My5t3ry_1s_4w3s0me!}
Mystery 2.0

Ar3mus : ลึกลับอีกเเล้ว! คำใบ้
L - Lord Cutler Beckett S - Swann, Elizabeth B - Bootstrap Bill Turner
ถ้าลองเอาตัวอักษรตัวแรกมารวมกันจะได้ LSB ซึ่งนั้นก็คือ LSB-Steganography เป็นเทคนิคการปกปิดข้อความภายในรูปภาพโดยแทนที่รูปภาพที่มีนัยสำคัญน้อยที่สุดด้วยบิตของข้อความที่จะซ่อน
อ้างอิง : Hide Secret Message Inside an Image Using LSB-Steganography | Cybrary
Ar3mus : เริ่มแรกเราจะได้ไฟล์รูปanother_mystery.png มา

sudo gem install zsteg
zsteg another_mystery.png

Ar3mus : You got the flag!!
QUESTCON{P1raT3s_Ar3_M7s!3rY}
Forensic
Island of Hidden Bounty

Ar3mus : เกาะแห่งค่าหัวที่ซ่อนอยู่
"ในอาณาจักรดิจิทัลที่มีความลึกลับซ่อนอยู่
รูปภาพปกปิดสิ่งที่คุณไม่สามารถเยาะเย้ยได้
ท่องเว็บ ค้นหาเบาะแสที่จะอ้างอิง
จงคลี่คลายธงที่ซ่อนอยู่ในที่โล่ง"
Ar3mus : เริ่มแรกเราจะได้ไฟล์รูปblackperl.jpg มา

strings blackperl.jpg | tail

Ar3mus : พอผมลอง strings ดูพบว่าเจอลิ้งค์ที่น่าสงสัย


Ar3mus : ลอง enum เว็บไซต์คร่าวๆ

Ar3mus : พบว่าเจอ ไฟล์ robots.txt

Ar3mus : You got the flag!!
QUESTCON{X_M4rk5Th3Digit4lTr34sur3}
Isla de Muerta's Secrets

Ar3mus : ความลับของอิสลา เด มูเอร์ตา ผู้บุกรุกได้ดักฟังข้อความน่าสงสัยจากตัวละครตัวร้ายในทีมของแจ็ค สแปร์โรว์ ข้อความนี้มีความลับที่ซ่อนอยู่—พิกัดที่เกี่ยวข้องกับสมบัติที่ซ่อนอยู่ของอิสลา เด มูเอร์ตา คุณสามารถค้นหาที่อยู่ของผู้บุกรุกได้หรือไม่?
Ar3mus : เริ่มแรกเราจะได้ไฟล์intruder.pcap มา



Ar3mus : การรับส่งข้อมูล HTTP เลยลองเข้าไปเช็คดู



Ar3mus : จากโจทย์เราต้องค้นหาที่อยู่ของผู้บุกรุก เราจะเห็นได้ว่าการสนทนาเกิดขึ้นระหว่างสอง IP ผู้บุกรุกเป็นหนึ่งในสองคนนี้อย่างแน่นอน

Ar3mus : You got the flag!!
QUESTCON{192.168.0.129}
Head Jack Sparrow

Ar3mus : หัวหน้าแจ็คสแปร์โรว์ กัปตันพบภาพที่ไม่รู้จัก...ช่วยเขาตรวจสอบไฟล์
Ar3mus : เริ่มแรกเราจะได้ไฟล์รูปHead_Jack_Sparrow.png มา


Ar3mus : โดยเราทำใส่เครื่องมือ HxD จะเห็นว่าข้อมูลส่วน Header เสียหายทำให้ไม่สามารถ แสดงผลรูปได้โดยให้เราเช็คจากค่า Magic bytes ไฟล์ png



Ar3mus : You got the flag!!
QUESTCON{P1RaT3s_Ha13s_PNG_F1l3}
Crypto
Riddle of the Hidden Scrolls

Ar3mus : ปริศนาแห่งคัมภีร์ที่ซ่อนอยู่ กัปตันแจ็ค สแปร์โรว์ ผู้มีชื่อเสียงในด้านไหวพริบและความรักต่อทะเล ได้ขัดขวางจดหมายที่ส่งโดยบาร์บอสซา ศัตรูตัวฉกาจของเขา



Ar3mus : You got the flag!!
QUESTCON{P1RaT3s_Ha13s_PNG_F1l3}
Sparrow's Cryptographic Treasure

Ar3mus : Jack Sparrow ได้เข้ารหัสข้อความลับโดยใช้การเข้ารหัส RSA เพื่อปกป้องตำแหน่งของสมบัติที่ซ่อนอยู่ของเขา

./RsaCtfTool.py -n 882564595536224140639625987659416029426239230804614613279163 -e 65537 --uncipher 164269225538436495685306542268826436068505673594249194166792

Ar3mus : You got the flag!!
QUESTCON{1_HaT3_RS1}
Ar3mus : ก็ประมาณนี้ครับสำหรับโจทย์งานแข่ง QUESTCONCTF 2023 : Pirate Theme ขอบคุณที่อ่านมาจนจบนะครับ :)
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣤⣤⣤⣤⣤⣤⣤⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀
⢀⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠛⠻⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⡿⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣤⣴⣿⣿⣿⣿⣿⡿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠋ ⢀⣀⠀⠀⠀⠀⠀⠀
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠁⠀⠀ ⣴⣿⣿⣿⣦⠀⠀⠀
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣀⠀⠀⠀ ⢿⣿⣿⣿⡟ Ar3mus@QUESTCONCTF 2023
⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄ ⠉⠉⠁⠀⠀⠀⠀
⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀
⠀⠀ ⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋
⠀⠀⠀ ⠀⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠁
⠀⠀ ⠀⠀⠀⠀⠉⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠉⠙⠛⠛⠻⠿⠿⠟⠛⠛⠋⠉⠀⠀⠀⠀⠀




