SGID Binaries
SGID (Set Group ID) คล้าย SUID แต่ทำให้ binary รันด้วยสิทธิ์ของ group เจ้าของไฟล์ ถ้า group นั้นเข้าถึงไฟล์/ทรัพยากรสำคัญได้ ก็นำไปยกระดับสิทธิ์หรืออ่านข้อมูลที่ปกติเข้าไม่ได้ บทนี้ลงลึกกลไก SGID, ความต่างจาก SUID, การหา, การ abuse, และ SGID บน directory (เนื้อหาเพื่อฝึกใน lab/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 ต่อ
2. หา SGID binaries
# หา 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/null3. การ abuse
# วิธีเดียวกับ 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 นั้น)4. group ที่น่าสนใจ
| group | เข้าถึงอะไร | ต่อยอด |
|---|---|---|
| shadow | อ่าน /etc/shadow | crack password hash → root |
| disk | อ่าน/เขียน raw disk (/dev/sda) | debugfs อ่านไฟล์ใดก็ได้, ดึง shadow |
| adm | อ่าน log (/var/log) | หา credential/ข้อมูลใน log |
| root | ไฟล์ที่ group root เข้าได้ | แล้วแต่ไฟล์ |
| docker/lxd | container socket | container escape (ดู Docker Escape) |
# ถ้าได้สิทธิ์ group disk (ผ่าน SGID หรือเป็นสมาชิก)
# ใช้ debugfs อ่าน /etc/shadow จาก raw disk
debugfs /dev/sda1
debugfs: cat /etc/shadow
# ได้ hash → crack5. 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พิมพ์ find / -perm -2000 -type f -exec ls -la {} \; 2>/dev/null หา SGID พร้อมดู group เจ้าของ
- 2ดูคอลัมน์ group ของแต่ละไฟล์ — ถ้าเป็น shadow/disk/adm ให้สนใจเป็นพิเศษ
- 3ถ้าเป็น group shadow ให้ลองใช้ binary นั้นอ่าน /etc/shadow (เช่นถ้าเป็น cat ให้ ./cat /etc/shadow)
- 4ถ้าเป็น group disk ให้พิมพ์ debugfs /dev/sda1 แล้วในนั้นพิมพ์ cat /etc/shadow
- 5ได้ hash แล้วเปิดเว็บ crackstation.net หรือใช้ john/hashcat ในเครื่อง Kali crack ดู
- 6ถ้า group เป็นแบบธรรมดา (root/bin) ให้เอาชื่อ binary ไปค้นใน gtfobins.github.io ดู section SUID/SGID
- 7ถ้าไม่มีใน GTFOBins เป็น custom binary ให้ใช้ strings ./binary และ ltrace ./binary วิเคราะห์เหมือนตอนเช็ค SUID
- 8ถ้าเจอมันเรียก command แบบไม่ใส่ full path ให้ลองทำ PATH hijack แบบเดียวกับ SUID
- 9พิมพ์ id หลังทุกขั้นตอน เพื่อดูว่าได้ group เพิ่มหรือถึง root แล้วหรือยัง
| ขั้นตอน/งาน | เครื่องมือใน Kali | ติดตั้งเพิ่ม (ถ้าไม่มี) | เครื่องมือออนไลน์ |
|---|---|---|---|
| หา SGID binary + group เจ้าของ | find, ls -la | - | - |
| เทียบวิธี abuse ตาม binary | - | - | gtfobins.github.io |
| อ่าน raw disk (group disk) | debugfs | - | - |
| crack hash หลังได้ shadow | john, hashcat | - | crackstation.net |
| วิเคราะห์ custom SGID binary | strings, ltrace | - | - |
| enumeration เสริม | - | linpeas | - |
หัวข้อที่เชื่อมโยง
โน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้