Passage [Write Up] — Hack The Box

สวัสดีครับบบ พอดีช่วงนี้พอจะมีเวลาว่าง ผมจึงได้ไปนั่งเล่น Lab และแน่นอนว่าต้องเป็น Lab ยอดฮิตอย่าง Hack The Box ครับ ซึ่งในบทความนี้ผมก็เลยเอา Write Up ของข้อนึงที่ผมได้เล่นมาฝากกันครับ
ซึ่งตัว Hack The Box จะมีโจทย์แต่ละข้อให้เล่นโดยการให้หา Flag ด้วยสิทธิ์ของทั้ง User และ Root และจะมี Lab ที่แบ่งเป็น
- Active Machines [Lab ที่เปิดให้เล่นโดยไม่ต้องสมัคร VIP ซึ่งจะเป็น Lab ใหม่ ๆ โดยจะมีอายุที่ประมาณ 6 เดือน]
- Retired Machines [Lab ที่ต้องสมัคร VIP ซึ่งจะเป็น Lab ที่มีอายุเกิน 6 เดือนแล้ว]
และโจทย์แต่ละข้อก็ยังมีระดับความยากง่ายดังนี้ Easy, Medium, Hard และ Insane

***แต่กว่าจะปล่อยบทความนี้ได้ก็คงต้องรอให้ Hack The Box Retire โจทย์ข้อ Passage ก่อนนะครับ

สำหรับข้อ Passage นั้นเป็นโจทย์ระดับ Medium และมี OS เป็น Linux เราสามารถเข้าไปเล่นโจทย์ข้อนี้ได้โดยการใช้ VPN ที่ Hack The Box สร้างให้เรามา
Recon
ก่อนอื่นเลยเรามา Discover Port ที่เปิดอยู่ก่อนโดยใช้งาน Tool ที่ชื่อว่า Nmap โดยมีคำสั่งดังนี้
nmap -sC -sV -p- 10.10.10.206
-sC => User Default Script
-sV => Enumerate Version and Service

จะพบว่ามี Port 22 (SSH) และ 80 (HTTP) เปิดอยู่จึงลองเข้าเว็บดู

จากนั้นพอลองตรวจสอบ Source Code ดูก็พบว่าเว็บนี้มีการใช้งาน CuteNews ซึ่งเป็น News Management System

ต่อมาจึงลองเข้าไปที่หน้า Management ของ CuteNews และพบว่ามีการใช้งาน CuteNews เวอร์ชัน 2.1.2 ร่วมถึงเราสามารถสมัครสมาชิกได้ด้วย

ก็เลยลองนำเวอร์ชันของ CuteNews มา Search หาดูว่ามันมี Exploit หรือไม่ ที่ www.exploit-db.com และพบว่ามีช่องโหว่เรื่อง Arbitary File Upload อยู่แต่เราจำเป็นต้อง Authenticated ก่อน

Exploit the CuteNews
เพราะงั้นเลยลองสมัครสมาชิก และลอง Login เข้าไปดูก็พบว่ามีช่องสำหรับ Upload File อยู่

เราสามารถใช้วิธีการอัปโหลด Shell Script ขึ้นไปเองก็ได้ หรือจะใช้ Exploit ที่มีอยู่ใน Exploit-DB ก็ได้ โดยผู้เขียนได้ใช้ Metasploit เอาเนื่องจากว่ามันสะดวกดี (ขี้เกียจนั่นแหละ)

จากนั้นก็ Set Options ต่าง ๆ ให้เรียบร้อยโดยพารามิเตอร์ที่เราต้อง Set จะมี USERNAME, PASSWORD และ RHOSTS

ต่อมาจึง Set Payload ต่อ

แล้วเราก็ทำการรันได้เลยจ้า… ได้แว้วววว
และแล้วก็ได้ Shell ไปที่เครื่อง Passage ได้แล้วแต่ได้สิทธิ์เป็นเพียงของ www-data เท่านั้น

Get the User Privilege
ลองตรวจสอบไฟล์ passwd ดูว่ามี User อะไรบ้างในบนเครื่องนี้โดยใช้คำสั่ง cat /etc/passwd ก็พบว่ามี User ที่ น่าสนใจคือ nadav และ dav อยู่

