Şubat 2018

6 Şubat 2018 Salı

Code Injection | Web For Pentester



Code Injection Nedir?

Code Injection kritik seviyeli güvenlik zafiyetlerinde listenin başında gelen güvenlik zaafiyetidir.

İstismar olarak SQL injectiona çok benzese de aralarında ki fark birinde sql sorguları çalıştırırken diğerinde ise kullanılan programlama dilinin fonksiyonlarını çalıştırmaktır

Sistemin üzerinde koşturduğu web yazılımda komut çalıştırma fonksiyonları içerisine,
kullanıcılardan veri alan değişkenlerin filtrelenmeden dahil edilmesinden kaynaklanmaktadır.

Web For Pentester CodeInjection

Web For Pentester'ı kurduktan sonra example 1'e gidiyorum.

Code Injection olan page gittik php ile yazılmış bir web uygulaması ile karşılaştık yukarda belirttiğim gibi kullanılan programlama dilinin fonksiyonlarını çalıştırabiliyoruz.


example1.php dosyasının name değişkeni ile hacker'ı ekrana bastırdığını görüyoruz. Hacker dan sonra da üç adet ünlem gelmiş özel karakterlerden biri olan çift tırnak koyarak bir hata almaya çalışıyorum.



Çift tırnaktan sonra "syntax" hatası aldık. Burdan koyduğumuz çift tırnağın söz dizimini bozduğunu,  burdanda son kullanıcıdan gelen girdi değerlerini filtrelemediğini anlayabiliriz.

Şimdi hızlı bir şekilde phpinfo dosyasını okumaya çalışalım. Burda temelde olsa PHP bilgisi çok önemli.





Başarılı bir şekilde phpinfo aldıktan sonra farklı birkaç tane daha php fonksiyonu deneyip example1.php kodumuzu açıp zaafiyet neresinde inceleyeceğiz.

"system" fonksiyonu ile birkaç kod yürütüyorum.

"uname -a"


"id"


"whoami"


Zaafiyetli Kodun İncelenmesi


Zaafiyetin gelen girdi değerlerini filtrelemediği için code Injection'a yaradığını yukarda öğrendik.

example1.php içeriği aşşağıdaki gibi 


<?php require_once("../header.php"); ?>

<?php 
$str="echo \"Hello ".$_GET['name']."!!!";";"
eval($str);
?>
<?php require_once("../footer.php"); ?>


bize burda gerekli kodlar;

<?php 
$str="echo \"Hello ".$_GET['name']."!!!";";"
eval($str);
?>

"eval" Fonksiyonu dışardan gelen bir değişkene atanan php kodlarını çalıştırır.

Örnek üzerinde anlatmamız gerekirse

$code = ' echo "Selam Hacker!";';

eval($code);


$_GET gibi dışardan alınan değerlerde eval fonksiyonu kesinlikle kullanılmamalıdır.

Çözüm

Ben çözüm olarak basit bir şekilde $str değişkenini FILTER_VAR Fonksiyonu ile filtre koydum
Kodu aşşağıdaki gibi değiştirip system fonksiyonu ile uname -a kodunu yürütmeye çalıştım.


<?php 
$str="echo \"Hello ".$_GET['name']."!!!";";"
eval(filter_var($str, FILTER_SANITIZIE_URL));
?>



Okuduğunuz için teşekkür eder, Güvenli Günler dilerim