Linux “find” Komutu

Bu yazımda sizlere Linux işletim sisteminde kullanılan “find” komutu ile ilgili detaylı bilgi vermeye çalışacağım. Bu komutun kullanımını detaylı olarak sizlere anlatıp örnekler üstünde görmenizi hedefliyorum. Ayrıca bu komutun kullanımını detaylı olarak öğrenmeniz sizlere CTF yarışmalarında da büyük fayda sağlayabilir. Lafı daha fazla uzatmadan bu komutun kullanımını görelim.


“find” Komutunun Genel Yapısı

“find” komutunun genel yapısını şu şekilde özetleyebiliriz:

find <nerede arıyorsun?> <ne arıyorsun?>

Çoğu zaman, bulunduğunuz dizininizde “find” komutunu kullanmazsınız. “find” komutu çoğu zaman görmediğiniz veya bilmediğiniz dizinlerde bir şey ararken kullanırsınız. “find” komutunun ilk parametresi, aramak istediğiniz dizin olmalıdır. Komut çalıştığında vermiş olduğunuz dizinde ve bu dizinin tüm alt dizinlerinde arama yapacaktır. Eğer, tüm dosya sistemini aramak istiyorsanız, “find” komutu ” / “ ile başlamalıdır.

“-type” ve “-name” parametreleri de en çok kullandığımız iki parametredir. “-type” parametresi ile, yalnızca dizinleri bulmak için “d” ve yalnızca dosyaları bulmak için “f” parametresini kullanabilirsiniz. “-name” parametresi, aranacak bir adı veya kalıbı belirtmek için kullanılır. Adın tamamını yazabilir veya adın yalnızca bir kısmını yazarak “wildcard” karakteri ile kullanabilirsiniz. “wildcard” karakteri ” * “ ile gösterilir. “wildcard” karakteri kullanırsanız, kalıbınızı tırnak içine almanız gerekir, aksi takdirde komut istendiği gibi çalışmaz. “-iname” parametresi ise “-name” ile aynıdır, ancak büyük-küçük harfe duyarlı değildir.

Bazı durumlarda, yalnızca bir dosyanın adını belirtmek yeterli olmayacaktır. Dosyanın sahibini, boyutunu, izinlerini ve en son erişildiği veya değiştirildiği zamanı da belirtebilirsiniz.

Bir dosyanın sahibinin kullanıcı adı “-user” parametresi ile belirtilir. Bir dosyanın boyutu “-size” parametresi ile belirtilir. Sayısal değerleri kullanırken “-n”, “+ n” ve “n” biçimleri kullanılabilir, burada n bir sayıdır. “-n”, n’den küçük değerlerle, “+ n“, n’den büyük değerlerle ve “n”, tam olarak n değerleriyle eşleşir.

“-perm” parametresi ile , octal formda (644, 777 vs) veya sembolik olarak (U = r) izinleri belirtmek için kullanılır. Aramanızı daha kapsamlı hale getirmek için ” – “ veya ” / “ ön eklerini kullanabilirsiniz. ” – “ ön ekini kullanırsanız, en az belirttiğiniz izinlere sahip dosyaları döndürür. ” / “ ön ekini kullanmak, belirttiğiniz herhangi bir izinle eşleşen dosyaları döndürür.


“find” Komutu Örnekleri

Yukarıda anlatmaya çalıştığım şeyleri anlamamış olabilirsiniz. Bu kısımda sizlere yukarıda anlattığım şeylerin detaylı olarak örnekler üzerinde göstermeye çalışacağım.

Soru 1: “.xml” ile biten tüm dosyaları bulmak
find / -type f -name "*.xml"

Yukarıda ne yaptığımız kısaca açıklıyım. ” / ” ile bütün dizilere bakacağımızı belirttik. “-type” parametresi ne “f” parametresi vererek arayacağımız şeyin türünün “dosya” olduğunu belirttik. Dosya ismi vereceğimiz için “-name” parametresi kullandık. ” * ” wildcard karakteri ile başında hangi kelime olursa olsun sonu “.xml” ile biten tüm dosyaları getirmesi gerektiğini söyledik ve bu kalıbı tırnak(“”) içinde yazdık.


Soru 2: “/home” dizinindeki “abc.txt” olan (büyük-küçük harf duyarlılığı yok) tüm dosyaları bulmak.

Burada büyük- küçük harf duyarlılığı şu demektir: “ABC.txt” ve “aBc.txt” dosyaları isim olarak aynı olduğunu kabul ediyoruz. Yani mesela siz bir dosyanın ismini “abc.txt” olduğunu biliyorsunuz ama yazılımını bilmiyorsunuz. İşte bu durumda bu şekilde arama yapabilirsiniz.

find /home -type f -iname abc.txt

Gene burada da açıklama yapayım sizlere. “/home” dizininde arayacağımızı söyledik. 1. örnekte olduğu gibi ” / ” kullanmamız gerekmiyor. Dosya aradığımız için “-type f” parametresini kullandık. Büyük-küçük harf duyarlılığı olmasını istemedğimiz için “-iname” kullandık. Ve en son dosya ismini verdik.


