Thailand CTF 2019 – What is a URL Again (Write-up)
ในข้อนี้โจทย์มีชื่อว่า What is a URL Again สามารถดาวน์โหลดโจทย์ได้ที่ลิงค์นี้ >>> What is a URL Again.zip
ทำการแตกไฟล์ออกมา จะได้ไฟล์ memdump.mem ออกมา อันนี้ไม่ต้อง file ก็น่าจะรู้นะว่าไฟล์อะไร แฮ่! 🤣
ลอง binwalk ดูซะหน่อยว่ามีไรบ้าง … 🧐
เพียบ… 😵
ในที่นี้เราจะใช้ volatility ในการวิเคราะห์ข้อมูล เนื่องจากเป็น Volatile Data (สงสัยถามกู๋โลดนะครับ 🤣)
ขั้นแรกลองรัน Imageinfo ดูก่อนเพื่อดูข้อมูลคร่าวๆของไฟล์ memdump ไฟล์นี้$
volatility -f memdump.mem Imageinfo
ซึ่งต่อไปเราต้องระบุ Windows Profile ด้วย โดยในที่นี้จะใช้ Win7SP1x64
ต่อไปจะทำการลิสต์ process ทั้งหมดขึ้นมา โดยเราสามารถใช้ได้หลายคำสั่ง เช่น pslist, psscan, pstree, psxview ในที่นี้ใช้ psxview เนื่องจากดูเป็นระเบียบมากกว่าตัวอื่น ไม่รกดี 😅$ volatility -f memdump.mem --profile=Win7SP1x64 psxview
จากทุก Process ที่มี มีตัวที่น่าสนใจที่สุดคือ notepad.exe PID: 2892
ไหนลองเช็คซิ ว่าเปิดไฟล์อะไรอยู่หรือเปล่า 🧐
SECRET!! !!!! น่าสนใจๆ 🤔
งั้น Dump เฉพาะในส่วนของ notepad ออกมาละกัน ก่อนอื่นต้องรู้หมายเลข PID ของ Notepad ก่อน ซื่งจะอยู่ในขั้นตอนก่อนหน้าที่ได้ทำการลิสต์ process ซึ่งก็คือ 2892$ volatility -f memdump.mem --profile=Win7SP1x64 memdump -p 2892 --dump-dir .
ไฟล์ลองค้นด้วยชื่อไฟล์ที่เราเจอจากขั้นตอนก่อนหน้าซิ (SECRET!!.txt) 🧐
เอ๊ะ SeCrEtHeRe แพทเทิร์นคุ้นๆแฮะ 🤔 ซึ่งมีทั้งหมด 3 ชุดด้วยกัน
จะเห็นได้ว่ามันคือ Url escape (encode) นั่นเอง แต่จะสังเกตได้ว่า ค่าแรกสุด % จะหายไป ซึ่งก็แค่เติมลงไปให้เรียบร้อย แล้วไปทำการ unescape/decode ให้เรียบร้อย
หลังจากการทำ Url unescape เราก็จะได้ค่าเลขฐานสองมา ซึ่งจะเห็นได้ว่า 2 ชุดแรกค่าเหมือนกัน งั้นเราก็จะโฟกัสแค่ค่าแรกพอ อันหลังไม่ใช่แน่นอน (ขออนุญาตรวบรัด 🤣)
ให้เราไปทำการแปลงให้เป็น string ซึ่งจะได้ผลลัพท์ทีเป็น Base64 ออกมา c2hvcnR1cmwuYXQvaXRHVTI=
ให้ทำการ Decode Base64 จะได้เป็นลิงค์อันนึงออกมา
$ echo c2hvcnR1cmwuYXQvaXRHVTI= | base64 -d
ลองเอาไปเช็คก่อนซิว่าลิงค์จริงๆคืออะไร แอบฝังอะไรมาให้หรือเปล่า 😆
เอ๊ะ ไฟล์ Flag.zip 🤔
ให้ทำการโหลดมาโลด ว่าแต่คิดว่าจะเปิดดู Flag ได้เลยมั้ย?
แน่นอนว่า.. ไม่มีทาง!! 🤣
ลองแตกไฟล์ดูซิ
แน่นอนว่าติดรหัสผ่าน 😂
รหัสแตกไฟล์อยู่ไหนนนนนน 😭
งั้นลอง grep notepad dump file ดูเลยแล้วกัน เริ่มง่ายๆที่
pass, password, P@ssw0rd … ไม่เจอ 😢
งั้นลองใช้ Grep with regex ซิ$ strings 2892.dmp| grep -i -P "^P@.?.?.?.?.?d"
เย่! P@S5w0rDH3rE มันต้องเป็นรหัสแตกไฟล์แน่ๆ !!!
ไหนลองแตกไฟล์ซิ ใช่รหัส P@S5w0rDH3rE มั้ยนะ 🤔
ก็ยังไม่ใช่ … 😢
ไปคุ้ยใน raw เลยละกัน ลอง Search ด้วยคำที่ได้มาเมื่อกี้ดู
เอ๊ะ Magic Bytes คุ้นๆแฮะ 🤔
แน่นอนว่ามันคือ Magic Bytes ของไฟล์ JPEG ทีนี้จะรู้ได้ไงว่าตั้งแต่ตรงไหนถึงตรงไหน?
ก็เลื่อนดูไปเรื่อยๆไงล่ะ 😂
เห็นอะไรมั้ยครับ?
จะเห็นว่าเมื่อเลื่อนไปเรื่อยๆ จะมีข้อมูลอีกชุดที่ดูแล้วไม่น่าใช่ข้อมูลของรูปแน่ๆ FixedButton อะไรไม่รู้ 😵
ดังนั้นเราจึงเอาเฉพาะแค่ตรง offset ประมาณ 0C992400 ถึงประมาณ 0C992EC0
ไหนมาเช็ค Magic Bytes ดูอีกรอบซิว่าถูกต้องหรือเปล่า 🧐
ไฟล์รูปภาพที่ได้มา จะเห็นว่ามีข้อความอยู่ด้านใน และแน่นอนว่ามันคือรหัสผ่านสำหรับการแตกไฟล์
38nVw%Z_#jdtZ>M?
ทำการแตกไฟล์ด้วยรหัสผ่านที่ได้มาจากรูปในขั้นตอนก่อนหน้า
ได้ Flag มาแล้วจ้าาาา
THCTF{@!Th1S_ls_A-f1Ag!@}