OWASP TOP 10 | Command Injection
Command Injection açığı bir web uygulaması üzerinde alınan girdilerin kontrol edilmediği durumlarda web sayfasının çalıştığı sunucu üstünde
işletim sistemi komutları çalıştırmamıza yarayan bir açıktır.Zaafiyeti sömürmesi zor değildir. Uzak bağlantı alma,dosya ekleme,silme işlemlerini
komut enjekte ederek yapabiliriz. Nasıl yapıldığına bakalım.
PayHub çevrimiçi para transfer hizmeti sunan uygulamadır. Saldırganımız Bob işi yine üstlendi ve penetrasyon testi yapmaya başladı.
uygulama üzerinde araştırma yapan Bob iki adımlı doğrulama seçeneğinin olduğunu görür
İki adımlı doğrulamayı aktif etmek için telefon numarasını girer.
Web proxy ile HTTP isteklerini incelemeye başlar. Web Proxynin ne olduğunu bilmiyorsanız Owasp ZAP adlı konumu inceleyebilirsiniz.
Anlatıma devam etmeden gelin iki adımlı doğrulama uygulamasının kaynak kodlarını inceleyelim.
Gördüğünüz gibi API_URL ile phoneNumber değişkeni ile birleştirilerek curl ile çağrılıyor.
HTTP isteklerini düzenleyerek kod çalıştırmayı deniyor saldırganımız telefon numarasının ardından 2-666-777-8888;xxx herhangi bir komut gönderiyoruz
ve HTTP response(yanıt) tarafında command not found hatası dönderdiğini görüyoruz.
anlamlı bir komut gönderdiğimizde çalıştırdığını görüyoruz. cat /etc/password komutuyla etc dizini altındaki password dosyasının içerisini ekrana
bastırıyoruz.İstediğimiz komutu enjekte etmiş olduk command injection açığını bu şekilde sömürmeye çalıştık
kaynak kodların fixlenmiş halini inceleyelim boolean tipinde oluşturulan bir method ile gönderilen telefon numarası PHONE_REGEX stringi ile
karşılaştırılarak filtreleme işlemi yapıyoruz.
unix tabanlı sistemlerde komut enjekte ederken ”;” , “&”, “&&”, “ | “ ifadelerini kullanabilirsiniz.
yukarıda gördüğünüz gibi çıktılar aldık bu çıktıların birbirlerinden farklarını araştırıp kendiniz deneyerek deneyimleyebilirsiniz.