ที่นี้ก็มาลองหาว่าพอจะข้อมูลอะไรให้เรานำมาใช้ได้บ้างที่มีอยู่ใน /var/www/html/CuteNews จนพบว่ามีไฟล์ที่น่าสนใจก็คือ users, users.db.php และ users.txt ที่ Path /var/www/html/CuteNews/cdata

แต่เมื่อลองเปิดอ่านไฟล์ users.db.php และ users.txt ดูแล้วก็ไม่พบอะไรที่น่าจะเอามาใช้ได้

เลยลองเข้ามาดูที่ไฟล์ users และเมื่อลองลิสต์ไฟล์ดูก็พบว่ามีไฟล์ lines ที่น่าสนใจ

และเมื่อเปิดอ่านไฟล์ดูก็พบว่ามีข้อมูลที่ถูก Encode ด้วย base64 อยู่

ก็เลยต้องลอง Decode ดูก็พบว่ามีข้อมูลชุดนึงที่น่าสนใจโดยเป็น User ที่ชื่อว่า Paul และพบว่ามีข้อมูลชุดนึงที่คาดว่าน่าจะเป็น Password อยู่ด้วย นั่นก็คือ s:4:”pass”;s:64:”e26f3e86d1f8108120723ebe690e5d3d61628f4130076ec6cb43f16f497273cd

จากนั้นก็ลองเอา Hash ดังกล่าวมา Crack ที่ crackstation.net ดู จึงได้ Password มา

ที่นี้ก็ได้เวลาเปลี่ยนเป็น User paul ด้วยการใช้คำสั่ง su paul และพอเข้าไปที่ User paul ได้ก็ไปที่ home ของ paul จะพบว่ามี user.txt อยู่…
เรียบร้อยได้ User Flag แล้ววว

เมื่อเข้ามาเป็น User paul ได้แล้ว เลยลองเช็กดูว่า paul อยู่ในกรุ๊ปไหนบ้าง ก็พบว่ามีเพียง paul เท่านั้น จึงลองเช็กกรุ๊ปของ nadav ดูก็พบว่า User นี้อยู่ในกรุ๊ป sudo ด้วย

Get the User2 Privilege
เมื่อทราบแล้ว nadav มีสิทธิ์ในการใช้ sudo อยู่ด้วยจึงจำเป็นต้องเข้าใช้งานในสิทธิ์ของ nadav ให้ได้ เลยลองสำรวจหน้า home ของ paul ดูก็ดูไม่มีอะไรที่แปลกไปกว่าปกติ

แต่เมื่อลองเข้าไปเช็กดูดี ๆ แล้ว กลับพบว่าที่ Path /home/paul/.ssh ที่ไฟล์ authorized_keys นั้นมี nadav@passage อยู่ด้วย
เลยลองก็อปปี้ RSA Private Key จาก id_rsa ไปเลย

เมื่อสร้างไฟล์ id_rsa เสร็จก็อย่าลืมแก้ Permission ของไฟล์โดยใช้คำสั่ง chmod 0600 id_rsa และแล้วก็ได้เป็น nadav แล้วว

Get the Root Privilege
หลังจากเข้ามาที่ home ของ nadav ก็ลองลิสต์ไฟล์ที่มีอยู่ดูก็ยังไม่พบอะไรที่น่าจะเป็นเบาะแสที่จะทำให้เราสามาถได้สิทธิ์ root มาได้

หลังจากใช้เวลาหานู่นนี่มานานในที่สุดก็พบว่าอะไรที่น่าสนใจอยู่ก็คือ ibus

พอลองเอาคีย์เวิร์ด ibus privilege escalation ไปค้นหาใน Google ก็พบว่ามีช่องโหว่นี้อยู่จริง ๆ ด้วย จากนั้นก็ถึงเวลานั่งอ่านว่ามัน Exploit ยังไง



จากนั้นก็ลองใช้คำสั่ง
gdbus call — system — dest com.ubuntu.USBCreator — object-path /com/ubuntu/USBCreator — method com.ubuntu.USBCreator.Image /root/.ssh/id_rsa /tmp/id_rsa_r true
จากนั้นพบว่าเราสามารถอ่าน id_rsa ที่ได้จากการใช้ gdbus เพื่อ Copy File id_rsa ไปที่ /tmp/id_rsa_r และจากนั้นหากเรา RSA PRIVATE KEY ไปใช้ในการ Login SSH ด้วย User root จะพบว่าเราสามารถ Login ได้สำเร็จ และอ่าน Flag ได้แล้วนั้นเอง