Soru 3: İçinde “flag” kelimesini içeren tüm dizinleri bulmak
find / -type d -name "*flag*"

Hep dosya ismi aramıştık şimdi ise dizin arıyoruz. Bu yüzden “-type d” parametresini kullanmamız gerekmektedir. “-name” ile dosya ismini vereceğiz. Burada dikkat edilmesi gereken nokta şudur. İçinde herhangi bir yerde “flag” kelimesi geçmesini istiyoruz. Yani bu yüzden wildcard ” * ” karakterini her iki tarafa da koymamız gerekiyor. Genelde CTF yarışmalarında “flag” dosyasını bulmada kullanılabilir.


Soru 4: “ali” kullanıcısına ait tüm dosyaları bulmak
find / -type f -user ali

Gene klasik olarak tüm dosyaları bulmak istediğimiz için ” / ” dosya konumunu belirttik. “-type f” ile arayacağımız şeyin türünün dosya olduğunu belirttik. “-user” ile de kullanıcı adını belirttik. Buraya “ali” değil de “root” kullanıcısına ait dosyaları bulmak için de “ali” yerine “root” yazmamız yeterlidir.


Soru 5: Tam olarak 300 bayt boyutunda olan tüm dosyaları bulmak
find / -type f -size 300c

Baştaki yazılan kısımları yukarıda anlatmıştım. Burada yeni olan şey dosya boyutuna göre aramak oldu. Dosya boyutunu tam olarak “300 bayt” istedikleri için başına “+” veya “-” koymamıza gerek yok.


Soru 6: “/etc” dizininde 9 Kilobayttan küçük ve “.txt” uzantılı tüm dosyaları bulmak
find /etc -type f -size -9k -name "*.txt"

Şimdi “/etc” dizinin ve arayacağımız şeyin dosya olduğunu belirttik. Ama boyutunun 9 kilobayt ve aşağısında olduğunu belirtmek için “-9k” yazdık. Eğer 9 kilobayttan büyük dosyaları isteseydik “+9k” yazardık. Eğer tam olarak 9 kilobaytlık dosyaları istiyorsa “9k” yazardık. “.txt” uzantılı dosyaları bulmak için gene wildcard karakteri kullandık.


Soru 7: Dosya sahibinin okuma ve yazma izni olsun ama diğer herkesin sadece okuma izni olduğu tüm dosyaları bulmak
find / -type f -perm 644

Burada biraz dosya izinleri hakkında bilgi sahibi olmanız gerekmektedir.


Soru 8: Herkesin sadece okuma izni olduğu tüm dosyaları bulmak
find / -type f -perm /444

Soru 9: “Others” grubunun yazma izni olduğu ve “.sh” uzantısına sahip tüm dosyaları bulmak. Burada diğer grupların izinlerinin bir önemi olmadığını düşünebilirsiniz.
find / -type f -perm -o=w -name "*.sh"

“Others” grubu “-o” ile belirtilmektedir. “=w” ise de yazma izni olduğunu söyler.


Soru 10: “/var/log” dizininde olup root kullanıcısına ait olan ve SUID iznine sahip tüm dosyaları bulmak
find /var/log -type f -user root -perm -u=s

“s” burada SUID bitini temsil etmektedir.


Soru 11: “777” sahip olmayan tüm dosyaları bulmak
find / -type f ! -perm 777

Buraya kadar olan kısımda hep bir şeye eşit olan izinleri aradık. Ama “find” komutu ile bir istediğiniz şeye eşit olmayan şeyleri de arayabilirsiniz.


Soru 12: 20 gündür üzerinde değişiklik yapılmamış dosyaları bulmak
find / -mtime 50

“find” Komutu ve Fazlası

Buraya kadar olan kısımda “find” komutunun güzel özelliklerini öğrendik. Şimdi ise sizlere “find” komutunun bir başka özelliğinden bahsetmek istiyorum.

“-exec” parametresi ile yeni bir komutu çalıştırabilirsiniz. Bunu sizlere bir şu şekilde göstermek isterim:

Eğer siz “find” komutu ile olan bir dosyayı ararsanız ve “-exec” parametresini kullanırsanız yukarıdaki örneklerde gördüğünüz gibi terminal komutları çalıştırabilirsiniz. Ben örnek olması açısından “/root/Desktop” dizininde daha önceden olan “HACK.php” dosyasını aramasını için find komutunu çalıştırdım ve ardından “-exec” parametresini kullanarak “whoami”, “id” ve “ls -a” komutlarını çalıştırdım. Bunun öğrenmenizdeki amaç ise ileride sızdığınız makinelerde yani CTF yarışmalarında ” privilege escalation” yani ayrıcalık yükseltmek için kullanabilirsiniz.


Buraya kadar olan kısımda sizlere “find” komutu ile ilgili detaylı bilgi vermeye çalıştım. Umarım sizlere bir faydası olmuştur.

Bir sonraki yazımda görüşmek üzere….

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

WordPress.com'da Blog Oluşturun.

Yukarı ↑

%d blogcu bunu beğendi: