📚 Command Injection Öğren & Ustalaş
Teori, bypass teknikleri, gerçek dünya örnekleri ve koruma stratejilerini kapsayan kapsamlı rehber
Command Injection Nedir?
Command Injection, saldırganların bir uygulamayı barındıran sunucuda keyfi işletim sistemi komutları çalıştırmasına olanak tanıyan bir güvenlik zafiyetidir. Bir uygulama güvensiz kullanıcı girdisini sistem shell'ine geçirdiğinde ortaya çıkar ve saldırganların kötü amaçlı komutlar çalıştırmasını, hassas dosyalara erişmesini veya sistemi tamamen tehlikeye atmasını sağlar.
Command Injection Nasıl Çalışır
Saldırganlar, sistem komutlarına aktarılan kullanıcı girdisine shell meta karakterleri (;, &&, ||, |, `) enjekte ederek komut enjeksiyonunu istismar ederler. Bu meta karakterler birden fazla komutu zincirlemeye veya çıktıyı yönlendirmeye olanak tanır.
❌ Güvensiz Kod Örneği
1// PHP - Unsafe command execution2$ip = $_GET['ip'];3$output = shell_exec("ping -c 4 " . $ip);4echo $output;56// Attacker input: 127.0.0.1; cat /etc/passwd7// Executes: ping -c 4 127.0.0.1; cat /etc/passwd✅ Güvenli Kod
1// PHP - Input validation & escapeshellarg()2$ip = $_GET['ip'];3if (filter_var($ip, FILTER_VALIDATE_IP)) {4 $output = shell_exec("ping -c 4 " . escapeshellarg($ip));5 echo $output;6} else {7 die("Invalid IP");8}Komut Enjeksiyonu Türleri
; && || | gibi ayırıcılar kullanarak basit komut zincirleme
Doğrudan çıktı yok; zaman gecikmesi veya bant dışı kanallar kullanın
Kodlama, gizleme, joker karakterler kullanarak WAF/filtreleri atlatma
Reverse shell, backdoor, yetki yükseltme ile tam RCE
Ne Olabilir?
- 💣Uzaktan Kod Çalıştırma:
Keyfi işletim sistemi komutları çalıştırma, backdoor kurma, kullanıcı hesapları oluşturma
- 📂Veri Sızdırma:
Hassas dosyaları okuma (/etc/passwd, SSH anahtarları), veritabanı kimlik bilgileri, kaynak kodu
- 🏢Sistem Tehlikesi:
Tam sunucu ele geçirme, yanal hareket, root'a yetki yükseltme
- 🦠Kötü Amaçlı Yazılım Dağıtımı:
Fidye yazılımı, kripto madencileri, botnet ajanları, kalıcı backdoor'lar dağıtma
Command Injection Nasıl Önlenir
- ✓Sistem Komutlarından Kaçının: Mümkün olduğunca shell komutları yerine dil API'lerini kullanın
- ✓Girdi Doğrulama: İzin verilen karakterleri beyaz listeye alın, özel shell meta karakterlerini reddedin
- ✓Escape Fonksiyonları: PHP'de escapeshellarg() / escapeshellcmd(), Python'da shlex kullanın
- ✓Parametreli Komutlar: Kullanıcı girdisini asla komutlara birleştirmeyin
- ✓En Az Yetki İlkesi: İşlemleri minimum izinlerle çalıştırın, sandboxing kullanın
- ✓WAF & İzleme: WAF kuralları dağıtın, şüpheli komut kalıplarını izleyin