PHP Remote Command Execution Engellenmesi

PHP Remote Command Execution Engellenmesi

PHP Remote Command Execution Engellenmesi,PHP bir betikte doğabilecek bir uzaktan komut çalıştırma (remote command execution) zafiyetini geçersiz kılma işlemidir.Birtakım karakterlerle veya kodlarla bu zafiyet meydana gelmekte.Bu yazımızda hem PHP için bu zafiyetin teknik açıdan fix’lenmesini,hem de olası bir bypass’a karşı daha güçlü önlem alarak PHP cgi fonksiyonlarını kapatmayı öğreneceksiniz.

Örnek bir vulnerable betik: (input’a girilen veri adında klasör oluştursun mesela.)

 <form action="" method="post"> 
<input type="text" name="klasor"><br>
 <input type="submit" value="Oluştur">
</form> 
<?php

$al = $_POST['klasor'];

exec("mkdir $al");

?>

input’a “deneme” yazarsanız,çalışma dizininde sizin için bir tane deneme adlı klasör oluşturur.
Fakat,input’a “deneme && touch x.php” yazacak olursanız,dizinde hem deneme adlı klasör oluşturacak,
hem de x.php adlı bir dosya oluşturacaktır.Bilinen tüm güvenlik zafiyetlerinin en kritiği olan rce zafiyetini
şu şekilde fix’leyebiliriz:

Bunun için iki adım var,ya cgi fonksiyonlarını engelleyeceğiz,ki bu da script’in çalışmamasına yol açacaktır,ya da
bazı rce zafiyetine yol açabilecek olan karakterleri engelleyeceğiz.

1)- CGI Fonksiyonlarının Engellenmesi:
Eğer sunucuda root’sanız,sunucunuzdaki php.ini dosyasındaki disable_functions satırını düzenleyeceğiz.
php.ini bulma komutu: php -i | grep “Loaded Configuration File”

Terminal size php.ini lokasyonunu verecek,herhangi bir metin editörüyle bu dosyayı açıp disable_functions= satırını şu şekilde düzenleyelim:

disable_functions = passthru,exec,shell_exec,proc_open,system,popen

Eğer sunucuda root yetkiniz yoksa,çalışma alanınızda php.ini adında bir dosya oluşturup içeriğine bunu yazın:

disable_functions = passthru,exec,shell_exec,proc_open,system,popen

 

2)- Filtreleme İşlemi

Az önceki betiğimizi aşağıdaki şekilde düzenlersek,yine sorun ortadan kalkacaktır.

<form action="" method="post">

<input type="text" name="klasor"><br>

<input type="submit" value="Oluştur"></form>

<?php

$engelle = array("|", "&", "$", "(", ")", "`", ";", ">");

$al = $_POST['klasor'];

$al2 = str_replace($engelle, "", $al);

exec("mkdir $al2");

?>

Böylelikle tehlikeli karakterleri veya PHP CGI fonksiyonlarını engelleyerek rce zafiyetinin önüne geçmiş olduk.

Güvenlik kategorisindeki diğer yazıları da okumayı unutmayın. 🙂

Kapaktaki resim buradan alıntıdır.

Etiketler: PHP RCE Açığının Kapatılması, PHP Remote Command Execution Engellenmesi

 

Yazıya gelen yorumlar:

  1. zorbey178

    eline saglik

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yazı URL