Güncellenmeyen ve korumasız sayfalara bulaşıyor. %90 formlardan geliyor. %10 dosya izinlerini yanlış ayarlamaktan.

Sitenize bırakılan index.php muhtemelen şifreli, radio.php dosyasının içinde form var. O form üzerinden sunucuna dosya gönderiyor.

  1. .htaccess dosyanı Dosya izinlerinden (444) olarak güncelle.
  2. Varsayılan dosyan index.php default.php gibiyse değiştir. 
  3. PHP sürümünü güncelle (8.0 tavsiye)
  4. Bütün klasörleri temizle veya sunucuyu sil ve temiz yedeğini tekrar yükle.
  5. Mutlaka SEFLINK kullan.

.htaccess içerisine eklemen gereken kodlar.

#404 hatalarını mutlaka yönlendir. 404 sayfan yoksa ana sayfaya yönlendir.
ErrorDocument 404  https://domainadi.com/404  

RewriteEngine On
Options +FollowSymLinks
Options All -Indexes #klasörlere erişimi engelle
directoryindex acilis.php # -> index.php adını değiştir.

#Gerekli korumalar
<IfModule mod_headers.c>
<if "%{HTTPS} == 'on'">
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS
    </if>
    Header always set Content-Security-Policy "upgrade-insecure-requests"
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-XSS-Protection "1; mode=block"
    Header always append X-Frame-Options SAMEORIGIN
    Header always set Expect-CT "max-age=7776000, enforce"
    Header always set Referrer-Policy: "no-referrer-when-downgrade"
    Header always set X-Permitted-Cross-Domain-Policies "none"
    Header always set Permissions-Policy "geolocation=(), midi=(),sync-xhr=(),accelerometer=(), gyroscope=(), magnetometer=(), camera=(), fullscreen=(self)"
</IfModule>

# XSS engellemek için
RewriteCond %{QUERY_STRING} base64_encode.*\\(.*\\) [OR]
RewriteCond %{QUERY_STRING} (\\<|<).*script.*(\\>|>) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\\[|\\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\\[|\\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ acilis.php|urunler.php [F,L] #ana dizindeki php dosyalarının isimlerini yaz

# bu uzantılı dosyaları engelle. Eğer sayfan çalışmazsa php uzantısını kaldırabilirsin.
<FilesMatch \.(pl|php3|py|exe|php)$>
Order allow,deny
Deny from all
</FilesMatch>

.htaccess dosyasını elinden geldiğince küçük tutmaya bak. çünkü sunucu ilk .htaccess içerisini okuyor bu da sayfanın açılış performansını kötü etkileyebilir.

ana dizine içi boş index.php koy ve dosya izinlerini (400) olarak güncelle. Web sayfanda form varsa mutlaka CSRF tehlikesinden koru ve mümkünse method="POST" olsun. Form içerisinde SESSION inputu oluştur sonra form değerini eşleştir ondan sonra işlem yaptır. $_GET ile gelen veri NUMERIC değilse mutlaka temizleyerek al. aşağıya clean fonksiyonu bırakacağım. Eğer NUMERIC ise filter_input fonksiyonunu kullan.

 

Sunucudaki tüm klasörlerin içine tek tek bak. about.php|radio.php|index.php|content.php|lock360.php|admin.php|wp-login.php|wp-l0gin.php|wp-theme.php|wp-scripts.php|wp-editor.php bu isimlerde virüs varsa sil.

PHP sürümünü güncelle. Mümkünse 8.0 kullan. Değilse 7.4 olarak ayarla.

clean fonksiyonu

function clean($data) {
   $data = str_replace(array('&amp;','&lt;','&gt;'), array('&amp;amp;','&amp;lt;','&amp;gt;'), $data);
   $data = preg_replace('/(&#*\w+)[\x00-\x20]+;/u', '$1;', $data);
   $data = preg_replace('/(&#x*[0-9A-F]+);*/iu', '$1;', $data);
   $data = html_entity_decode($data, ENT_COMPAT, 'UTF-8');
   $data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data);
   $data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data);
   $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data);
   $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data);
   $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
   $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
   $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu', '$1>', $data);
   $data = preg_replace('#</*\w+:\w[^>]*+>#i', '', $data);
   do {
      $old_data = $data;
      $data = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data);
   }
   while ($old_data !== $data);
   return $data;
}

// $gelenveri = $_POST["name"];
// echo clean($gelenveri);

 

Temelli kurtulmanın tek yolu sürüm güncelledikten sonra klasörlerini temizle, sonra bütün formları ve sayfaları $_GET ve $_POST verilerini fonksiyondan geçirmeden okutma.

Tüm işlemler bittiğinde site adresini https://www.virustotal.com/gui/home/url buraya yazarak tarama yap.

Geçmiş olsun.