Okan KÖSE tarafından 3 Ocak 2021 tarihinde yazılmıştır.
[TR] Web For Pentester – File Upload & LDAP & XML Attacks
Web For Pentester serimizde son yazımıza geldik. Bu yazımızda File Upload & LDAP & XML Attacks örneklerini inceleyeceğiz.
FILE UPLOAD 1.Örnek
İlk örneğimizde, yüklenmesine izin verilen dosya türleri konusunda herhangi bir kısıtlama yoktur.
Bunun için phpinfo işlevi ile basit bir php kodu yüklemek yeterlidir.
“<?php phpinfo(); ?>” -> phpinfo.php
Yüklenen dosyanın üzerindeki url’den php kodumuzun sunucuda çalışıp çalışmadığını kontrol edebiliriz.
FILE UPLOAD 2.Örnek
İkinci örneğimizde de bir önceki php dosyamızı yüklemeye çalıştığımızda NO PHP yazısını görüyoruz.
Burada .php uzantılı dosyaların yüklenmesini engelleyen preg_match işlevi ile bir kontrol yapıldığını anlıyoruz.
phpinfo.php olan dosyamızı phpinfo.php.test olarak değiştirelim.
Ve böylelikle bu kontrolü atlatmış oluyoruz. Yüklenen dosya üzerindeki url’den kontrol ettiğimizde bir önceki örnek ile aynı sonucu alıyoruz.
LDAP 1.Örnek
Bir web uygulaması, kullanıcıların kurumsal bir yapı içindeki diğer kullanıcıların bilgilerini doğrulamasına veya aramasına izin vermek için LDAP kullanabilir. LDAP enjeksiyon saldırılarının amacı, uygulama tarafından yürütülecek bir sorguya LDAP arama filtresi meta karakterlerini enjekte etmektir.
LDAP sorguları mantık olarak SQL’e benzer.
İlk örneğimizi incelediğimizde URL’de username ve password değerlerini görüyoruz.
Bu ilk örnekte, kullanıcı adınızı ve şifrenizi kullanarak bir LDAP sunucusuna bağlanıyorsunuz. Bu durumda, kimlik bilgileriniz geçersiz olduğu için LDAP sunucusu kimliğinizi doğrulamaz. Bununla birlikte, bazı LDAP sunucuları NULL Bind'i yetkilendirir. Boş değerler gönderilirse, LDAP sunucusu bağlantıyı bağlamaya devam eder ve PHP kodu kimlik bilgilerinin doğru olduğunu düşünür. Bind'i 2 boş değerle elde etmek için, bu parametreyi sorgudan tamamen kaldırmanız gerekir.
LDAP sorguları mantık olarak SQL’e benzer.
İlk örneğimizi incelediğimizde URL’de username ve password değerlerini görüyoruz.
Bu ilk örnekte, kullanıcı adınızı ve şifrenizi kullanarak bir LDAP sunucusuna bağlanıyorsunuz. Bu durumda, kimlik bilgileriniz geçersiz olduğu için LDAP sunucusu kimliğinizi doğrulamaz. Bununla birlikte, bazı LDAP sunucuları NULL Bind'i yetkilendirir. Boş değerler gönderilirse, LDAP sunucusu bağlantıyı bağlamaya devam eder ve PHP kodu kimlik bilgilerinin doğru olduğunu düşünür. Bind'i 2 boş değerle elde etmek için, bu parametreyi sorgudan tamamen kaldırmanız gerekir.
LDAP 2.Örnek
LDAP söz dizim yapısı (cn=[INPUT]) şeklindedir. * karakteri LDAP’te sonu tamamlamak için kullanılır yani usarname kısmına ‘ hacke* ’ koyduğumuzda ‘ hacker ’ olarak tanındığımızı göreceksiniz. Bunun sebebi hacke ifadesinden sonra gelebilecek tüm ihtimalleri kabul edecek şekilde ayarlamış olmamız.
SQL Injection’da kullandığımız boolean(OR 1=1) mantığını kullanarak, herhangi bir şifre verip hacker olarak giriş yapabiliriz.
?name=hacker)(cn=*))%00&password=PwnlabMe
Burada hacker ifadesinden sonra gelen cn ifadesine ne verilirse verilsin kabul edecek şekilde ayarladık.
%00 ile de sonrasında gelen ifadeleri geçersiz kıldık.
XML 1.Örnek
İlk örneğimizde URL’de xml belirteci görüyoruz. XML belirtecinden sonra kendi oluşturduğumuz XML dosyasını verdiğimiz taktirde istediğimiz XML kodlarımızı çalıştırabiliriz. Eğer /etc/passwd dosyasını yazdırmak istersek aşağıdaki şekilde olacaktır.
<!DOCTYPE test [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><test>&xxe;</test>
Ve bu kullanacağımız XML dosyasını URL encoding yaptığımızda son hali aşağıdaki gibi olacaktr.
%3C!DOCTYPE%20test%20%5B%3C!ENTITY%20xxe%20SYSTEM%20%22file%3A%2F%2F%2Fetc%2Fpasswd%22%3E%5D%3E%3Ctest%3E%26xxe%3B%3C%2Ftest%3E
XML 2.Örnek
Bu örnekte kod, kullanıcının girişini bir XPath ifadesi içinde kullanır. XPath, bir XML belgesinden düğümleri seçen bir sorgu dilidir. XML belgesini bir veritabanı olarak ve XPath'i bir SQL sorgusu olarak hayal edin. Sorguyu değiştirebilirseniz, normalde erişiminizin olmaması gereken öğeleri görebiliriz.
Tıpkı SQL enjeksiyonu gibi, XPath de bunları deneyebiliriz.
‘ and ‘1’=’1
‘ or ‘1’=’0
‘ and ‘1’=’0
‘ or ‘1’=’1
XPath ifadesinin geri kalanını yorumlamak için bir NULL BYTE kullanabiliriz. Bunu %00 olarak kodlamanız gerekir. Sözdizimini düzgün bir şekilde tamamlamak için ayrıca ‘ ] ‘ eklememiz gerekir.
Yükümüz artık hacker ']%00 veya tüm sonuçları istiyorsak hacker’ or 1= 1]%00 gibi olmalıdır.