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!@}
จอบอ. 😁
Thailand CTF 2019 – In the Picture (Write-up)
ในข้อนี้โจทย์มีชื่อว่า In the picture สามารถดาวน์โหลดโจทย์ได้ที่ลิงค์นี้ >>> In the picture.zip
Ps. ขออภัยด้วย Flag ไม่ได้เรียงกันนะครับ 😅
ทำการแตกไฟล์ In the picture.zip
เมื่อทำการแตกไฟล์ออกมา จะได้รูปภาพมา 1 รูป …
ลองเข้าไปส่องข้างในดูหน่อยซิ 🧐
เมื่อใช้คำสั่ง binwalk ส่องดูข้างใน จะพบว่ารูปภาพโดนยัดไฟล์ rar เข้ามา
ให้ทำการดึงไฟล์ rar ออกมาโดยใช้คำสั่ง binwalk -e Question.jpeg เราก็จะได้ไฟล์ rar ที่ต้องการออกมา
ไหนลอง extract ดูซิ …
ติด password จ้าาา ☹️
ลองไปส่งไฟล์รูปอีกทีซิ รอบนี้ใช้คำสั่ง strings Question.jpeg เพื่อดูว่ามีการแอบยัดข้อความอะไรมาหรือเปล่า
แล้วก็โป๊ะเชะ!! DPa$$w0rd:SheepInTheBigCity 😍
นำรหัสผ่านที่ได้เมื่อกี้ไปแตกไฟล์โลด 😁
จะได้ไฟล์ออกมาอีก 3 ไฟล์ (ยังไม่จบอีก 😢)
ลองเช็คไฟล์ทั้ง 3 ไฟล์ซิ ว่าเนื้อแท้มันคือไฟล์อะไร
จะเห็นว่าไฟล์แรกเป็นไฟล์รูป (.jpg) ไฟล์ที่สองเป็นไฟล์เสียง (.wav) ส่วนไฟล์สุดท้ายเป็น data ไว้เดี๋ยวมาเช็คกันอีกที … 😅
ก่อนอื่นทำการเปลี่ยนนามสกุลให้ 2 ไฟล์แรกก่อน hint1.zip เป็น hint1.jpg และ hint2.zip เป็น hint2.wav
ลองส่องไฟล์ hint3.zip จะพบว่าส่วน header มีคำว่า NG !!!
และแน่นอนครับ มันคือไฟล์รูปภาพ 😄
ให้เราไปแก้ค่า Hex โดยการเพิ่ม 89 50 ไป offset แรกสุด
เปลี่ยนนามสกุลไฟล์ให้เป็น .png ซะ
รูปภาพที่ได้ … 🧐
ทีนี้กลับมาดู hint2 ลองแมวมาดูหน่อยซิ 🧐
Nothing …
งั้นโยนเข้า Audacity หน่อยเป็นไง 😅
เอ๊ะ… Morse Code แน่ๆ 🤔
และแน่นอนมันคือ Morse Code เมื่อทำการ Translate ออกมาจะได้คำว่า PLAYSOME
ส่วน hint1 นั้น ..
ลองแมวดูซิ เห็นอะไรแว๊บๆ 🧐 🤔
ถ้าดูดีๆมีเครื่องหมาย { ก็น่าจะเป็น ROT13 แน่ๆ งั้น decode โลด
จะได้คำว่า TH{lets ออกมา
เมื่อเอาคำใบ้ทั้ง 3 คำมารวมกันก็จะได้ Flag ออกมา
TH{letsPLAYSOME_CtF!$} เอาไปแก้ format ให้ถูกต้องเป็นอันเรียบร้อย
จอบอ. 😁
Thailand CTF 2019 – Android (Write-up)
ในข้อนี้โจทย์มีชื่อว่า Android สามารถดาวน์โหลดโจทย์ได้ที่ลิงค์นี้ >>> Android.zip
ขั้นแรกให้ทำการแตกไฟล์ออกมาก่อน โดยใช้คำสั่ง unzip Android.zip จะได้โฟลเดอร์ Android_ ออกมา
โดยข้างในโฟลเดอร์ก็จะพบอยู่ 3 ไฟล์ ได้แก่ android.zip (password protected), .git และ README.md
จุดที่น่าสนใจคือ .git ทำให้ทราบได้ว่าใช้ version control ซึ่งจะเก็บประวัติในการแก้ไขโค้ดของเรา อ่านเพิ่มเติมคลิกที่นี่
ให้เราทำการรันคำสั่ง git log เพื่อดูประวัติการ Commit เพราะโดยปกติแล้ว แต่ละครั้งเมื่อเราทำการ Commit จะมีการใส่ Comment ไว้ด้วย เพื่อที่จะได้ทราบว่าเราได้ทำอะไรไปบ้าง
จุดที่น่าสนใจมีอยู่ 2 commit คือ
– update (สนใจก่อนการ delete key) : 33d78b5cbb94854ff228172e7dd0159564157655
– delete website : 20929d7d0ff6d4fc99fdc25d6196f80f49d0582b
Checkout #1
ทำการรันคำสั่ง git checkout 33d78b5cbb94854ff228172e7dd0159564157655 เพื่อทำการย้อนกลับไปก่อนมีการ delete key
เมื่อทำการเรียกดูรายชื่อไฟล์ จะพบว่ามีไฟล์ aws_s3.key โผล่ขึ้นมา
เมื่อทำการดูไฟล์ข้างใน จะพบค่าค่านึง อันนี้ขอรวบลัดเลยละกัน ไม่ต้องไปรันใน aws console หรือเขียน api ให้ยุ่งยาก เพราะจริงๆมันคือค่า hex นี่เอง
เมื่อทำการ decode ก็จะได้ค่าดังนี้ Th@iL@nDCTF2Ol9
เมื่อนำรหัสที่ได้มาแตกไฟล์ android.zip ปรากฏว่ารหัสผิด 😢
Checkout #2
คราวนี้เรามาดูอีก Commit ที่เกี่ยวกับ Website อะไรสักอย่าง เช่นเดิมครับ ให้รันคำสั่ง git checkout 20929d7d0ff6d4fc99fdc25d6196f80f49d0582b เพื่อย้อนกลับไปก่อนการลบ website
จะเห็นว่ามีโฟลเดอร์ web โผล่ขึ้นมา
เมื่อเข้าไปดูในโฟลเดอร์ web จะพบไฟล์ index.html ให้เราทำการเปิดไฟล์ครับ เพื่ออ่าน source code ด้านใน
เห็นอะไรมั้ยครับ 😏
คล้ายๆอันแรกเลย จากค่า aws_access_key_id และ aws_secret_access_key ให้เราทำการ decode ออกมาครับ อันนี้แล้วแต่ความสะดวกเลย ส่วนตัวผมใช้ perl script ครับ
เมื่อ decode ออกมาก็จะได้ค่าดังนี้ Th@iLanDCTF2Ol9_P@ssCode
นำมาเป็นรหัสแตกไฟล์ android.zip ครับ ถูกต้องสักที เย้ 😄
รวบรัดอีกแล้ว 😆 ไม่ต้องคิดอะไรมากครับ โจทย์นี้คือจะให้เราทำการ Crack Android Pattern ครับ
รันคำสั่งเพื่อค้นการไฟล์ gesture.key โลดครับ จะใช้คำสั่งใน linux (find,grep) หรือถ้าใช้ Windows ก็ search ผ่าน Explorer ได้เลยครับ
ข้อดีของโจทย์นี้คือ จะมี Script สำหรับ Crack Pattern มาให้แล้ว ตามผลลัพท์ที่ 2 ครับ
รันสคริปต์ aplc.py เพื่อทำการ Crack Pattern โลดครับ 😄
$ data/data/com.android.crackkey/androidpatternlock/aplc.py data/system/gesture.key
เท่านี้เราก็จะได้ Flag ออกมา 😎
THCTF{6304852}
จอบอ. 😁
Thailand CTF 2018 – My password collection (Write-up)
ในข้อนี้โจทย์มีชื่อว่า My password collection สามารถดาวน์โหลดโจทย์ได้ที่ลิงค์นี้ >>> disk.zip
ขั้นแรกให้ทำการแตกไฟล์ออกมาก่อน โดยใช้คำสั่ง unzip disk.zip จะได้ไฟล์ disk.dd ออกมา
ลองเช็คประเภทของไฟล์ดูก่อน โดยใช้คำสั่ง file disk.dd
จะเห็นได้ว่า Partition เป็น MSDOS ซึ่งจากประสบการณ์ ใช้ 7Zip แตกไฟล์ในคอมพิวเตอร์โดยตรงเลยง่ายกว่า 555+
เมื่อแตกไฟล์ใน Windows ด้วย 7Zip ก็จะได้ไฟล์ประมาณนี้
ไฟล์ข้างในแต่ละ Folder ก็จะได้ประมาณนี้
ทำการไล่เช็คประเภทของไฟล์ใน Document (เนื่องจากไม่มี .extension ทำให้ไม่ทราบได้ว่าเป็นไฟล์ประเภทอะไร)
โดยใช้คำสั่ง for f in Documents/*; do file $f; done
จะเห็นได้ว่าน่าสนใจทุกไฟล์เลย 55+ แต่เราจะทำการเช็ค 2 ไฟล์กันก่อน คือไฟล์ g ที่เป็นไฟล์ pdf และไฟล์ w ที่เป็น textfile
เมื่อดูข้อมูลใน textfile จะพบข้อความ VyAtMzAwClAgMApSIDI= ซึ่งแน่นอนว่ามันคือ base64 หลังจาก decode ก็จะได้ผลลัพธ์ตามรูปด้านบน
กลับไปดูอีกไฟล์ที่เป็น pdf ซึ่งจริงๆมันเป็นคำใบ้ในการเอา key ในขั้นต่อไป (จำรูปภาพ และ filters ด้านล่างไว้ให้ดีๆ 😁)
ไปดูที่อีกโฟลเดอร์บ้าง ในโฟลเดอร์ Pictures นั่นเอง เห็นอะไรแปลกๆมั้ยครับ 🙃
ใช่เลยครับ รูปแรกนี่แหละ เมื่อลองเปิดรูปดู จะเห็นว่าเหมือนมีข้อความโดนหมุนเป็นเกลียวอยู่!
จำไฟล์ pdf ที่เปิดก่อนหน้าได้ไหมครับ นั่นแหละ! มันคือคำใบ้!! อ้อ textfile อักอัน
ก่อนอื่นให้เปิดรูปด้วย Gimp ก่อนครับ จากนั้นไปที่ Filters → Distorts → Whirl and Pinch เพื่อจะทำการหมุนภาพกลับ
ซึ่งไม่ต้องไปงมให้เมื่อยว่าแต่ละค่าต้องหมุนไปที่เท่าไหร่ เพราะมันบอกไว้แล้วใน textfile ที่เป็น base64
จะได้ 4XAktWZ3tH7AHsO9
กลับไปดูใน Documents อีกรอบ จะเห็นว่าเหลืออีก 2 ไฟล์คือ f: openssl และไฟล์ p: Keepass
โดยไฟล์ f เป็น Encryption file แล้วจะแกะยังไง ในเมื่อไม่มี passphase 😂
งั้นกลับไปดูอีกไฟล์กันก่อน อันนี้ยอมรับว่าไม่รู้จัก เท่าที่ไปถามอากู๋มา ได้ความว่าเป็น Password Management ซึ่งส่วนตัวรู้จักแค่ Dashlane, 1Password และ Lastpass 555+
ทำการโหลด Keepass แล้วเปิดไฟล์ p โลดดดด ซึ่งจะเจอหน้าถามหา Master Password = =”
ลองเอา key ที่ถอดมาได้จากรูปภาพใส่ดู แล้วก็โป๊ะเชะ!
ด้วยความที่ไม่เคยใช้ ก็เลยลองเอาเมาส์ไปชี้เล่นๆดู เอ๊ะตรงนี้คืออัลไล (,__, )a เก็บไว้ก่อน
ลองดับเบิลคลิกเข้าไปดูใน Text file ซะหน่อย จะเห็นว่าตรงช่อง Notes: มันว่างๆเหมือนไม่มีอะไร แต่ทำไมมันยาวววววว 😶
เมื่อเลื่อนไปดูล่างสุด เหมือนจะเจอ key อีกแล้ว แต่มันไม่ใช่ flag !!!
UzE0f6Sb2ZvUtvsD
ตอนนี้ใน Documents ก็เหลือไฟล์เดียวแล้ว คือไฟล์ f: openssl
จากที่บอกข้างต้นว่ามันเป็น Encryption data ต้องใช้ key ในการ Decryption ซึ่งแน่นอนเหลือ key เดียวแล้วที่ยังไม่ได้ใช้ และเพิ่งแกะออกมาได้
ซึ่งในการ Decryption ต้องรู้ก่อนว่าใช้ Algorithm อะไร และแน่นอนว่ามันคือ AES-256-CBC ที่โจทย์ได้ทำการใบ้ไว้ใน Keepass
เมื่อทำการ Decrypt แล้วก็จะได้ Flag ออกมา 😎
THCTF{Uu5AzrJD3mMKDG0z}
จอบอ. 😁
Pixel (RGB) – game.rop.sh & I-SECURE CTF
Ref: https://twitter.com/sornram9254/status/770222358179278848
ไม่ใช่ Write-up ละเอียดๆเท่าไหร่นะครับ
เพราะผมเองก็เพิ่งเข้าใจเหมือนกัน
ตอนแรกก็งงว่าโจทย์อะไร มีแต่ตัวเลขเป็นหมื่นๆบรรทัด ถถถถ+
ต้นคลิปเกือบจะพูด game-rop-dot-org แล้ว ถถถ+
Images and Pixels
https://processing.org/tutorials/pixels/
Fanpage : http://fb.me/sornram9254Fan
Facebook : http://fb.me/sornram9254
https://blog.sornram9254.com