Symlink Nedir?
Symlink ile Web Hacking
Önce “Symlink”in ne olduğu hususuna değineceğim. Linux işletim sistemlerinde tüm dosyalar hiyerarşik bir düzende klasörlerin (dizinlerin) içerisinde tutulurlar. Bir klasör içerisinde bulunan dosyayı başka bir klasör içerisinde kullanmak istiyor isek ve bu dosyayı bulunduğu klasör dışında bir yere kopyalamak istemiyor isek imdadımıza “Symlink” yetişiyor. Symlink adından da anlaşılacağı üzere bir sembolik bağ oluşturur. Bu yöntem ile üzerinde çalıştığımız dosya bir yerde olacak ve biz ona istediğimiz dizinden erişebileceğiz. Temel saldırı mantığı da burada oluşmaktadır işte…
Linux’ta bulunan (ln) komutu bu sembolik bağı oluşturmak için kullanılır. Bir sunucuya erişildiğinde eğer gerekli güvenlik önlemleri alınmış ise kritik dosyaların içeriği okunamamaktadır. Örneğin, configuration.php dosyası okunamıyor. Symlink yaparak uzaktan bu dosya rahatlıkla okunabilir. Web sunucumuzun güvenliğini sağlamış olalım. Sunucumuzda Shell-Exploitlerin çalıştığı fonksiyonların devre dışı olduğunu varsayalım. Böyle bir web sunucusunda exploitler çalışmayacaktır.
“ln –s /root/eyup/klasor/dosya.txt /var/www/eyup.txt”
Bu komut ile /root/eyup/klasor/ dizininde bulunan dosya.txt dosyası /var/www/ dizininde eyup.txt dosyasına symlink’lendi. Böylece erişemediğimiz dosya.txt dosyasına Symlink üzerinden erişerek /var/www/eyup.txt dizininden okuyabiliriz. Bu yöntem ile güvenlik önlemlerinin bir çoğu bypass edilmiş olacaktır.
PHP’de de bu aşağıdaki gibi olacaktır.
<?php
$dosya = ‘../../home/asia/configuration.php’;
$yeniYol = ‘../../home/erica/sym/1.txt’;
symlink($dosya, $yeniYol);
echo readlink($yeniYol);
?>
Bu PHP kodu ile /home/asia/ dizininde bulunan configuration.php dosyasını okuyarak /home/erica/sym/ dizininde 1.txt olarak symlink’ledik. Normal şartlarda erişemediğimiz configuration.php dosyasına Symlink üzerinden erişerek, dosya içerisinde bulunan yolları okuduk.
Örnek bir uygulama yapalım.
Resim-01
Resim-01’de göreceğiniz üzere www.eyupcelik.com.tr sitesine yüklenmiş bir Shell mevcut. Bu shellde devre dışı bırakılmış fonksiyonları görebilirsiniz. Resim-02’de de www.fundayilmaz.com.tr sitesinde bulunan Symlink Shell mevcuttur. Biz www.fundayilmaz.com.tr adresinde bulunan Shell den faydalanarak www.eyupcelik.com.tradresinde bulunan konfigürasyon dosyasına erişeceğiz.
Bunun için Symlink Shell’ine /home/kullanıcıadı/public_html/config.php – dosya adı olarakta 1.txt yazacağız.
Resim-03
Okumak istediğimiz ve Symbol linklemek istediğimiz dosya adlarını yazıp symlink’i tıkladıktan sonra 1.txt adındaki dosyamıza erişerek içeriğini okuyabiliriz.
Resim-04
Symlink üzerinden okuduğumuz 1.txt dosyası Resim-04’teki gibidir.
Symlink Saldırısını Engelleme
Symlink saldırılarını engellemek için PHP-Symlink fonksiyonunu deaktif etmemiz gerekir. Bunun için php.ini dosyamızda bulunan disable_functions satırını disable_functions= “show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open, symlink” şeklinde değiştirip apache sunumuzu restart etmemiz gerekir.
Symlink Engellemesini Bypass Etme
Symlink saldırılarını disable_functions ile engellemiş isek, bu güvenlik önlemi de bypass edilebilir. Bunu bypass etmek için Symlink shell’inin bulunduğu klasör içerisine bir php.ini dosyası yükleyerek bu fonksiyon bypass edilebilir. Yükleyeceğimiz php.ini dosyası içerisine disable_fuctions= “” yazıp, php.ini dosyasını Symlink shell’inin bulunduğunu dizine yükleyerek güvenlik yöntemini atlatabiliriz. Bu bypass yöntemini engellemek için de php.ini dosyasının sadece bir yerden okunması, dış php.ini dosyalarının okunmasını engelleyerek atlatabilirsiniz.
Konu ile ilgili olarak hazırlamış olduğum videoya aşağıdan erişebilirsiniz.
Symlink Shell : http://www.eyupcelik.com.tr/CehLabs/Symlink.rar
Yardımlarından dolayı İsmail SAYGILI’ya teşekkür ederim.
Güvenli günler.
Kaynak: http://www.eyupcelik.com.tr/ceh-dokuman/symlink-ile-web-hacking-guvenlik-ve-bypass
Hiç yorum yok:
Yorum Gönder