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
DevSecOps Nedir? 04 Aralık 2024
Güvenli Yazılım Geliştirme Standartları 07 Kasım 2024
Web Uygulama Güvenliği 04 Kasım 2024
Güvenli Yazılım Geliştirme Süreçleri 02 Kasım 2024
www.irfankocak.com
İrfan KOÇAK - Tüm Hakları Saklıdır