OS Command Injection kullanıcıdan alınan verilerin doğrudan işletim sistemi komutları olarak işlenmesi durumunda gerçekleşir. Örneğin, bir web uygulaması belirli dosya işlemleri veya ağ komutları için kullanıcı girdilerini bir sistem komutuna dahil ettiğinde, bu girdi manipüle edilerek sisteme istenmeyen komutlar iletilebilir. PHP, Python veya Perl gibi dillerde kullanılan exec(), system() veya shell_exec() gibi fonksiyonlar aracılığıyla sıkça yapılan çağrılarda bu zaafiyet ortaya çıkabilir.
ping komutuna eklenen ; rm -rf / gibi bir komut tüm dosya sistemini silebilir.Senaryo 1: Kullanıcıdan alınan IP adresini ping komutu ile kontrol eden bir PHP betiği bulunmaktadır. Ancak girdi doğrulaması yapılmadığı için enjeksiyon saldırısına açık hale gelir:

Kodda $ip değişkeni doğrudan shell_exec fonksiyonuna iletiliyor. Saldırgan, ip parametresine özel bir komut girerek betiği kötüye kullanabilir.
Saldırgan aşağıdaki gibi bir URL kullanarak sisteme yetkisiz erişim sağlayabilir:
http://example.com/ping.php?ip=127.0.0.1; ls
Bu komut, ping işlemine ek olarak ls komutunu çalıştırarak sunucuda bulunan dosyaları listeleyebilir.
Senaryo 2: Command Chaining saldırganların sıkça başvurduğu yöntemlerden biri komut zincirlemedir. Örneğin, bir web uygulaması bir kullanıcıdan giriş alıp onu bir komutla birleştiriyorsa, bu girdiyle başka bir komut zincirlenerek kötü amaçlı işlemler yapılabilir.

Bu örnekte saldırgan filename parametresine şu değeri verebilir:
filename=test.txt; rm -rf /var/www/html
Sonuç
cat test.txt komutunu çalıştırarak test.txt içeriğini ekrana basar.; karakteri ile yeni bir komut zincirlenir: rm -rf /var/www/html, bu da belirtilen klasörü tamamen siler.Bazı sistemlerde SQL ve OS komutları bir arada kullanılabilir ve SQL enjeksiyonu yoluyla OS komutları enjekte edilebilir.
Aşağıdaki kodda kullanıcıdan alınan username doğrudan bir SQL sorgusuna ekleniyor ve sorgunun sonucu işletim sistemi komutu ile birleştiriliyor:

Burada, username değeri doğrudan OS komutuna dahil edilmiştir. Bir saldırgan, aşağıdaki gibi bir komut enjekte edebilir:
username=admin; rm -rf /var/www/html
Bu durumda awk komutuna eklenen rm -rf /var/www/html sunucudaki dosyaların silinmesine yol açacaktır.
Bu tür enjeksiyon saldırılarından kaçınmak için SQL sorgularında prepare ve bind işlemleri kullanılmalı ve işletim sistemi komutları için escapeshellarg gibi güvenlik önlemleri alınmalıdır.
escapeshellarg() veya escapeshellcmd() gibi fonksiyonlar kullanılarak girdiler OS komutlarına güvenli bir şekilde iletilebilir.subprocess.run kullanılırken shell=True argümanını kullanmamak enjeksiyonu önlemeye yardımcı olur.file_get_contents veya unlink gibi yerleşik fonksiyonları kullanılmalıdır.urlencode veya htmlspecialchars gibi işlevler kullanılarak giriş verileri güvenli hale getirilmelidir.Python veya PHP gibi dillerin sunduğu güvenli kütüphaneler kullanılabilir.;, &&, |) filtreleyebilir ve güvenlik seviyesini artırabilir.Bu önlemler OS Command Injection ataklarına karşı güçlü bir savunma sağlayacak ve uygulama güvenliğini artıracaktır.
OS Command Injection Nedir? - Yorumlar
Yapılan Yorumlar
BENZER İÇERİKLERİlginizi çekebilecek diğer içerikler
DDoS Protection & Mitigation 26 Eylül 2025
Bot Protection 06 Eylül 2025
IAST ile Zafiyet İnceleme 17 Aralık 2024
RASP (Runtime Application Self-Protection) Nedir? 16 Aralık 2024
www.irfankocak.com
İrfan KOÇAK - Tüm Hakları Saklıdır