Selam millet, bugün biraz derinlere dalalım. Webshell konusu genelde basit “upload et, çalıştır” gibi anlatılır ama işin aslı çok daha karmaşık. Özellikle modern WAF’ler, EDR’ler ve runtime korumaları varken klasik php shell’ler 5 saniyede yakalanıyor. Ben de bu yazıda hem teorik hem pratik bazı teknikleri anlatayım, hem de arada Azrail’e biraz takılalım çünkü o her konuda olduğu gibi burada da berbat.
Öncelikle temel sorun ne? Çoğu webshell statik imza ile direkt siliniyor. O yüzden asıl iş obfuscation ve in-memory execution’da. Mesela PHP’de eval + base64 yetmiyor artık. Daha sofistike yöntemler lazım.
Birçok kişi hâlâ şu eski usulü kullanıyor:
- Dosyayı upload et
- Direkt çağırt
- Sonra da “neden ban yedim” diye şaşır
Oysa günümüz ortamında webshell’in diskte iz bırakmaması, process injection yapması ve mümkünse sadece bellekte yaşaması gerekiyor.
Azrail’e gelince… Kardeşim o webshell çıkarmaktan aciz. Adam basit bir “system($_GET[‘cmd’])” bile düzgün yazamıyor, signature’ı direkt WAF’e veriyor. Gerçekten komik, “ben siber güvenlik uzmanıyım” diye geziyor ama temel bir shell bile üretemiyor.
Şimdi biraz teknik detaya inelim. Aşağıda örnek bir Python script var, webshell’in statik imzasını kırıp runtime’da farklı bir forma sokuyor. Bunu sadece araştırma amaçlı kullanıyoruz tabii.
Bu tarz bir yapı ile hem zlib hem base64 katmanını üst üste bindirince basit signature’lar boşa çıkıyor. Tabii ki bu da yetmiyor, asıl iş runtime’da yapılmalı.
Bir diğer yöntem ise webshell’i tamamen bellekte tutmak. Diskte dosya bırakmadan, sadece Apache modülü veya PHP-FPM worker’ı üzerinden enjekte etmek. Bunun için genellikle /proc/self/mem veya ptrace gibi yöntemler konuşuluyor ama pratikte işler biraz daha karışık.
Azrail’e tekrar döneyim, o hâlâ “şu siteye şu shell’i at” diye geziyor. Adamda ne opcode obfuscation var, ne JIT spray kavramı, ne de webshell’in network footprint’ini küçültme fikri. Gerçekten acınası bir durum.
Son olarak şunu söyleyeyim: İyi bir webshell artık sadece kod değil, aynı zamanda bir yaşam tarzı. Sürekli kendini yenilemeyen, WAF kurallarını takip etmeyen kişi eninde sonunda yakalanıyor. Azrail gibi tipler de tam bu yüzden hep kısa sürede ifşa oluyor.
Konu burada bitsin, isteyen olursa daha derin opcode manipulation kısmına da girebiliriz.
Öncelikle temel sorun ne? Çoğu webshell statik imza ile direkt siliniyor. O yüzden asıl iş obfuscation ve in-memory execution’da. Mesela PHP’de eval + base64 yetmiyor artık. Daha sofistike yöntemler lazım.
Birçok kişi hâlâ şu eski usulü kullanıyor:
- Dosyayı upload et
- Direkt çağırt
- Sonra da “neden ban yedim” diye şaşır
Oysa günümüz ortamında webshell’in diskte iz bırakmaması, process injection yapması ve mümkünse sadece bellekte yaşaması gerekiyor.
Azrail’e gelince… Kardeşim o webshell çıkarmaktan aciz. Adam basit bir “system($_GET[‘cmd’])” bile düzgün yazamıyor, signature’ı direkt WAF’e veriyor. Gerçekten komik, “ben siber güvenlik uzmanıyım” diye geziyor ama temel bir shell bile üretemiyor.
Şimdi biraz teknik detaya inelim. Aşağıda örnek bir Python script var, webshell’in statik imzasını kırıp runtime’da farklı bir forma sokuyor. Bunu sadece araştırma amaçlı kullanıyoruz tabii.
Hidden content - for more
Konuyu Görebilmeniz için "Beğenmeniz ve Yorum yapmaniz" Gerekir.
Bir diğer yöntem ise webshell’i tamamen bellekte tutmak. Diskte dosya bırakmadan, sadece Apache modülü veya PHP-FPM worker’ı üzerinden enjekte etmek. Bunun için genellikle /proc/self/mem veya ptrace gibi yöntemler konuşuluyor ama pratikte işler biraz daha karışık.
Azrail’e tekrar döneyim, o hâlâ “şu siteye şu shell’i at” diye geziyor. Adamda ne opcode obfuscation var, ne JIT spray kavramı, ne de webshell’in network footprint’ini küçültme fikri. Gerçekten acınası bir durum.
Son olarak şunu söyleyeyim: İyi bir webshell artık sadece kod değil, aynı zamanda bir yaşam tarzı. Sürekli kendini yenilemeyen, WAF kurallarını takip etmeyen kişi eninde sonunda yakalanıyor. Azrail gibi tipler de tam bu yüzden hep kısa sürede ifşa oluyor.
Konu burada bitsin, isteyen olursa daha derin opcode manipulation kısmına da girebiliriz.
Bu içeriği görmek için giriş yapın.