Vulnhub เป็นเว็บไซด์ที่ให้เหล่า security ต่างๆมาทำ lab ที่เป็น Virtual Machine ให้คนทั่วโลกเล่นกัน โดยมีให้เล่นทั้งในระดับ Easy, Intermediate, Advance ซึ่งมี Virtual Machine มาให้โหลดไปเล่นมากมาย โดยในคราวนี้ผมจะโหลดตัวที่ชื่อว่า Pluck ไปเล่นครับ โดยไฟล์ที่ได้จะเป็นแบบ ova ไฟล์ครับ ทีนี้หากต้องการจะเปิดใน Parallel Desktop ก็จำเป็นต้อง Convert ก่อน แต่หากต้องการใช้งานบน VMWare หรือ Virtualbox ก็สามารถใช้งานได้ทันทีครับ

ทีนี้ก็มาเริ่มเล่นกัน โดยเมื่อเปิด virtual machine ขึ้นมา จะไม่มีอะไรที่บอกเราเลยทั้ง IP Address, Port, และ user ในการ login ดังนั้นสิ่งที่ผมจะทำอย่างแรกคือการ pingsweep ก่อน

เราได้เครื่องเป้าหมายแล้วว่าเป็น IP 10.211.55.26 ก็เริ่มทำการ scan port

เราจะพบ port 80, 3306, 5355 เปิดอยู่ ทดสอบเข้าใช้งานเว็บไซด์

จากการลองเข้าหน้าต่างๆพบว่าหน้า about มีการเรียกใช้งานแบบ include ผ่านตัวแปล page จึงได้ทำการทำ local file inclusion ดู

จากภาพจะเห็นว่าสามารถทำ local file inclusion ได้ และได้เห็น user ที่ถูกสร้างขึ้นมาใหม่อย่าง backup user ซึ่งมีการ run backup.sh ทุกๆครั้งเมื่อมีการ login ดังนั้นจึงได้อ่านไฟล์นี้เพิ่มเติม

จะเห็นว่าใน script ทำการ zip folder /var/www/html และ /home ทั้งหมดไว้ที่ /backups/backup.tar ทำการ download ไฟล์โดยใช้คำสั่ง

แตกไฟล์

ได้ folder home ome var ออกมา


ใน folder ของ paul มี folder keys อยู่ ทีนี้จากการทดสอบเอา key ทั้งหมดไป login พบว่าสามารถใช้ key id_key4 ในการ login ได้ แต่เมื่อเข้ามาก็พบกับ menu การสั่งงาน


จาก passwd ที่เราดูก่อนหน้านี้พบว่า paul จะมี execute sh เมื่อ login คือ /usr/bin/pdmenu และจากการทดสอบหา netcat ในเครื่อง pluck พบว่ามีเป็นแบบ alternative ซึ่งไม่มี -e option จึงต้องหาวิธีอื่นในการได้ reverse shell

และจากการตรวจสอบ environment พบว่ามี perl อยู่ด้วย

ทดสอบ command injection ใน Change Directory ปรากฎว่าทำได้(เข้าใจว่าทำได้ทุกอัน แต่ผมขี้เกียจทำต่อใน menu อื่น) ดังนั้นจึงทำการติดต่อกลับมายัง server ของ Hacker (10.211.55.3) ผ่านช่องทางนี้

หาไฟล์ที่มี SUID เพื่อพยายาม privilege escalation

ทีนี้เราพบว่า exim ได้รับ suid ด้วย และ exim มี option -ps คือ การ link perl เข้ากับ exim แล้วรัน perl ไปด้วยกันตอน start

เราจึงทำการสร้าง perl ไฟล์ขึ้นมา แล้วให้รัน /bin/sh โดยใช้สิทธิ์ root ใน path /tmp โดยตั้งชื่อว่า root.pm

จากนั้นสั่งรัน

ก็จะได้สิทธิ์เป็น root มา

เข้าไปที่ path home ของ /root แล้วเอา flag ออกมา