OS Command Injection
u projede, OS Command Injection açığının nasıl işlediğini ve nasıl önleneceğini gösterebiliriz. Gerçek bir uygulamada, kullanıcı girişlerini her zaman dikkatlice doğrulamak, subprocess modülü gibi güvenli yollarla komutları çalıştırmak ve en önemlisi, komut satırına doğrudan kullanıcı girdisi eklemekten kaçınmak çok önemlidir.
OS Command Injection başlığı ile Python projesi oluştururken, temel amacımız kötü niyetli kullanıcıların sistem komutlarını uygulama üzerinde çalıştırmalarına olanak veren bir güvenlik açığını simüle etmek ve bunu nasıl önleyeceğimizi göstermek olacaktır.
Proje: Basit OS Command Injection Simülasyonu
Amaç:
Kullanıcıdan input alarak, bir komut çalıştıran basit bir uygulama oluşturacağız. Bu komut daha sonra kötüye kullanılarak OS Command Injection açığını gösterecek. Ayrıca, bu tür açıkları önlemek için güvenli kod yazma yöntemlerini de göstereceğiz.
Adımlar:
-
Basit OS Komut Çalıştırma (Vulnerable)
- Kullanıcıdan girdi alacağız ve bu girdiyle bir sistem komutunu çalıştıracağız.
- Bu, OS Command Injection açığının nasıl işlediğini gösterecek.
-
Güvenli Komut Çalıştırma (Safe)
- Kullanıcıdan girdi alırken input sanitization kullanarak komut enjeksiyonunu önleyeceğiz.
1. Basit OS Komut Çalıştırma (Vulnerable):
import os
def execute_command(user_input):
command = "ls " + user_input # Basit bir komut (Linux/Mac için)
os.system(command)if __name__ == "__main__":
user_input = input("Enter directory to list: ")
execute_command(user_input)
Bu basit kod, ls
komutunu kullanıcıdan alınan inputla çalıştırıyor. Ancak, kullanıcı kötü niyetli bir giriş yaparsa, örneğin ; rm -rf /
gibi, sistemin tamamını silebilir.
2. Güvenli Komut Çalıştırma:
Bir komut enjeksiyonunu önlemek için kullanıcı girişlerini doğrulamalıyız. Python'da, komutları doğrudan os.system()
veya subprocess
ile çalıştırmak yerine, sadece izin verilen komutları çalıştırmak daha güvenli bir yaklaşımdır.
import os
import shlexdef execute_command(user_input):
# Girdi doğrulaması: sadece harf ve rakam içeren komutlar kabul edilsin
if all(c.isalnum() or c.isspace() for c in user_input):
command = "ls " + shlex.quote(user_input) # Güvenli komut
os.system(command)
else:
print("Invalid input!")if __name__ == "__main__":
user_input = input("Enter directory to list: ")
execute_command(user_input)
Bu yaklaşım, komutları shlex.quote()
ile sanitize eder ve sadece belirli karakterlerin (harfler, rakamlar, boşluklar) komutlarda kullanılmasına izin verir. Böylece, kötü niyetli girişler engellenir.
Proje Özeti:
Bu projede, OS Command Injection açığının nasıl işlediğini ve nasıl önleneceğini gösterebiliriz. Gerçek bir uygulamada, kullanıcı girişlerini her zaman dikkatlice doğrulamak, subprocess
modülü gibi güvenli yollarla komutları çalıştırmak ve en önemlisi, komut satırına doğrudan kullanıcı girdisi eklemekten kaçınmak çok önemlidir.
Tepkiniz Nedir?