HTB Challenge “AI Space” กึ่งๆ ไร้อัพ ทำหมวด AI+ML (+Data) ก็ต้องใช้ AI ทำป่าวคะ? ถถ

ThaiCySec
4 min readAug 11, 2024

--

มันมาละค่ะ ความหลอกหลอนจากคอร์ส Data Analyst ของพี่ทอย DataRockie ถถถถถ

พูดถึงแพลตฟอร์มเอาไว้ฝึกโจทย์ 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 ด้วย 😮)

นางกำลังขึ้นไฟเขียวตุ๊บๆ ว่ากำลังโปรโมทหมวดใหม่ AI/ML นะเธอ คำอธิบายนางใบ้ว่าเกี่ยวกับ Data และการเทรน Model ด้วย วิชา Big Data ต้องเข้าแล้วป่ะ
อย่ารอช้า ตอนนี้นางย้ายตัวกรองหมวดมาฝั่งบนขวามือแล้ว เลือก AI — ML กันค่ะคุณ

ในเมื่อชั้นเป็นสายแฟชึ่น อะไรใหม่ๆ ต้องรีบเกาะกระแสก่อนเบื่อ ลุยค่ะ ข้อที่ง่ายที่สุดก่อนเลยเพื่อน 55 อัน Easy ที่มีคนแก้ผ้าได้มากที่สุด: AI SPACE 🤩

https://app.hackthebox.com/challenges/AI%2520SPACE

ไม่ต้องรีบกินกบตัวนั้นซะค่ะ เรามาแบบจอยๆ เอาคอนเทนท์ เลือก Easy + User Solves มากสุดไปค่ะคุณ มันไม่ติด VIP แสดงว่าน่าจะเข้าเล่นฟรีได้ด้วย

แชลเลนจ์นางทั้งหลายก็เหมือนตอนเราเล่น CTF หลายค่าย บางข้อให้ไอพีเราวีพีเอนหรือเข้าเว็บที่สร้างมาเฉพาะได้ตรงๆ บางข้อก็มีให้โหลดไฟล์เอามาไขปริศนาบนเครื่องเราเอง อย่างข้อ AI SPACE นี้ กดดาวน์โหลดแล้วแตกไฟล์ด้วยรหัสผ่าน hackthebox ที่นางบอกเลยค่ะ

ข้อนี้ให้เราดาวน์โหลดไฟล์มาหา Flag โดยทั้งชื่อโจทย์ “Space” และคีย์เวิร์ด “Data Pattern” ในคำอธิบาย ก็ล้วนจิกหัวให้เราเอาข้อมูลที่โหลดมาไปพล็อตกราฟค่ะคุณ matplotlib ของชาวงูเหลือม หรือ ggplot ของชาว R สุดมินิมอลต้องเข้าแล้วป่ะ

แตกไฟล์มาได้เป็นไฟล์สกุล .npy ค่ะ เปิดตรงๆ หรือ string ไม่ได้ความอะไรอยู่แล้ว เป็นฟีลไบนารี ถ้าไม่รู้ว่า npy ย่อมาจาก numpy แบบเรา ก็ถาม AI สิคะ ก็โจทย์หมวด AI นี่นา 555

แตกแล้ว ได้ไฟล์ .npy 25MB ที่เปิดด้วยเท็กซ์อิดิเตอร์หรือ vscode ตรงๆ แล้วนางโอดครวญค่ะ ขออนุญาตเซ็นไฟล์อื่นเพราะเหมือนสปอยตอนจบ 55 ปอลิง แค่ชื่อไฟล์ Distance Matrix ก็บอกแล้วป่ะว่ายูต้องเอาไปพล็อตอะไร 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

ตามนี้ค่ะสาว อิมพอร์ต numpy มาใช้เม็ดตอด load โหลดไฟล์เข้าตัวแปรมาใช้ ไม่ก็ปริ๊นท์ตรงๆ ออกมาดูว่าหน้าตาเป็นไง เป็นเมทริกต์แบบ Distance Metrix ตามที่นางใบ้บนชื่อไฟล์จริงไหม

เปิด vscode หรือ IDE ที่เธอชื่นชอบ (หรืออยากเฟียซๆ ดิบๆ ก็เคาะคอมมานด์ไลน์ Python แบบ RHEL ไปเลยค่ะ เธอว์ ตอนอยู่ในคลาสชั้นก็กด enter รัวทีละบรรทัดเลยค่ะ จะ def ดีไฟน์ฟังก์ชั่น ฟอร์ลูปวาย คลาสเคลิส OOP ใดๆ ไม่แคร์ค่ะคุณ จำให้ได้ละกันว่าเคาะย่อหน้า indent กี่ครั้งให้เท่ากันจะได้ไม่เอ๋อเร่อ 55)

