HTB Challenge “AI Space” กึ่งๆ ไร้อัพ ทำหมวด AI+ML (+Data) ก็ต้องใช้ AI ทำป่าวคะ? ถถ
พูดถึงแพลตฟอร์มเอาไว้ฝึกโจทย์ CTF ที่มีสารพัดหมวดฟีล Jeopardy ที่แข่งตามงานทั่วไป นอกจากของฟรีอย่าง picoCTF.org ก็มีบน app.hackthebox.com/challenges ที่ขยันมีโจทย์ใหม่ทั้งฟรีทั้งสำหรับชาววีไอพีมารัวๆ ไม่แพ้ส่วนของบ็อกซ์
โดยเฉพาะหมวดใหม่ๆ Hardware, Blockchain, GamePwn, OSINT หรือที่อินเทรนด์อย่าง AI/ML (Artificial Intelligence / Machine Learning) แบบนี้ (ยังไม่นับรวมส่วนที่นางแยกออกจากแชลเลนจ์ ฟีลขั้นกว่าของหมวด Forensics อย่างส่วนนักสืบ SOC / Threat Hunting: app.hackthebox.com/sherlocks ด้วย 😮)
ในเมื่อชั้นเป็นสายแฟชึ่น อะไรใหม่ๆ ต้องรีบเกาะกระแสก่อนเบื่อ ลุยค่ะ ข้อที่ง่ายที่สุดก่อนเลยเพื่อน 55 อัน Easy ที่มีคนแก้ผ้าได้มากที่สุด: AI SPACE 🤩
แชลเลนจ์นางทั้งหลายก็เหมือนตอนเราเล่น CTF หลายค่าย บางข้อให้ไอพีเราวีพีเอนหรือเข้าเว็บที่สร้างมาเฉพาะได้ตรงๆ บางข้อก็มีให้โหลดไฟล์เอามาไขปริศนาบนเครื่องเราเอง อย่างข้อ AI SPACE นี้ กดดาวน์โหลดแล้วแตกไฟล์ด้วยรหัสผ่าน hackthebox ที่นางบอกเลยค่ะ
แตกไฟล์มาได้เป็นไฟล์สกุล .npy ค่ะ เปิดตรงๆ หรือ string ไม่ได้ความอะไรอยู่แล้ว เป็นฟีลไบนารี ถ้าไม่รู้ว่า npy ย่อมาจาก numpy แบบเรา ก็ถาม AI สิคะ ก็โจทย์หมวด AI นี่นา 555
อ่ะ เราลองเขียนไร้อัพแบบไม่อวดการถามพี่ ChatGPT กันนะคะ 55 คืออยากระบายเหมือนกัน หลายอย่างนางแชทก็ไม่ได้ตอบเคลียร์ ตอบชัดตอบเร็วเหมือนเสิร์ชตรงๆ นะคะ ส่วนตัวที่ชั้นสมัครแบบพลัส 699 บาทผ่านแอพสโตร์นางไว้ ก็ยังแนะนำให้ทั้งถามแชทและเสิร์ช๋ปิง (ใช่ค่ะ ตอนนี้ชั้นใช้ bing เพราะเลิฟ MS เอ้ย เพราะใช้ Edge ที่มันผูกกับแอค M365 สะดวกๆ) ไปพร้อมกันค่ะ เช่น เธอเสิร์ชว่า what to do with .npy file มันก็ขึ้นมาละป่ะว่าเป็นไฟล์ไบนารีที่เก็บข้อมูลในรูปชุดแอเรย์สำหรับจัดการผ่านโมดูล numpy บน Python แบบนี้:
python — How do you open .NPY files? — Stack Overflow
เปิด vscode หรือ IDE ที่เธอชื่นชอบ (หรืออยากเฟียซๆ ดิบๆ ก็เคาะคอมมานด์ไลน์ Python แบบ RHEL ไปเลยค่ะ เธอว์ ตอนอยู่ในคลาสชั้นก็กด enter รัวทีละบรรทัดเลยค่ะ จะ def ดีไฟน์ฟังก์ชั่น ฟอร์ลูปวาย คลาสเคลิส OOP ใดๆ ไม่แคร์ค่ะคุณ จำให้ได้ละกันว่าเคาะย่อหน้า indent กี่ครั้งให้เท่ากันจะได้ไม่เอ๋อเร่อ 55)
อธิบายโค้ด Python เราเริ่มจากอิมพอร์ตโมดูล numpy แล้วตั้งชื่อเล่น alias สั้นๆ ว่า np จากนั้นเอาเม็ดตอดใน np.load ไปโหลดข้อมูลไฟล์ .npy ที่เราได้ (ถ้าไฟล์ไพตั้นอยู่ในโฟลเดอร์เดียวกันกับไฟล์ .npy เราก็ไม่ต้องใส่พาธยาวๆ แถมเอาโค้ดไปใช้เครื่องอื่นได้ง่ายกว่าด้วย จริงไหมเคอะ) ก็ลอง print ออกมาดู
import numpy as np
data = np.load('distance_matrix.npy')
print(data)
แต่ถ้าเธอไม่มี python กดสั่ง python ใน cmd ไม่ได้ เธอก็รันไพตั้นใน vscode ไม่ได้นะคะ นางใช้โปแกรม python ข้างนอกเป็นอินเทอร์พรีเตอร์แปลโค้ดเหมือนกัน ไปโหลดจาก python.org/downloads มาลง แล้วไปเพิ่ม path python.exe ที่เพิ่งลงใน environment variable ให้พิมพ์คำสั่ง python ได้จากทุกพาธด้วยนะคะ
และถ้า ยูอิมพอร์ตโมดูลไหนแล้วมันฟ้องไม่รู้จัก ก็ pip install โมดูลนั้นค่ะ แนะนำให้ทำที่ cmd ข้างนอกที่เป็นสิทธิ์ Admin (คลิกขวา open as administrator ไม่ก็กด ctrl ค้างตอนจะเปิดหน้า terminal ใหม่ใน windows terminal) แทนที่จะคีย์ตรงๆ ในแท๊บ terminal ใน vscode ที่นางชอบฟ้องว่าให้สร้าง env เฉพาะกิจสำหรับเวิร์กสเปซเธอแทนลงแบบยูนิเวอซอลไหม เพราะบางโมดูลอย่าง pip install matplotlib ต้องการสิทธิ์แอดมินเพื่อลงไลบรารีในคอร์โฟลเดอร์ไพตั้นด้วยค่ะ
ปอลิง ตอนลงโมดูล sklearn ใช้ชื่อโมดูลติดตั้งเป็น pip install scikit-learn เต็มๆ นะคะ
ก็เห็นเป็นเมทริกซ์ของพิกัดสารพัดมิติที่บอกระยะห่างจากศูนย์กลางเดียวกัน = Distance Metrix ตามที่บล็อกท่านนี้บอกจริงๆ ด้วย (จริงๆ ชั้นแค่ก็อปไปถามนางจีพีทีว่ามันคืออะไรต้องทำไงต่อ 55)
โอเค เห็นเป็นพิกัด coordinate สี่สิบแปดล้านมิติแบบนี้ ก็ต้อง plot กราฟค่ะ ซึ่งไม่ว่าจะใช้โมเดลหรือโมดูลไหนมาจัดการเมทริกซ์นรกๆ นี้ให้พล็อตง่ายๆ บนหน้าจอ ก็ต้องใช้โมดูลพระแม่แห่งการพล็อตกราฟ MatPlotLib.pyplot เพื่อเจนกราฟ .colorbar, .scatter, .บลาๆ แบบไหนมา .show() อยู่ดี (.savefig(ชื่อไฟล์ภาพที่จะเซฟออกมา) ด้วยค่ะคุณ) ก็อิมพอร์ตนางตั้งท่ามาไว้ก่อน:
import numpy as np
import matplotlib.pyplot as plt
data = np.load('distance_matrix.npy')
#plt.บลาๆ(data,....) เตรียมชาร์ตไว้
#...
plt.savefig('กราฟดิชั้น.png')
plt.show()
ทีนี้ ใช้อะไรแกะเมทริกซ์นี้มาเป็นกราฟดีคะ? ซึ่งในบล็อกมีเดี้ยมพี่เค้าข้างบน นางอิมพอร์ตไลบรารีโมดูลกระหน่ำมาก scipy.บลาๆ sklearn.บลาๆ ที่ชั้นว่าไม่น่าถึกและบึกบึนขนาดนั้น เลยส่งตัวอย่างเมทริกซ์ตั้งต้นที่ปริ๊นท์ออกมาได้ไปให้พี่จีพีทีดู จนนางบอกว่ามีล้านมิติแบบนี้ต้องใช้โมดูลย่อมาเหลือ 2–3 มิติอย่าง sklearn.manifold > MDS (MultiDimentional Scaling) ค่ะ
นางจีพีทีให้พารามิเตอร์ในฟังก์ชั่น MDS มาพร้อมด้วย ดิชั้นลองเอาออกแล้วกลายเป็นรูปขัดจรวด ไม่เวิร์ก จงลอกอากิวเมนท์นางแทนเถอะค่ะคุณ
import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import MDS
data = np.load('distance_matrix.npy')
mds = MDS(n_components=2, dissimilarity='precomputed', random_state=42)
X = mds.fit_transform(data)
plt.scatter(X[:, 0], X[:, 1])
plt.savefig('sarahMDS.png')
plt.show()
ถือเป็นอีกมิตินะคะ ตอนเราเห็นคำว่า AI ตอนแรกก็นึกว่าเล่นเกี่ยวกับ LLM อย่าง prompt injection เหมือนในเว็บตาลุงแกนดาฟ gandalf.lakera.ai/baseline ที่อาจารย์สุเมธ SEC Playground นางเพิ่งทำคลิปรีวิวไว้ซะอีก:
ลองเล่น Prompt Injection บน Gandalf (youtube.com)
ที่ไหนได้ นึกว่าอาจารย์นา Big Data แห่ง ITD DNS KMUTNB มารวมร่างกับพี่ทอย DataRockie หลอกหลอนหนู ไงก็เดี๋ยวลองดูโจทย์อื่นว่าจะมาแนวแกะแพทเทิร์นกราฟแบบนี้อีกไหม อยากลองผ่าน ggplot ใน R Studio เหมือนกัน แต่คืนพี่ทอยสุดที่รักหมดแล้วค่ะ ❤️