คลัง
linux-privesc

SGID Binaries

SGID (Set Group ID) คล้าย SUID แต่ทำให้ binary รันด้วยสิทธิ์ของ group เจ้าของไฟล์ ถ้า group นั้นเข้าถึงไฟล์/ทรัพยากรสำคัญได้ ก็นำไปยกระดับสิทธิ์หรืออ่านข้อมูลที่ปกติเข้าไม่ได้ บทนี้ลงลึกกลไก SGID, ความต่างจาก SUID, การหา, การ abuse, และ SGID บน directory (เนื้อหาเพื่อฝึกใน lab/CTF/ระบบที่ได้รับอนุญาต)

Intermediate#sgid#linux#privesc#gtfobins#setgid#group#ctf

1. หลักการ SGID vs SUID

SGID (s ในตำแหน่ง execute ของ group เช่น -rwxr-sr-x) ทำให้ binary รันด้วยสิทธิ์ของ group เจ้าของไฟล์ (ต่างจาก SUID ที่เป็น user เจ้าของ) ประโยชน์ในการ privesc: ถ้า group นั้นเข้าถึงไฟล์สำคัญได้ (เช่น group shadow อ่าน /etc/shadow ได้) เราก็เข้าถึงผ่าน SGID binary นั้น — อาจไม่ได้ root ตรงๆ แต่ได้สิทธิ์ group ที่นำไป privesc ต่อ

เนื้อหานี้เพื่อฝึกในสภาพแวดล้อมที่ได้รับอนุญาต (CTF, lab, pentest) เท่านั้น

2. หา SGID binaries

find SGIDLinux
# หา SGID binaries
find / -perm -2000 -type f 2>/dev/null
find / -perm -g=s -type f 2>/dev/null

# หาทั้ง SUID + SGID พร้อมกัน
find / -perm -6000 -type f 2>/dev/null

# แสดง group เจ้าของ (สำคัญ — group ไหน?)
find / -perm -2000 -type f -exec ls -la {} \; 2>/dev/null
ดู group เจ้าของ — group สำคัญ (shadow, root, disk, adm) = น่าสนใจ; เทียบ binary แปลกๆ

3. การ abuse

abuse SGID (GTFOBins + group access)Linux
# วิธีเดียวกับ SUID — ค้น GTFOBins ตามชื่อ binary
# (GTFOBins มี section SUID ที่ใช้ได้กับ SGID เช่นกันสำหรับ shell)

# ถ้า SGID เป็น group ที่เข้าถึงไฟล์สำคัญ:
# group shadow → อ่าน /etc/shadow ได้ → crack hash
# group disk → อ่าน raw disk (/dev/sda) → ดึงไฟล์/hash
# group adm → อ่าน log

# custom SGID binary: วิเคราะห์เหมือน SUID
strings ./sgid_bin; ltrace ./sgid_bin
# เรียก command ไม่ใส่ path → PATH hijack (ได้สิทธิ์ group นั้น)
SGID มัก privesc ทางอ้อม — ได้สิทธิ์ group ที่เข้าถึงไฟล์ sensitive (shadow/disk) แล้วต่อยอด

4. group ที่น่าสนใจ

groupเข้าถึงอะไรต่อยอด
shadowอ่าน /etc/shadowcrack password hash → root
diskอ่าน/เขียน raw disk (/dev/sda)debugfs อ่านไฟล์ใดก็ได้, ดึง shadow
admอ่าน log (/var/log)หา credential/ข้อมูลใน log
rootไฟล์ที่ group root เข้าได้แล้วแต่ไฟล์
docker/lxdcontainer socketcontainer escape (ดู Docker Escape)
ตัวอย่าง: group disk → ดึง shadowLinux
# ถ้าได้สิทธิ์ group disk (ผ่าน SGID หรือเป็นสมาชิก)
# ใช้ debugfs อ่าน /etc/shadow จาก raw disk
debugfs /dev/sda1
debugfs: cat /etc/shadow
# ได้ hash → crack
group disk เข้าถึง raw disk → debugfs อ่านไฟล์ใดก็ได้ bypass file permission

