30 Mayıs 2010 Pazar

19: OS Commanding


İşletim Sistemi Komut Enjeksiyonu: OS Commanding - OSI

  • Tanımı: Saldırganın izinsiz olarak web uygulamasını kullanarak işletim sisteminde komut çalıştırması.
  • GENEL: Saldırıları genel olarak şu şekilde sloganlaştırabiliriz:
    • Veritabanında komut çalıştırılması,
    • PHP'de komut çalıştırılması,
    • İşletim sisteminde komut çalıştırılması,
    • Browser'da komut çalıştırılması.
  • Bu açıklık, uygulama yazılımının kullanıcıdan gelen girdiyi kontrol etmeden işletim sistemine göndereceği komutları oluşturmak için kullanması ile oluşur.
  • Senaryo:
    • Saldırgan normal parametrelerin içine OS komutları da koyarak uygulamaya gönderir (";" karakteri ayraç, kilit rol taşıyor!)
    • Uygulama, aldığı bu değerin OS komut bölümünü alır ve muhtemelen başka bir komut parçası ile birleştirerek OS komut yorumlayıcısına yada direk işletim sistemine gönderir.
    • OS bu komutu çalıştırır ve cevabını uygulamaya geri gönderir.
    • Uygulama, OS'in gönderdiği cevabı sayfayı oluşturmak için kullanır. Cevap sayfanın içinde olabilir yada sayfanın içeriğinden cevap anlaşılabilir.
  • Örnek bir kod:
public String executeCommand(String hostName) {
    Runtime rt = Runtime.getRunTime();
    rt.exec("cmd.exe /C nslookup " + hostName);
}
// Kullanıcıdan alınan hostName parametresi herhangi bir kontrole tabi tutulmadığı için OS Commanding injection açıklığına tamamen açık.
  • Neden olduğu problemler:
    • Sunucu ele geçirme
    • Hizmet dışı bırakma
  • Whitehatsec'in 2009 istatistiklerinde komut enjeksiyonu açıklığı yok. Eskiden PERL'da ve C'de varmış, artık API'ler çağırılarak komut çalıştırılıyor. Yine de, Linux'te arayüzü olmayan open source uygulamalar için arayüz yazan gönüllülerin yazdıkları uygulamalarda bu açıklıklara rastlanabiliyor.
  • Test teknikleri: URL'deki id parametresine şu değerler yollanır: 
    • ?id=/bin/ls | (| operatörü özellikle Perl tabanlı uygulamalarda kullanılabilir)
    • ?id=;cat /etc/passwd (Unix tabanlı işletim sistemleri üzerinde)
    • ?id=; cat /../etc/X11/../passwd (Kara liste yönetmiyle komut enjeksiyonu saldırılarını engellemeye çalışan uygulamalarda /etc/passwd dizgisi kara listededir, bu şekilde bir ayak oyunuyla kara liste kolayca aşılabilir)
    • "?id=| dir C:\" yada "?id=|| dir C:\" yada "?id=& dir C:\" yada "?id=&& dir C:\"

Hiç yorum yok:

Yorum Gönder

Web Uygulama Sızma Testleri İçin Kontrol Listeleri - V

Checklist for Web App Pentesting - V 6. Veri Denetimi (Data Validation) Testleri 6.1 Girdi Denetimi Bütün girdiler denetlenmelidir....