ข้ามไปเนื้อหาหลัก

เจาะกล่อง Billing บน TryHackMe: ช่องโหว่ Command Injection สู่ Root

ถอดบทเรียนห้อง Billing บน TryHackMe ความยากระดับ Medium เจาะช่องโหว่ IcePay ชี้ช่องทางยกระดับสิทธิ์ผ่าน Fail2Ban เป็น Root สมบูรณ์

เรียบเรียงโดย AI
Inewgen
27 Oct 2026ที่มา: Dev.to4 นาทีอ่าน (0 ครั้ง)
แชร์
เจาะกล่อง Billing บน TryHackMe: ช่องโหว่ Command Injection สู่ Root

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ขนาดตัวอักษร
  • เป้าหมายคือห้อง Billing ความยากระดับ Medium บนแพลตฟอร์ม TryHackMe
  • เริ่มต้นเจาะระบบด้วยช่องโหว่ Unauthenticated Command Injection ในพารามิเตอร์ democ ของโมดูล IcePay
  • ใช้สิทธิ์ sudo ของ fail2ban-client เพื่อเขียนทับคำสั่ง actionban ยกระดับสิทธิ์สู่ Root
  • ระบบเรียกใช้งานผ่าน MagnusBilling บนเซิร์ฟเวอร์ Asterisk PBX และฐานข้อมูล MariaDB

การเจาะระบบห้อง Billing บนแพลตฟอร์ม TryHackMe ซึ่งมีความยากระดับ Medium พาผู้ใช้งานไปสัมผัสกับสถาปัตยกรรมเฉพาะทางด้านโทรคมนาคม โดยมี MagnusBilling ซอฟต์แวร์เรียกเก็บเงินโอเพนซอร์ส ทำงานทับบนบริการ Asterisk PBX และมี MariaDB ทำหน้าที่เป็นฐานข้อมูลเบื้องหลัง สภาพแวดล้อมนี้เปิดโอกาสให้นักทดสอบเจาะระบบได้เรียนรู้พื้นผิวการโจมตีที่แตกต่างจากเว็บแอปพลิเคชันทั่วไป เช่น เกตเวย์ชำระเงิน พอร์ตจัดการสายโทรศัพท์ และระบบเรียกเก็บเงินที่เชื่อมต่อกับแบ็คเอนด์โทรคมนาคม

ขั้นตอนแรกเริ่มต้นจากการสแกนพอร์ตด้วยเครื่องมือ rustscan ที่ไอพีแอดเดรส 10.49.178.53 ซึ่งเผยให้เห็นบริการหลัก ได้แก่ พอร์ต 22 (SSH OpenSSH 9.2p1), พอร์ต 80 (Apache 2.4.62 พร้อม MagnusBilling), พอร์ต 3306 (MySQL MariaDB 10.3.23) และพอร์ต 5038 (Asterisk Call Manager 2.10.6) การใช้เครื่องมือ Feroxbuster สแกนไดเรกทอรีรากของเว็บช่วยเปิดเผยโครงสร้างของ MagnusBilling ทั้งหมด รวมถึงโฟลเดอร์ของเกตเวย์ชำระเงินต่างๆ เช่น icepay/, mercadopago/, stripe/, anet/ และ PlacetoPay/

เนื่องจากโค้ดของเกตเวย์ชำระเงินมักได้รับการดูแลจากทีมพัฒนาภายนอกและผ่านการตรวจสอบความปลอดภัยน้อยกว่าแกนหลักของระบบ จึงเป็นจุดเริ่มต้นที่น่าสนใจที่สุดสำหรับการหาช่องโหว่ การตรวจสอบไฟล์ icepay.php ของเกตเวย์ IcePay พบว่าพารามิเตอร์ democ ยอมรับค่าอินพุตและส่งผ่านตรงไปยังสภาพแวดล้อมการทำงานของเชลล์โดยไม่มีการตรวจสอบความถูกต้อง ทำให้ผู้โจมตีสามารถแทรกอักขระพิเศษเพื่อสั่งรันคำสั่งเพิ่มเติมได้ทันทีโดยไม่ต้องยืนยันตัวตน

