[Write-up] Volgmer Thailand CTF 2019

สำหรับบทความในรอบนี้ทางเราจะมาพูดถึงกันต่อในโจทย์ข้อ Volgmer ซึ่งเป็นโจทย์ที่เราทำได้เป็นทีมแรก และอาจจะเป็นทีมเดียวที่ทำได้ในการแข่งขัน Thailand CTF 2019 ครั้งนี้ โจทย์ดูเหมือนไม่ยาก แต่คิดว่าหลายคนตอนนี้อาจกำลังสงสัยว่าโจทย์ข้อนี้มันแก้ยังไง วันนี้ทาง MAYASEVEN จะมาแถลงไข เกี่ยวกับวิธีแก้โจทย์ข้อ Volgmer

มาเริ่มกันเลย

 

เริ่มต้นโจทย์นี้ให้ไฟล์ชื่อว่า volgmer-ioc.json มา พอเปิดเข้าไปดูจะเห็นได้ว่าเป็นไฟล์ JSON ที่มีข้อมูลอะไรซักอย่างอยู่ ?

มีหลายเครื่องมือที่ช่วยให้อ่านไฟล์ JSON ได้ง่ายขึ้น ยกตัวอย่างเช่น plug-in Beautify ใน Visual Studio Code ที่ช่วยจัด format ของ code ทำให้ code ของเราอยู่ในรูปแบบที่เป็นระเบียบ สวยงามขึ้น เหมาะสำหรับคนที่เขียนโค้ดแล้วชอบลืมเรื่อง format การเว้นวรรค หรือการขึ้นบรรทัดใหม่ แล้วพาให้เพื่อน ๆ ร่วมงานปวดหัวกันไปตาม ๆ กับโค้ดของเรา เจ้าตัวนี้ช่วยได้ดีเลยครับ ?

แต่ว่าเครื่องมือที่ทางเราได้ใช้ในครั้งนี้นอกจากจะใช้ Beautify แล้วยังใช้เครื่องมืออีกตัวนึง ชื่อว่า JSON Tree View ซึ่งเป็น plug-in เสริมของโปรแกรม Visual Studio Code ซึ่งเจ้าตัวนี้ทำให้เราสามารถดูไฟล์ JSON แบบโครงสร้างแบบต้นไม้?เพื่อให้สามารถมองภาพรวมของไฟล์นี้ได้ง่ายขึ้นนั่นเอง

 

 

จะเห็นได้ว่าไฟล์นี้มี attribute info ที่บอกว่า “OSINT – HIDDEN COBRA \u2013 North Korean Trojan: Volgmer” ประกอบกับชื่อไฟล์ “volgmer-ioc” ทำให้สามารถพอคาดเดาได้ว่าไฟล์นี้เป็น IoC (Indicator of compromise) ของ malware ที่ชื่อว่า “Volgmer” ซึ่งเป็น trojan ที่มาจากเกาหลีเหนือที่เคยเป็นข่าวตอนช่วงปี 2017

ซึ่งเจ้าตัว IoC (Indicator of compromise) เนี่ยเป็นข้อมูลที่ใช้ระบุถึงอัตลักษณ์ของ malware ซึ่งอาจจะเป็นข้อมูลจำพวก hash ของเจ้าตัว malware เอง หรือ ip address และ port ที่เจ้าตัว malware นี้ได้ติดต่อกับ C&C servers (Command and Control Servers) เพื่อเอาไปใช้หลีกเลี่ยงการตรวจจับเจ้าตัว malwareในอนาคต

 

 

ต่อไปจะลองดูเนื้อหาไฟล์ว่ามีอะไรน่าสนใจที่พอจะเป็นข้อมูลที่นำพาเราไปสู่ flag ได้บ้าง เมื่อได้มองแบบผ่าน ๆ แล้วเจอจุดหนึ่งที่น่าสนใจ ซึ่งระบุไว้ว่าเป็นไฟล์ “MAR-10135536-D_WHITE_S508C.PDF” และตามมาด้วยค่าแปลก ๆ ซึ่งคาดว่าจะเป็น base64 ของไฟล์ดังกล่าว

 

 

จึงลองใช้เครื่องมือออนไลน์ เพื่อแปลงค่า base64 ดังกล่าวให้เป็นไฟล์ pdf

 

 

