SUID Biti ile Yetki Yükseltme

Rıdvan Kaplan
4 min readFeb 8, 2021

--

Merhaba !!!

Bu yazımda SUID bitinin ne olduğundan bahsedeceğim ve birkaç demo yapacağım. Boot2root makinelerinde normal kullanıcı ile shell aldıktan sonra yetki yükseltmek (privilige escalation) için çalışmalara başlanır. Bu durumda ilk önce dosyaların izinleri kontrol edilir.

Not: İzin yapılarını biliyorsanız direkt SUID biti kısmına atlayabilirsiniz.

Linux’ta dosyalar temel olarak 3 izin yapısıyla çalışır. Okuma, yazma ve çalıştırma izinleri bulunur. Farklı kullanıcılara farklı izinleri verebilirsiniz. Hangi kullanıcıya hangi izni verdiğinize veya kısıtladığınıza dikkat etmek gerekir.

  • Okuma İzni (r) > 4
  • Yazma İzni (w) > 2
  • Çalıştırma İzni (x) > 1

Örnek olarak chmod 741 dosya_ismi komutu ile izin verilmiş bir dosyayı inceleyelim. İzin yapısı aşağıdaki şekilde oluşacaktır.

-rwxr----x

Soldaki kısım rwx dosyanın sahibinin, ortaki kısım r — — kullanıcının ait olduğu grubun, sağdaki kısım — — x ise diğer kullanıcıların izinleridir. Kullanıcının yazma, çalıştırma ve okuma izni bulunmaktadır. Kullanıcının grubu için sadece okuma izni bulunmaktadır. Diğer kullanıcılar için ise sadece çalıştırma izni bulunmaktadır. En soldaki ise normal bir dosya olduğunu belirtir.

SUID İzni Nedir ?

Temel izinler dışında özel bazı izinler vardır. Bunlardan biri SUID (Set Owner User ID Up On Execution) bitidir. Kullanıcıların belirli bir kullanıcının izinleriyle bir dosyayı çalıştırmalarına izin veren bir izin türüdür. SUID izinleri olan dosyalar daha yüksek ayrıcalıklarla çalışır. Hedef sisteme root olmayan bir kullanıcı olarak eriştiğimizi ve SUID bit etkin dosyaları bulduğumuzu varsayalım. Bulunan dosya, program veya komut root haklarıyla çalıştırılabilir.

SUID izni 2 şekilde verilebilir. chmod u+s dosya_ismi veya chmod 4741
dosya_ismi
gibi verildikten sonra şu şekilde olmalıdır >

-rwsr----x

Sunucuda SUID Bitine Sahip Dosyaları Nasıl Bulunur ?

find dizin -perm -4000 -exec ls -ldb {} \; 2>/dev/null

dizin > Hangi dizinden kontrol etmeye başlanacağı belirtilir.
-perm -4000 > Sadece izni 4000 olan dosyaları bulur.
-exec ls -ldb> Çıktıyı ls -ldb komutunun çıktısı şeklinde basar.
2>/dev/null> Dosyaları kontrol ederken izin hataları ile karşılaştığında ekrana basmamak için belirtilir.
Yukarıdaki komut tek yol değildir. Az veya daha çok parametreler ile de bulabilirsiniz. Benim genellikle kullandığım komut yukarıdaki gibidir. Örneğin -user root parametresi ekleyerek > Yalnızca root kullanıcısına sahip dosyaları bulabilirsiniz.

Suid Biti Nasıl Sömürülür ?

İlk önce suid bitine sahip dosya veya komutlar kontrol edilir.

Örnek olarak / dizininin altındaki suid bitine sahip dosyaları (komutlarda bir ELF dosyasıdır) bulup /tmp dizini içerisinde bir dosyaya yazdırıldı. İçeriği ise ekran görüntüsündeki gibidir. Bazı dosyaların izinlerini demo olması açısından değiştirdim. Sisteminizde değiştirmediyseniz aşağıdaki dosyalar suid bitine sahip olmayacaktır.

Öncelikle bir dosyada suid biti varsa o dosya ile farklı şekillerde de yetkiniz olmayan işlemler yapabilirsiniz.

/bin/nano

Nano komutu ile istediğimiz dosyayı değiştirebileceğimiz için aklımıza ilk olarak /etc/sudoersdosyasını değiştirmek gelebilir.

Örneğin normalde /etc/sudoers dosyasını okuma bile yetkimiz yokken nano komutu suid bitine sahip olduğu için değiştirmeye çalışalım.

En alt kısmına ekran görüntüsündeki gibi satır eklenir.

/usr/bin/file

Ve parola sorulmadan root shell’i alınır.
File komutu ile dosyaların içeriğini okuyabiliriz. Akla gelen ilk okunabilecek yetkili dosya tüm kullanıcıların parolasının hash değerlerinin tutulduğu /etc/shadow dosyası okunabilir.

Ekran görüntüsünde suid biti verilmeden önceki hali ve sonraki hali bulunmaktadır. Suid biti verildikten sonra dosyanın içeriği okunabilmektedir. Çıkan değerler parolalarının hash değerleri olacağı için bir wordlist ile kırılması gerekir.

/usr/bin/find

Find komutu dosyaları bulmamıza yarar ama ayrıca linux komutları çalıştırabiliriz.

Örneğin ekran görüntüsünde ki gibi parametrelerini vererek /bin/sh komutunu çalıştırılabilir ve root shell’i alınır.

/usr/bin/python2.7

Python da linux komutlarını çalıştırabileceğiniz için root yetkisiyle shell alınır.

Bu komutlar gibi birçok komut olabilir. Şuana dek en düzenli ve sade şeklinde bulunan bu siteyi gördüm. Mantığı anladıysanız diğer örnekleri de rahatlıkla anlayabilirsiniz..

Okuduğunuz için teşekkürler. Yazılarımda herhangi bir teknik hata varsa bildirmekten çekinmeyiniz…

Originally published at https://ridvankaplan.com.

--

--

Rıdvan Kaplan

Cyber Security & Blue Team | OSCP & eCTHPv2 & eCIR & CySA+