Linux yetki yükseltme (privilege escalation) konusuna https://www.sinembasaran.com/2021/01/linuxta-yetki-yukseltme-privilege.html linkindeki yazı ile başladım ancak konu haliyle çok uzun ve tek bir yazıya sığmadı.
Linux yetki yükseltme mevzularına kaldığım yerden devam ediyorum:
Bu defa konu yazılabilir durumdaki /etc/passwd dosyasını istismar etmek.
Öncelikle Part I'de yer alan LinEnum aracını kurmuş, anlamış ve çalıştırmış olmamız gerekiyor.
Tüm bunların gerçekleştiğini varsayarsak, eğer LinEnum bize /etc/passwd dosyasının yazılabilir olduğu bilgisini verdiyse işler bundan sonra başlıyor.
Kullanıcılar hakkında bilgi toplama işlemini de gerçekleştirmiş ve hangi kullanıcının hangi yetkilere sahip olduğu bilgisini de bu aşamaya kadar artık edinmiş olmalıyız.
etc/passwd nedir?
1. /etc/passwd dosyası login yani giriş yaparken gerekli olan bilgileri saklar. Bu da kullanıcıların giriş bilgilerini sakladığı anlamına gelir.
2. /etc/passwd düz metin (plain text) bir dosyadır.
4. /etc/passwd dosyası birçok komut aracı kullanıcı kimliklerini adlarıyla eşlemek için kullandığından genel okuma iznine sahiptir ancak yazma (değişiklik yapma) hakkı ancak root yani superuser kullanıcısı ile limitlendirilmiş olmalıdır. Eğer bu kısıtlama yapılmamışsa ya da bir kullanıcı yanlışlıkla değişiklik yapma hakkı bulunan bir gruba eklenmişse bu bir zafiyet bulunduğu anlamına gelir.
Bir önceki yazıda bahsettiğim yatay privilege escalation ile /etc/passwd üzerinde değişiklik yapabilen kullanıcının hesabı ele geçirilebilirse bu durumda root yetkileri de ele geçirilebilir demektir.
/etc/passwd formatı
/etc/passwd dosyası sistemde yer alan her kullanıcı (hesabı) için bir satırda bir giriş bulundurur.
Tüm bölümler : sembolü ile birbirinden ayrılmıştır.
Aşağıdaki şekilde 7 bölümden oluşur ve genellikle şu şekilde görünür:
test:x:0:0:root:/root:/bin/bash
her : sembolünden öncesini bir bölüm kabul ederek:
1. Bölüm: Kullanıcı adı.
Kullanıcı login olduğunda kullanılır. 1-32 karakter arası uzunlukta olmalıdır. Yukarıdaki örnekte kullanıcı adı "test" olarak görülmektedir.
2. Bölüm: Parola.
Parola bölümünde görülen x karakteri şifrelenmiş parolanın / etc / shadow dosyasında saklandığını gösterir.
(CLI'ye* yazılan bir parolanın hash** bilgilerini hesaplamak veya parolanın hashini / etc / shadow dosyasında saklamak veya güncellemek için passwd komutunu kullanmanız gerekir, bu durumda parola hashi "x" olarak saklanır.
* CLI = Command line interface = Komut satırı arayüzü))
** Hash = herhangi bir metnin şifrelenerek okunamaz veya önceden tahmin edilemez hale getirilmesi algoritması ve işlemi.
3. Bölüm: User ID (UID)
Her kullanıcıya bir kullanıcı ID'si (user ID ya da UID) atanması gerekir. UID 0 (zero) root kullanıcısına ayırılmıştır ve 1-99 arasındaki diğer UID'ler diğer önceden tanımlı hesaplara aittir. 100 ile 999 arasındaki UID'ler ise sistem tarafından yönetici ve sistem hesapları/gruplarına ayrılır.
4. Bölüm: Group ID (GID)
Kullanıcıların her birinin bir birincil grubu bulunması gerektiğini yine ilk yazıda yazmıştım. Burada 4. bölümde görülen de bu birincil grup ID'sidir ve /etc/group dosyası içerisinde saklanır.
5. Bölüm: User ID Info
User ID bilgilerini içerir ve yorum alanıdır. Kullanıcının adı, telefon numarası gibi kullanıcılar hakkında ekstra bilgi edinmeye olanak tanır. Finger* komutu ile kullanılır.
* Finger komutu oturum açmış tüm kullanıcıların ayrıntılarını veren bir kullanıcı bilgisi arama komutudur.
6. Bölüm: Home dizini. Kullanıcının oturum açtığında içinde olacağı dizinin mutlak yolu (Absolute path)*. Bu dizin yoksa, kullanıcılar dizini / (kök dizin) olur.
Absolute path / Mutlak yol: Bir dosyanın veya dizinin konumunu kök dizinden (/) itibaren belirtmek olarak tanımlanır. Örneğin trash diye bir dosyam var diyelim bunun mutlak yolu /home/sinem/Downloads/trash olarak gösteriliyorsa tüm üst dosyalar da sıralandığından mutlak yol ile gösterilmiş demektir.
7. Bölüm: Command/shell
Komut ya da shell'in* mutlak yoludur (/bin/bash).
Genellikle bu bir shell'dir ancak olmayadabilir.
* Shell: Unix veya GNU / Linux gibi bir işletim sisteminde diğer programları çalıştıran bir programdır. Kullanıcılara Unix / GNU Linux sistemine bir arayüz sağlar, böylece kullanıcı bazı girdi verileriyle farklı komutları veya yardımcı programları / araçları çalıştırabilir.
Yazılabilir durumdaki /etc/passwd nasıl istismar edilir?
Eğer ele geçirilebilen bir kullanıcının /etc/passwd dosyasına yazma yetkisi varsa bu durumda yukarıdaki şekilde yeni bir satır ekleyebilir ve yeni bir kullanıcı oluşturabiliriz. İstediğimiz gibi oluşturacağımız için de istediğimiz parola hashini kullanabilir ve UID ile GID ve shell'i de root olarak ayarlayabiliriz.
Sonuçta root olarak yönetici yetkileri ile sisteme bağlanacak kendimize ait bir kullanıcımız olur.
Yeni bir kullanıcı eklemeden önce ilk yapılması gereken ekleyecek uyumlu bir parola hash oluşturmak. Bunun yapılabilmesi için kullanılacak komut ise:
openssl passwd -1 -salt [salt] [password]
Ben örneği TryHackMe üzerinden yaptığımdan komutu aşağıdaki şekilde girdim:
new adlı kullanıcı için 123 şeklinde bir parola hash'i oluşturulması istenmişti,
user7@polobox:~$ openssl passwd -1 -salt new 123
$1$new$p7ptkEKU1HnaHpRtzNizS1
Görüldüğü gibi yukarıdaki hash çıktı.
Bu elde edilen bilgiler ile devam edelim.
Yeni bir root kullanıcı hesabı oluşturmak için yazılacak /etc/passwd girdisi (kullanıcı adı: new ve parola hash yukarıdaki şekilde) şöyle olmalı:
new:$1$new$p7ptkEKU1HnaHpRtzNizS1:0:0:root:/root:/bin/bash
(Daha önce yukarıda yazmış olduğum standart /etc/passwd formatında yalnız 1. ve 2. bölümleri değiştirerek kullanıcı adı ve parola hash bilgilerini girdim.)
Son olarak yukarıda yazılı olan girdiyi /etc/passwd içerisine eklemek kalıyor geriye.
Bunun için normalde vim kullanıyor olmama rağmen çalışmadığından nano kullandım:
nano /etc/passwd
Artık /etc/passwd içerisinde değişiklik yapabiliyorum.
Son satıra yukarıdaki girdiyi ekledim ve ctrl X ile kaydedip çıktım.
Kullanıcımı oluşturmuş olmam lazım.
su komutu ile new kullanıcısına geçiş yapalım:
user7@polobox:/etc$ su new
Password:
Welcome to Linux Lite 4.4
You are running in superuser mode, be very careful.
Hiç yorum yok:
Yorum Gönder