นอกจากนั้นทางเรายังได้ลองนำชื่อไฟล์ไปค้นหาบน Google ด้วย ผลปรากฏว่า มีไฟล์ที่มีชื่อเหมือนที่ปรากฏใน IoC เป๊ะ ๆ เลย?

 

 

ดังนั้นจึงได้ลองนำไฟล์ทั้งสองมาใช้ md5 มาตรวจสอบเพื่อดูไฟล์ทั้งสองนี้มันเหมือนกันหรือไม่ ผลที่ได้คือ ตรงกัน เป๊ะ ดังนั้นไฟล์นี้จึงไม่น่าจะมี flag ที่เราตามหาอยู่ ?

 

 

ดังนั้นก็ต้องกลับไปเริ่มต้นใหม่ (พูดเหมือนทำไปไกลละ?)กลับไปดูที่ไฟล์ JSON อีกที จะเห็นว่าในส่วนที่ชื่อว่า Attribute มีข้อมูลตั้ง 161 entry แน่ะ คิดว่า flag น่าจะอยู่แถวนี้แล้วล่ะ

 

 

พอได้ไปลองดูข้อมูลของ Attribute จะเห็นได้ว่ามีค่าเป็น object ย่อย ๆ อยู่ข้างในซึ่งที่น่าสนใจคือค่าของ “category” “value”  และ “type” ของแต่ละ object

 

 

ต่อมาจึงได้ลองเขียน Script อย่างง่ายในภาษา Python?มาเพื่อวิเคราะห์ว่ามีข้อมูล “category” ทั้งหมดกี่รูปแบบ

 

 

แล้วผลที่ได้ก็คือ 3 แบบนั่นเอง โดยในแต่ละ category จะมีค่าใน value รูปแบบที่แตกต่างกันไป ยกตัวอย่างเช่น External Analysis จะเป็นจำพวก ข้อมูลประกอบอื่นๆ คอมเม้น หรือ ไฟล์แนบ ดังเช่นไฟล์ PDF ก่อนหน้านี้ สำหรับ Network activity จะเป็น หมายเลข IP ซึ่งคาดว่าน่าจะเป็น Host ที่ถูก Volgmer โจมตี หรืออาจจะเป็น C&C server ของตัว Volgmer เอง และ Payload delivery เป็นค่า hash ประเภทต่าง ๆ

เมื่อลองวิเคราะห์ value ของแต่ละ category, External analysis มีแต่ลิงค์ คอมเม้น และ ไฟล์ ไม่มีอะไรน่าสนใจ, Network activity อันนี้มีสิ่งที่น่าสนใจ แต่เข้าไปซี้ซั้วกลัวจะโดน Volgmer เล่นเอา ที่บ้านไม่ให้เข้า IP แปลกหน้า?, Payload delivery มีแต่ hash พอมาถึงจุดนี้ Spidey-sense ?ก็ทำงานแล้วทำให้สัมผัสได้ถึงรูปแบบอันซับซ้อนที่ซ่อนอยู่ในรูปแบบพวกนี้ ซึ่งนั่นก็คือ ตัน?‍♂️

 

 