5. Quick Reference

  • SGID = รันด้วยสิทธิ์ group เจ้าของไฟล์ (แสดง 's' ที่ group)
  • หา: find / -perm -2000 -type f 2>/dev/null
  • ดู group เจ้าของ — shadow/disk/adm = น่าสนใจ
  • abuse: GTFOBins (เหมือน SUID) สำหรับ shell
  • group shadow → อ่าน shadow; group disk → debugfs ดึงไฟล์
  • custom SGID: strings/ltrace → PATH hijack

🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ

สมมติเช็ค SUID ไปแล้วไม่เจออะไร มีแค่ Kali เปล่าๆ ลองหันมาเช็ค SGID บ้าง — บางทีไม่ได้ root ตรงๆ แต่ได้สิทธิ์ group ที่ต่อยอดได้ ทำตามนี้ทีละขั้น

  1. 1พิมพ์ find / -perm -2000 -type f -exec ls -la {} \; 2>/dev/null หา SGID พร้อมดู group เจ้าของ
  2. 2ดูคอลัมน์ group ของแต่ละไฟล์ — ถ้าเป็น shadow/disk/adm ให้สนใจเป็นพิเศษ
  3. 3ถ้าเป็น group shadow ให้ลองใช้ binary นั้นอ่าน /etc/shadow (เช่นถ้าเป็น cat ให้ ./cat /etc/shadow)
  4. 4ถ้าเป็น group disk ให้พิมพ์ debugfs /dev/sda1 แล้วในนั้นพิมพ์ cat /etc/shadow
  5. 5ได้ hash แล้วเปิดเว็บ crackstation.net หรือใช้ john/hashcat ในเครื่อง Kali crack ดู
  6. 6ถ้า group เป็นแบบธรรมดา (root/bin) ให้เอาชื่อ binary ไปค้นใน gtfobins.github.io ดู section SUID/SGID
  7. 7ถ้าไม่มีใน GTFOBins เป็น custom binary ให้ใช้ strings ./binary และ ltrace ./binary วิเคราะห์เหมือนตอนเช็ค SUID
  8. 8ถ้าเจอมันเรียก command แบบไม่ใส่ full path ให้ลองทำ PATH hijack แบบเดียวกับ SUID
  9. 9พิมพ์ id หลังทุกขั้นตอน เพื่อดูว่าได้ group เพิ่มหรือถึง root แล้วหรือยัง
เจอ SGID แล้วทำอะไรต่อ / ไม่เจอไปทางไหน
group เจ้าของเป็น shadow/disk/adm หรือ group น่าสนใจไหม?
✅ group shadow→ อ่าน /etc/shadow ผ่าน binary นี้ แล้ว crack hash
✅ group disk→ ใช้ debugfs อ่าน raw disk ดึงไฟล์ระบบ
❌ group ปกติ (root/bin)→ เช็ค GTFOBins ว่า spawn shell ได้ไหม
ค้นชื่อ binary ใน gtfobins.github.io section SUID/SGID
✅ มี one-liner ให้ shell→ รันตาม GTFOBins
❌ ไม่มีใน GTFOBins (เป็น custom binary)→ วิเคราะห์เองด้วย strings/ltrace
ได้สิทธิ์ group แล้วต่อยอดเป็น root สำเร็จไหม?
✅ สำเร็จ→ จบงาน ได้ root
❌ ยังไม่ถึง root แค่ได้ group เพิ่ม→ กลับไปไล่ SUID/capability/cron ต่อ
ขั้นตอน/งานเครื่องมือใน Kaliติดตั้งเพิ่ม (ถ้าไม่มี)เครื่องมือออนไลน์
หา SGID binary + group เจ้าของfind, ls -la--
เทียบวิธี abuse ตาม binary--gtfobins.github.io
อ่าน raw disk (group disk)debugfs--
crack hash หลังได้ shadowjohn, hashcat-crackstation.net
วิเคราะห์ custom SGID binarystrings, ltrace--
enumeration เสริม-linpeas-
🚑 ถ้าตันสนิท ลองท่าถัดไป: SUID (permission bit อีกแบบที่ตรงตัวกว่า) · PATH Hijacking (ถ้า SGID เรียก command แบบ relative) · Docker Escape (ถ้า group เป็น docker/lxd) · LinPEAS (สแกนซ้ำให้ครบ) · กลับไป Linux Enumeration เพื่อไล่ checklist ใหม่

โน้ตของฉัน

ยังไม่มีโน้ตสำหรับหัวข้อนี้