How to find SUID permission – Nebula 00

บทนำ (Overviews)

บทความนี้กล่าวถึงการยกระดับสิทธิ (Privilege escalation) โดยการหาไฟล์ที่กำหนดสิทธิ (permission setting) ที่มีลักษณะการใช้ “Bit” พิเศษที่เรียกว่า “SUID”

การกำหนดสิทธิของระบบไฟล์ (Permission) ของระบบปฎิบัติการประเภท “Unix” โดยมีการแบ่งแยกสิทธิได้ทั้งในส่วนของไฟล์ (File) และ ไดเรกทอรี (Directory)

  • Read (r)
  • Write (w)
  • Execute (x)
  • SUID (S)

โดยในแต่ละไฟล์และไดเรกทอรีจะมีการกำหนดสิทธิ์การใช้งาน แบ่งออกเป็น 3 ส่วน ดังนี้

  • “User” สิทธิของผู้ที่ได้สร้างไฟล์หรือไดเรกทอรี (u)
  • “Group” สิทธิของ “User” อื่น ๆ ที่อยู่ “Group” เดียวกับ “User” ที่สร้างไฟล์ (g)
  • “Other” สิทธิของ “User” อื่น ๆ ที่ไม่ได้อยู่เป็นเจ้าของ และไม่ได้อยู่ใน “Group” (o)

โดยบทความนี้จะเน้นไปที่  “SUID” ซึ่งไว้ใช้กำหนดว่าไฟล์ดังกล่าวนั้น เมื่อ “User” ใด ๆ ก็ตามมา “Execute” (x) ไฟล์ดังกล่าวแล้ว “Process” นั้นแทนที่จะ “Run” โดย “User” นั้นกลับกลายเป็นเจ้าของไฟล์ทันที นั้นหมายความว่า

  • ถ้าไฟล์ มี “permission” ที่ “other” สามารถ “Execute (x)” และถูกตั้งว่า “SUID (S)” โดยเจ้าของไฟล์เป็น “Root” นั้นหมายความถ้าสามารถ “execute” ไฟล์ได้โดยใช้ “User” ใด ๆ ก็ตามสามารถได้สิทธิเป็น “Root” ทันที
     44203   63 -rwsr-xr-x   1 root     root        63592 Aug  9  2011 /bin/umount
    

ดังนั้นใน “SUID” จะถูกตั้งค่าไว้ที่ส่วนของ “Execute Bit” ดังตัวอย่างข้างต้น

ขั้นตอน (Steps)

  1. ดาวน์โหลด “VM” ได้จาก https://exploit-exercises.com/download/
  2. สามารถ “Login” ผ่าน “SSH” ได้โดยใช้ “user” คือ “level00” และ “pass” คือ “level00”
    ssh level00@192.168.1.47
    
  3. โดยวัตถุประสงค์เราจะยกระดับสิทธิจาก “level00” เป็น “flag00”
  4. โดยเราสามารถหาไฟล์ ที่ตั้งค่า “SUID” โดยใช้คำสั่งดังต่อไปนี้
    #-perm /u+s หา user ตั้งค่า SUID
    #-ls แสดง permission
    #2>/dev/null กรองไดเรกทอรีไม่มีสิทธิออกไป
    find / -perm /u+s -ls 2>/dev/null
    

  5. นอกจากเราจะพบว่า “flag00” จะอยู่ใน “home” โฟลเดอร์แล้ว เรายังพบว่าไฟล์ที่สามารถ “Executable” ถูกซ่อนอยู่ที่ “/bin/…/flag00” ด้วย และถูกตั้งค่า “SUID” ที่ได้สิทธิเดียวกับ “flag00 user” ดังนั้นเราลองใช้คำสั่ง “getflag” ดังนี้
    level00@nebula:~$ getflag
    getflag is executing on a non-flag account, this doesn't count
    level00@nebula:~$ /bin/.../flag00
    Congrats, now run getflag to get your flag!
    flag00@nebula:~$ getflag
    You have successfully executed getflag on a target account
    

 

ใส่ความเห็น