แต่เราต้อง TRY HARDER ไปหาข้อมูลต่อใน Internet เกี่ยวกับเจ้า Volgmer นี่แหละ แล้วก็ไปเจอลิงค์นึงของทาง us-cert (https://www.us-cert.gov/ncas/alerts/TA17-318B) ซึ่งเป็นข้อมูลเกี่ยวกับเจ้า Volgmer นี่แหละแล้วก็มีไฟล์ IoC แนบมาด้วย !!!เมื่อเห็นแล้วจึงรีบโหลดไฟล์มาดู ไฟล์ที่ได้เป็น IoC ฉบับจริง ที่ไม่มีการแก้ไขใส่ flag ใด ๆ มาดังนั้นจึงคิดว่าหากนำทั้งสองไฟล์นี้มาเปรียบเทียบกันอาจจะได้อะไรมาก็เป็นได้

 

 

ต่อไปจะทำการเขียนสคริปเพื่อนำIP ของทั้งสองไฟล์มาเทียบกัน โดยนำ IP ของ IoC ต้นฉบับมาแยกใส่ไว้ในไฟล์ iplist.txt โดยในโค้ดบรรทัด ที่ 5 และ 8 จะทำการอ่านไฟล์ทั้งสองเข้ามา และสำหรับบรรทัดที่ 12 และ 13 จะทำการแยกข้อมูลตาม category และดึงค่า IP ของ IoC จากไฟล์โจทย์มาใส่ในลิสตามลำดับ แล้วแยกหา IP ที่ไม่ตรงกันที่บรรทัด 17-19 และหลังจากที่ทำการรันโปรแกรมเลขที่ออกก็คือ……?? 209.97.130.62 ??

แล้วเอาไปใส่ตาม format ของ flag ก็จะได้คำตอบ THCTF{209.97.130.62} ซึ่งเป็นคำตอบที่… ผิดนั่นเอง❌ เมื่อได้ ip มาเราก็ต้องเข้าไปหาอย่างไม่รอรี

******เนื่องจาก write up นี้เขียนหลังจากงานจบทำให้ server ตัวจริงจึงปิดไปแล้ว *****

****** ที่เห็นต่อไปนี้เป็นของที่จำลองขึ้นมาให้เห็นถึงกระบวนการเพื่อให้ได้ Flag ซึ่งอาจจะไม่ตรงกับของจริงทั้งหมด *****

 

 

เมื่อเข้าไปแล้ว ว่างเปล่า เมื่อโดนชี้เป้ามาขนาดนี้แล้วไม่สามารถถอยหลังกลับได้อีกแล้ว

 

 

ดังนั้นจึงทำการ Scan port เพื่อเช็คว่าที่ Host นี้สามารถเข้าทางไหนได้บ้าง แล้วก็พบว่า Host นี้เปิดพอร์ตแปลก ๆ อยู่ที่ Port 8002

 

 

เมื่อเข้าไปแล้วก็พบหน้าโล่ง ๆ พร้อมช่องให้กรอก และปุ่มหนึ่งปุ่ม คิดว่านี่แหละคือเป้าหมายที่เราตามหามานาน

 

 

ปัญหาคือ เราควรใส่อะไรลงไปดี ในเมื่อเราลองใส่ค่าไปแบบสุภาพแล้วยังไม่ได้ flag มา ?

ทำให้ตอนนี้เรามีทางเลือกอยู่แค่ 4 ทาง

  1. เปลี่ยนข้อ ?
  2. ไปนอนหา flag ที่อยู่ในฝัน ?
  3. Brute force ด้วย SQL injection wordlist?
  4. ใช้ Spidey-sense?

สำหรับทางเลือกที่ 1 ไม่สมเหตุสมผลแน่นอน เพราะทำข้ออื่นไม่ได้แล้ว….?ซะเมื่อไหร่ เราต้องมีความพยายามอย่าย่อท้อ

สำหรับทางเลือกที่ 2 มีโอกาสเป็นไปได้ แต่ถ้าตื่นมาส่ง flag ไม่ทันจะแย่เอา

สำหรับทางเลือกที่ 3 สำหรับการ brute force เว็บไซต์อื่นทางเราไม่แนะนำครับ มันผิดกฎหมาย ถ้าถูกจับได้?

และทางเลือกสุดท้าย …

 

ในที่สุด เราก็ได้ flag ที่เราตามหา ซึ่ง flag ที่ปรากฏอยู่ตรงนี้ ไม่ใช่ flag ของจริงเพราะว่าตอนได้ flag มาลืมบันทึกไว้ ต้องขออภัยมา ณ ที่นี้ด้วย

Download volgmer-ioc.zip : https://drive.google.com/file/d/1bFWxu0SQ-10b_E1tAK0uiGIf50pcG5NH/view?usp=sharing

MD5 (volgmer-ioc.zip) = c53f89cc1450f8f4e2627d11ebeb809b

Previous Post
[Write-up] Bypassing Custom Stack Canary {TCSD CTF}
Next Post
eLearnSecurity Certified eXploit Developer (eCXD) Review

Related Posts

No results found.

Leave a Reply

Your email address will not be published. Required fields are marked *

Fill out this field
Fill out this field
Please enter a valid email address.
You need to agree with the terms to proceed