Kısa bir süre önce Django’ya başladım. Kendimi geliştirmek adına ufak bir kaç uygulama yazdım. Bu yazı, Command Injection açığı ve Django’da örneğini içeriyor olacak. Tüm dosyalara GitHub üzerinden ulaşabilirsiniz.
Code injection ile karıştırılmamalıdır. Code injection saldırılarında, uygulamanın yazıldığı dilde komutlar ile çalışırsınız fakat command injection saldırılarında direk sistem komutları ile çalışırsınız.
Açıklama
Kod Enjeksiyonu, daha sonra uygulama tarafından yorumlanan / yürütülen kod ekleme kodundan oluşan saldırı türleri için genel terimdir. Bu tür saldırılar güvenilmeyen verilerin kötü işlenmesinden yararlanır. Bu tür saldırılar genellikle uygun giriş / çıkış veri doğrulamasının olmaması nedeniyle mümkün olur, örneğin:
- izin verilen karakterler (standart normal ifade sınıfları veya özel)
- veri formatı
- beklenen veri miktarı
Kod Enjeksiyonu Komut Enjeksiyonundan farklıdır, çünkü bir saldırgan yalnızca enjekte edilen dilin işlevselliğiyle sınırlıdır. Bir saldırgan bir uygulamaya PHP kodu enjekte edebilir ve çalıştırabilirse, yalnızca PHP'nin yapabileceği şeyle sınırlıdır. Komut enjeksiyonu, genellikle bir kabuk bağlamında, komutları yürütmek için mevcut kodun kullanılmasından oluşur.
Risk faktörleri
- Bu tür güvenlik açıkları bulmak çok zor olmamasından daha ziyade, bulmak kolay
- Eğer bulunursa, senaryoya bağlı olarak sömürülmesi genellikle orta derecede zordur
- Başarılı bir şekilde kullanılırsa, etki gizlilik kaybını, bütünlük kaybını, kullanılabilirlik kaybını ve / veya hesap verebilirlik kaybını kapsayabilir.
Örnek
Bir geliştirici PHP eval () işlevini kullandığında ve saldırganın değiştirebileceği güvenilmeyen verileri ilettiğinde, kod yerleştirme mümkün olabilir.
Aşağıdaki örnek eval () işlevini kullanmanın tehlikeli bir yolunu göstermektedir:
Kod:
$myvar = "varname";
$x = $_GET['arg'];
eval("\$myvar = \$x;");
Giriş doğrulaması olmadığından, yukarıdaki kod bir Kod Enjeksiyonu saldırısına karşı savunmasızdır.
Örneğin:
Kod:
/index.php?arg=1; phpinfo()
Bu tür hatalardan yararlanırken, bir saldırgan sistem komutlarını yürütmek isteyebilir. Bu durumda, komut enjeksiyonu için bir kod enjeksiyon hatası da kullanılabilir,
örneğin:
Kod:
/index.php?arg=1; system('id')