ช่องโหว่ลักษณะนี้สะท้อนให้เห็นปัญหาคลาสสิกในระบบจริง เมื่อโมดูลภายนอกอย่างปลั๊กอินชำระเงินถูกติดตั้งเพิ่มเข้ามาโดยขาดการตรวจสอบความเข้มงวดด้านความปลอดภัยเทียบเท่ากับระบบหลัก การที่พารามิเตอร์ไม่ผ่านการกรองข้อมูล (Sanitization) เปิดช่องให้เกิดการโจมตีประเภท Command Injection ได้โดยง่าย ซึ่งเป็นบทเรียนสำคัญสำหรับนักพัฒนาในการตรวจสอบอินพุตทุกจุดที่รับมาจากภายนอก

การใช้เครื่องมือ Netcat เพื่อรอรับการเชื่อมต่อย้อนกลับ (Reverse Shell) ทำให้ผู้ทดสอบได้รับสิทธิ์เข้าใช้งานในฐานะผู้ใช้งานระบบ asterisk ซึ่งเป็นบัญชีที่ใช้รันบริการ Asterisk และ MagnusBilling บนเซิร์ฟเวอร์ จากนั้นจึงสามารถเข้าไปอ่านแฟล็กผู้ใช้งานทั่วไปที่เส้นทาง /home/magnus/user.txt ซึ่งมีค่าแฮชคือ THM{4a6831d5f124b25eefb1e92e0f0da4ca}

ไม่อยากพลาดข่าวใหม่?

สมัครรับสรุปข่าวสารใหม่ทางอีเมล ไม่บ่อยจนรำคาญ

โฆษณา

terminal command line hacking code screen

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

กระบวนการยกระดับสิทธิ์ (Privilege Escalation) เริ่มต้นด้วยการตรวจสอบสิทธิ์การใช้งานคำสั่งด้วยคำสั่ง sudo -l ซึ่งผลลัพธ์แสดงให้เห็นว่าผู้ใช้ asterisk สามารถรันคำสั่ง /usr/bin/fail2ban-client ได้โดยไม่ต้องใช้รหัสผ่าน (NOPASSWD) โดย Fail2Ban เป็นบริการตรวจสอบไฟล์บันทึกเพื่อตรวจจับพฤติกรรมน่าสงสัยและทำการบล็อกไอพีแอดเดรสที่โจมตีผ่านกฎไฟร์วอลล์

65535พอร์ตที่ทำการสแกน
2.10.6เวอร์ชัน Asterisk Call Manager

แม้ว่าไฟล์ตั้งค่าดั้งเดิมใน /etc/fail2ban/action.d/*.conf จะไม่สามารถแก้ไขได้เนื่องจากถูกจำกัดสิทธิ์ไว้ แต่ความสามารถของคำสั่ง fail2ban-client ช่วยให้ผู้ทดสอบสามารถกำหนดการทำงานของแอ็กชันซ้ำแบบเรียลไทม์ผ่านบรรทัดคำสั่งได้โดยตรง ตัวอย่างเช่น การปรับแต่งแอ็กชัน actionban ของเจล sshd ให้เรียกใช้งานเพย์โหลดผ่าน curl เพื่อดึงสคริปต์อันตรายมารัน

ขั้นตอนสุดท้ายทำได้โดยการสั่งบล็อกไอพีลูปแบ็ค 127.0.0.1 ของบริการ sshd เพื่อกระตุ้นเงื่อนไขการทำงานของระบบ Fail2Ban ซึ่งจะสั่งรันคำสั่ง actionban ที่ถูกแก้ไขไว้ด้วยสิทธิ์ Root เนื่องจากตัวบริการ Fail2Ban ทำงานภายใต้สิทธิ์ระดับสูงสุดเพื่อจัดการไฟร์วอลล์ ส่งผลให้ผู้ทดสอบได้รับเชลล์ย้อนกลับในฐานะ Root และสามารถอ่านแฟล็กสุดท้ายที่ /root/root.txt ซึ่งมีค่าเป็น THM{33ad5b530e71a172648f424ec23fae60}

ที่มา: Dev.to

ความคิดเห็น

แสดงความคิดเห็น
0/2000

พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้