PwnTUI

pwnableprogrammingtools

สวัสดีครับทุกคน พอดีช่วงที่ผ่านมาผมเริ่มกลับมาฝึกทำโจทย์ 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 ของทุกคนสนุกและปวดหัวน้อยลงนะครับ ขอบคุณครับ!