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-02
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.tr adresinde 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.
{youtube}GHaO5okEc2k{/youtube}
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.
Hiç yorum yok:
Yorum Gönder