Skip to main content

Command Palette

Search for a command to run...

QUESTCONCTF 2023 : Pirate Theme

| write by Ar3mus

Updated
4 min read
QUESTCONCTF 2023 : Pirate Theme
A
Cyber Operations Specialist

สวัสดีครับสำหรับคนที่เคยอ่าน 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
⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄   ⠉⠉⠁⠀⠀⠀⠀
⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀
⠀⠀  ⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋
⠀⠀⠀  ⠀⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠁
⠀⠀   ⠀⠀⠀⠀⠉⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀  ⠀⠀⠉⠙⠛⠛⠻⠿⠿⠟⠛⠛⠋⠉⠀⠀⠀⠀⠀