Komut enjeksiyonu nedir?
Komut enjeksiyonu (command injection), bir uygulamanın kullanıcı girdisini işletim sistemi komutuna güvensiz biçimde eklemesi sonucu saldırganın sunucuda kendi komutlarını çalıştırabildiği açıktır. Komutlar, uygulamanın çalıştığı kullanıcının yetkileriyle yürütülür.
Açık genellikle bir uygulamanın dosya dönüştürme, ping, DNS sorgusu ya da arşivleme gibi işlerde dış programı kabuk (shell) üzerinden çağırmasından doğar. Girdideki özel karakterler, komutun sonuna yeni komut eklenmesine imkân tanır.
Nasıl çalışır?
Uygulama, kullanıcıdan aldığı bir değeri komut dizgisine yapıştırıp kabuğa verdiğinde, kabuk komut ayırıcılarını (noktalı virgül, boru, ters tırnak, && gibi) kendi sözdizimi olarak yorumlar. Saldırgan bu karakterlerle asıl komuttan sonra istediği komutu çalıştırabilir.
Sonuç; dosya okuma, veri sızdırma, kalıcı arka kapı bırakma ya da sunucuyu daha geniş bir saldırının basamağı hâline getirme olabilir. Çıktı kullanıcıya dönmese bile (kör enjeksiyon) komut çalışmış olabilir.
Sunucu ve hosting ortamında
PHP’de komut çalıştıran işlevler, yönetim betikleri, görsel işleme araçları ve eski CGI programları tipik kaynaklardır. Web sunucusu kullanıcısı genellikle sınırlı yetkili olsa da, saldırgan bu erişimi yetki yükseltme için bir başlangıç noktası olarak kullanabilir.
- Gerek duyulmayan PHP işlevlerini
disable_functionsile kapatmak etkiyi azaltır. - Hesap yalıtımı, bir sitenin ele geçirilmesinin diğerlerine yayılmasını zorlaştırır.