PwnTUI
สวัสดีครับทุกคน พอดีช่วงที่ผ่านมาผมเริ่มกลับมาฝึกทำโจทย์ Pwnable / Binary Exploitation อยู่ แล้วเจอปัญหาขัดใจตัวเองนิดหน่อย คือไม่ได้ใช้ Tool พวก dbg, pwndbg นาน เลยงงอะไรหลายอย่าง เลยลองเขียน (ให้เพื่อนรัก claude ทำ) Tool ตัวนี้ขึ้นมา ชื่อว่า PwnTUI ครับ(อ่านเป็นไทยแล้วแอบแปลก ๆ อยู่) เลยอยากเอามาแชร์ให้คนที่กำลังฝึกเหมือนกันลองเอาไปใช้ดู
Pain Point ของผมคืออะไร?
ปัญหาหลักๆ ของผมคือ เวลาพยายามใช้พวกปลั๊กอินยอดฮิตอย่าง pwndbg, gef หรือตัวอื่นๆ ยอมรับเลยครับว่ามันเก่งและฟีเจอร์เยอะมากๆ แต่สำหรับคนที่กำลังเรียนรู้อย่างผม บางจังหวะมัน "มองภาพไม่ออก" ครับ

เวลาพิมพ์คำสั่งดูทีละบรรทัด ผมมักจะนึกภาพตามไม่ค่อยทันว่าตอนนี้ Stack มันจัดเรียงยังไง ค่าใน Register แต่ละตัวเปลี่ยนไปแบบไหน ข้อมูลมันเลื่อนไปตรงไหนแล้ว ทำให้การทำความเข้าใจ Exploit บางตัวเป็นเรื่องที่ใช้พลังงานเยอะมาก + ผมค่อนข้างขี้เกียจอย่างมาก หลังจากเลิกงานมา ผมก็เลยตัดสินใจที่จะลองใช้ claude เนี่ยแหละ ในการทำ tool อะไรสักอย่างมา เพื่อสนอง need ตัวเองล้วน ๆ (จริง ๆ อยากผลาญ token) เลยได้เจ้า pwnTUI ออกมานี่แหละ ใช้เวลาเฆี่ยนและตบตีกับมันมาราว 2-3 วัน
PwnTUI ทำอะไรได้บ้าง?
ผมเลยตัดสินใจเขียน TUI (Text User Interface) มาครอบ GDB ซะเลย เพื่อจัดหน้าจอให้มันดูง่ายๆ แบ่งสัดส่วนชัดเจน และอัปเดตแบบ Real-time โดยฟีเจอร์หลักๆ ที่ผมทำไว้ใช้งานมีประมาณนี้ครับ:

เห็นภาพ Stack & Registers ชัดเจน: หน้าต่างจะแบ่งโซน Disassembly, Registers และ Stack ออกจากกัน เวลาเรา Step ดูการทำงาน (กด F10/F11) ข้อมูลบนหน้าจอจะอัปเดตตามทันที ช่วยให้เห็นภาพการเปลี่ยนค่าใน Memory ได้ง่ายขึ้นมาก
คำนวณ Cyclic Offset ให้อัตโนมัติ: อันนี้คือจุดที่ผมขี้เกียจทำเองสุดๆ เวลาเรายัด Payload แล้วโปรแกรม Crash ทับ
$ripตัว TUI จะแกะตัวอักษรและบอกระยะ Offset ให้บนหน้าจอเลย (เช่น offset 72) ไม่ต้องสลับจอไปพิมพ์คำสั่งcyclic -lหาเองแล้วลิสต์จุดตั้ง Breakpoint ง่ายๆ: พอโหลดโปรแกรมปุ๊บ มันจะหาพวกฟังก์ชันอันตรายๆ (เช่น
system,gets,strcpy) มาเรียงไว้ให้ฝั่งซ้าย เราแค่เลื่อนแล้วกด Enter เพื่อตั้ง Breakpoint ได้เลยการสลับ 32-bit / 64-bit : โยนไฟล์อะไรใส่ หน้าต่าง Stack และ Register จะปรับรูปแบบตามสถาปัตยกรรมให้เอง
จอไม่ค้างตอนรอ Input: ทำระบบให้คุยกับ GDB แบบเบื้องหลัง ทำให้เวลาโปรแกรมติดรอรับค่าที่ฟังก์ชันอย่าง
read()เราก็ยังกดหยุดเพื่อส่องดู Memory ได้
ข้อจำกัดเล็กๆ น้อยๆ ที่ควรรู้
เครื่องมือตัวนี้ผมทำมาเน้นใช้กับ Stack-based Buffer Overflow, ROP และ Basic Pwn เป็นหลักนะครับ ถ้าใครเอาไปเล่นโจทย์สาย Heap อันนี้ PwnTUI จะยังไม่ได้ซัพพอร์ตลึกขนาดนั้น (เพราะไม่ได้ยัดปลั๊กอินหนัก ๆ มาด้วย)
ลองโหลดไปเล่นกันดูครับ
สำหรับใครที่กำลังเรียน Pwn แล้วอยากได้เครื่องมือที่ช่วยให้เห็นภาพง่ายๆ ลองเข้าไปโหลดไปใช้กันได้เลยครับ (Open Source ครับ)
สามารถลองใช้ได้ที่ https://github.com/PNU-phuwasit/pwnTUI
เครื่องมือตัวนี้ผมทำมาเพื่อแก้ปัญหาตัวเองตอนฝึกเป็นหลัก ถ้าใครเอาไปลองใช้แล้วเจอบั๊ก ใช้งานติดขัดตรงไหน หรือมีไอเดียอยากเสนอแนะฟีเจอร์อะไรเพิ่ม แนะนำเข้ามาได้เต็มที่เลยนะครับ! ไปเปิด Issue ทิ้งไว้ใน GitHub หรือคอมเมนต์บอกกันได้เลย
หวังว่า PwnTUI จะช่วยให้การเรียน Pwnable ของทุกคนสนุกและปวดหัวน้อยลงนะครับ ขอบคุณครับ!