ก็อยากสด สดจากไร่ cmd เคาะรัวเอาต์พุตรัวทันใจทุกบรรทัดแบบนี้ก็มันส์นะคะ ฟีลมีพี่ทอยสอน R เป็นแบบอย่าง ฟีลพี่เดฟมืออาชีพแถวนี้เกียมเขกกะโปก 55 จะได้รู้ด้วยว่าคำสั่งไหนรอนานเว่อร์ อย่างตอนเจนไซร้ขิตเลิร์น MDS นี่ ค้างซะนึกว่าพัง โอเค จบไร้อัพด้วยภาพนี้ก็ได้นะคะ ได้แฟลกแล้ว หนึ่งภาพล้านความหมาย โมนาลิซ่าอาฮ่า ถถถ
กลับเข้าสิ่งที่เธอควรจะเป็นค่ะ อย่าไปทางปีศาจ จงเปิด vscode ขึ้นมาแล้วแนะนำ Open Folder ที่แตกไฟล์เมื่อกี้
เธอจะได้เวิร์กจากโฟลเดอร์เดียวกัน กดสร้างไฟล์เปิดไฟล์ไปมาได้สะดวกเป็นระบบ ยังไงตอน plot เธอก็อยาก .savefig เซฟฟิกเกอร์ออกมาเป็นไฟล์รูปไว้เป็นหลักฐาน (ไว้ทำคอนเทนท์อยู่แล้ว) นิคะ
เปิดเวิร์กสเปซแบบเลือกทั้งโฟลเดอร์ไว้ ตอนสั่งวิวเทอมินัลก็จะไปที่พาธของโฟลเดอร์ของเราให้ด้วยเลยไงคะ จะได้สั่ง python ชื่อไฟล์เก๋ๆ ไม่ต้องหาพาธให้ลำบาก
สร้างไฟล์ .py ขึ้นมาในโฟลเดอร์เดียวกัน แค่พิมพ์ import numpy นาง GitHub Copilot เวอร์ชั่นสติวเดนท์ฟรี ของ ดิชั้นก็ให้กดแท๊บๆๆๆ เสร็จเรียบร้อยเลยค่ะ แท๊บเว่อร์เกินไปนิดลบแทบไม่ทันด้วยบางครั้ง 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 เต็มๆ นะคะ

ตามนี้ค่ะ ออกมาปี๊บอินที่ cmd (as admin) ข้างนอกดีกว่า

ก็เห็นเป็นเมทริกซ์ของพิกัดสารพัดมิติที่บอกระยะห่างจากศูนย์กลางเดียวกัน = Distance Metrix ตามที่บล็อกท่านนี้บอกจริงๆ ด้วย (จริงๆ ชั้นแค่ก็อปไปถามนางจีพีทีว่ามันคืออะไรต้องทำไงต่อ 55)

Visualizing 3D Data from Point Distance Information with MDS-Algorithm in Python | by esoinila | Medium

เอาต์พุตเราออกมาหน้าตาเหมือนที่พี่เค้าอธิบายในบล็อกเลยค่ะ เพียงแต่แต่ละพิกัดของเรามีร้อยล้านมิติมากกว่าเท่านั้นเอง…
ปอลิง จริงๆ เราชอบรันไพตั้นผ่านเทอมินัล ใช้คำสั่ง python ตามด้วยชื่อไฟล์แบบนี้มากกว่า เพราะถ้าเราเขียนโปรแกรมที่ต้องการอินพุตจากคนรัน พวกมีฟังก์ชั่น input(“ตอบหน่อยค่ะสาว”) หรือฟังก์ชั่นรับค่า *args สารพัดอากิวเมนท์ ถ้ากดรันมุมบนขวาให้มันโผล่ผลลัพธ์ในแท๊บ Output นางจะเอ๋อ จะไม่รับอินพุตเราเหมือนที่ควรจะเป็น เป็นต้น

โอเค เห็นเป็นพิกัด 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) ค่ะ

หมวด AI จงใช้ AI ทำค่ะสาว 555

นางจีพีทีให้พารามิเตอร์ในฟังก์ชั่น 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()
รันเรียบร้อย ออกมาเป็น Flag สวยงามจริงๆ ด้วยค่ะ โจทย์ AI ต้องให้ AI ทำจริงๆ ด้วยค่ะ

ถือเป็นอีกมิตินะคะ ตอนเราเห็นคำว่า AI ตอนแรกก็นึกว่าเล่นเกี่ยวกับ LLM อย่าง prompt injection เหมือนในเว็บตาลุงแกนดาฟ gandalf.lakera.ai/baseline ที่อาจารย์สุเมธ SEC Playground นางเพิ่งทำคลิปรีวิวไว้ซะอีก:

ลองเล่น Prompt Injection บน Gandalf (youtube.com)

ที่ไหนได้ นึกว่าอาจารย์นา Big Data แห่ง ITD DNS KMUTNB มารวมร่างกับพี่ทอย DataRockie หลอกหลอนหนู ไงก็เดี๋ยวลองดูโจทย์อื่นว่าจะมาแนวแกะแพทเทิร์นกราฟแบบนี้อีกไหม อยากลองผ่าน ggplot ใน R Studio เหมือนกัน แต่คืนพี่ทอยสุดที่รักหมดแล้วค่ะ ❤️

Sarah Hansakul

fb.com/thaicysec

thaicysec.medium.com

youtube.com/thaicysec

tiktok.com/@thaicysec

#ThaiCySec

--

--