Okan Köse tarafından yazılmıştır.
Code & Commands Injections
PentesterLab-Web For Pentester serimize devam ediyoruz.
Bu yazımızda Code & Commands Injections örneklerini inceliyelim.
Code Injection zafiyeti mantık olarak SQL Injections zafiyetine çok benzer. Kullanıcıdan alınan girdilerin kontrol edilmemesinden oluşan bir zafiyet çeşitidir.
Nasıl SQL Injection zafiyetinde girdi olarak SQL kodları kullanıyorsak, Code Injectıon zafiyetinde de kullanılan programlama dilinde kodlar verilir.
İlk örneğimizi açtığımızda bizleri böyle bir sayfa karşılıyor.
Code & Commands Injections
Burada name parametresine verilen değer ekrana yansımakta.Bu değerimizin sonuna “ ve ; yazarak ilk ifadeyi sonlandıralım ve kodlarımızı yazalım.
“; echo “ PwnLabMe”;//
Girdimizin sonundaki // ifadesi bizi syntax hatasından kurtarıyor ve ekrana Hello hacker PwnLabMe yazdığını görüyoruz.
Code & Commands Injections
Buna benzer olarak PHP’nin system fonksiyonunu kullanarak dizin içerisindeki dosyaları listeleyebiliriz.
“;system(“ls”);//
Code & Commands Injections
İkinci örneğimize baktığımızda kullanıcı listesini görüyoruz.
Code & Commands Injections
Usort işlevi, çıktıyı kullanıcı tarafından kontrol edilen bilgilere göre sıralamak için işlevi dinamik olarak oluşturmak üzere create_function işleviyle birlikte yaygın olarak kullanılır.
Ancak bir filtreleme yapılmazsa kodun yürütülmesine yol açabilir.
);}system(‘ls’);%23
Code & Commands Injections
Ya da );}system(‘cat /etc/passwd’);//
Code & Commands Injections
Code & Commands Injections
Burada extra bir durum söz konusu. Burada php’nin preg_replace() fonksiyonu kullanılmış. Bu fonksiyon kullanımı şu şekilde:
<?php
echo preg_replace($_GET[“pattern”], $_GET[“new”], $_GET[“base”]);
?>
preg_replace() => Belirli bir dizedeki bir desenin (veya bir desen dizisinin) eşleşmelerinin bir alt dizeyle (veya bir alt dizeler dizisi) değiştirildiği bir dize döndürür. Preg_replace_eval (/ e) hakkında detaylı araştırma yapabilirsiniz.
phpinfo()&pattern=/lamer/e&base=Hello lamer
Code & Commands Injections
Burada regex ifadenin sonuna e yazmamız ile $new deki ifade PHP tarafından fonksiyon olarak yorumlanıyor.Bu şekilde istediğimiz phpinfo() fonksiyonunu çalıştırabildik.
Dizin içerisideki dosyaları görmek için;
system (“ls”)&pattern=/lamer/e&base=Hello lamer
Code & Commands Injections
Code Injection da son örneğimiz de hacker’ yaptığımızda hata alıyoruz. Aldığımız bu hatadan
Code & Commands Injections
phpnin assert() fonksiyonunun kullanıldığını görebiliyoruz. Burada şu ifadeyi yazarak istediğimiz fonksiyonu çalıştırabiliriz.
’.system(“ls”);%23
Code & Commands Injections
İlk örneğimizi inceliyelim.
Code & Commands Injections
Commend Injectin zafiyetleri girdilerin kontrol edilmediği durumlarda ortaya çıkmaktadır.Şimdi örneğimizdeki URL’e ;ls komutunu girelim.
;ls
Code & Commands Injections
Bu örnek üzerinde herhangi bir kontrol yapılmadığı için istediğimiz komutu çalıştırabiliyoruz.
;cat /../../../../etc/passwd
Code & Commands Injections
Bu örneğimizde ;ls komutunu girdiğimizde aldığımız hatadan ıp kontrolünün yapıldığını anlıyoruz.
Code & Commands Injections
%0a karakteri ile alt satıra geçtiğimizde bu kontrolü geçiyoruz ve istediğimiz komutu çalıştırıyoruz.
%0acat /../../../../etc/passwd
Code & Commands Injections
Son örneğimizde de %0acat /../../../../etc/passwd girdisini verdiğimizde bir redirect(yönlendirme) olduğunu görüyoruz. URL’imiz yine ip=127.0.0.1 olarak kalmakta.
Code & Commands Injections
Bu durumda tarayıcı üzerinden verdiğimiz girdilerin çalışıp çalışmadığını göremiyoruz.Ne olduğunu anlamak için GET isteği gönderelim.
Code & Commands Injections
Gelen sonuçta etc/passwd dosyası yazdırılmış oldu.
Code & Commands Injections
[TR] [PentesterLab] Web For Pentester – Code & Commands Injections
Code & Commands Injections
PentesterLab-Web For Pentester serimize devam ediyoruz.
Bu yazımızda Code & Commands Injections örneklerini inceliyelim.
Code Injections 1. Örnek
Code Injection zafiyeti mantık olarak SQL Injections zafiyetine çok benzer. Kullanıcıdan alınan girdilerin kontrol edilmemesinden oluşan bir zafiyet çeşitidir.
Nasıl SQL Injection zafiyetinde girdi olarak SQL kodları kullanıyorsak, Code Injectıon zafiyetinde de kullanılan programlama dilinde kodlar verilir.
İlk örneğimizi açtığımızda bizleri böyle bir sayfa karşılıyor.
Code & Commands Injections
Burada name parametresine verilen değer ekrana yansımakta.Bu değerimizin sonuna “ ve ; yazarak ilk ifadeyi sonlandıralım ve kodlarımızı yazalım.
“; echo “ PwnLabMe”;//
Girdimizin sonundaki // ifadesi bizi syntax hatasından kurtarıyor ve ekrana Hello hacker PwnLabMe yazdığını görüyoruz.
Code & Commands Injections
Buna benzer olarak PHP’nin system fonksiyonunu kullanarak dizin içerisindeki dosyaları listeleyebiliriz.
“;system(“ls”);//
Code & Commands Injections
Code Injections 2. Örnek
İkinci örneğimize baktığımızda kullanıcı listesini görüyoruz.
Code & Commands Injections
Usort işlevi, çıktıyı kullanıcı tarafından kontrol edilen bilgilere göre sıralamak için işlevi dinamik olarak oluşturmak üzere create_function işleviyle birlikte yaygın olarak kullanılır.
Ancak bir filtreleme yapılmazsa kodun yürütülmesine yol açabilir.
);}system(‘ls’);%23
Code & Commands Injections
Ya da );}system(‘cat /etc/passwd’);//
Code & Commands Injections
Code Injections 3. Örnek
Code & Commands Injections
Burada extra bir durum söz konusu. Burada php’nin preg_replace() fonksiyonu kullanılmış. Bu fonksiyon kullanımı şu şekilde:
<?php
echo preg_replace($_GET[“pattern”], $_GET[“new”], $_GET[“base”]);
?>
preg_replace() => Belirli bir dizedeki bir desenin (veya bir desen dizisinin) eşleşmelerinin bir alt dizeyle (veya bir alt dizeler dizisi) değiştirildiği bir dize döndürür. Preg_replace_eval (/ e) hakkında detaylı araştırma yapabilirsiniz.
phpinfo()&pattern=/lamer/e&base=Hello lamer
Code & Commands Injections
Burada regex ifadenin sonuna e yazmamız ile $new deki ifade PHP tarafından fonksiyon olarak yorumlanıyor.Bu şekilde istediğimiz phpinfo() fonksiyonunu çalıştırabildik.
Dizin içerisideki dosyaları görmek için;
system (“ls”)&pattern=/lamer/e&base=Hello lamer
Code & Commands Injections
Code Injections 4. Örnek
Code Injection da son örneğimiz de hacker’ yaptığımızda hata alıyoruz. Aldığımız bu hatadan
Code & Commands Injections
phpnin assert() fonksiyonunun kullanıldığını görebiliyoruz. Burada şu ifadeyi yazarak istediğimiz fonksiyonu çalıştırabiliriz.
’.system(“ls”);%23
Code & Commands Injections
Commands Injections 1.Örnek
İlk örneğimizi inceliyelim.
Code & Commands Injections
Commend Injectin zafiyetleri girdilerin kontrol edilmediği durumlarda ortaya çıkmaktadır.Şimdi örneğimizdeki URL’e ;ls komutunu girelim.
;ls
Code & Commands Injections
Bu örnek üzerinde herhangi bir kontrol yapılmadığı için istediğimiz komutu çalıştırabiliyoruz.
;cat /../../../../etc/passwd
Code & Commands Injections
Commands Injections 2.Örnek
Bu örneğimizde ;ls komutunu girdiğimizde aldığımız hatadan ıp kontrolünün yapıldığını anlıyoruz.
Code & Commands Injections
%0a karakteri ile alt satıra geçtiğimizde bu kontrolü geçiyoruz ve istediğimiz komutu çalıştırıyoruz.
%0acat /../../../../etc/passwd
Code & Commands Injections
Commands Injections 3.Örnek
Son örneğimizde de %0acat /../../../../etc/passwd girdisini verdiğimizde bir redirect(yönlendirme) olduğunu görüyoruz. URL’imiz yine ip=127.0.0.1 olarak kalmakta.
Code & Commands Injections
Bu durumda tarayıcı üzerinden verdiğimiz girdilerin çalışıp çalışmadığını göremiyoruz.Ne olduğunu anlamak için GET isteği gönderelim.
Code & Commands Injections
Gelen sonuçta etc/passwd dosyası yazdırılmış oldu.
Code & Commands Injections
Moderatör tarafında düzenlendi: