Tarık Eren Taşdemir tarafından yazılmıştır.
Merhaba arkadaşlar ben siber güvenlik araştırmacısı Tarık Eren Taşdemir bu yazımda uygulamalı olarak file upload zafiyetini ele alacağım.
İlk olarak saldırgan makinamız Kali Linux’u ayağa kaldıralım ardın da kurban makinamızı ve sonra kurban makinamızın web uygulamasına erişelim.
bWAPP Portal
Anlatımımda bWAPP üzerinden gideceğim.
bWAPP bir çok web uygulama zafiyeti barındıran, kendinizi geliştirmenizi sağlayan bir lab ortamıdır. bWAPP kurduktan sonra sağ üst köşeden file upload zafiyetini seçip güvenlik seviyesini yüksek seviyeye alalım.
bWAPP File Upload
Öncelikle biraz size file upload uygulamasından bahsedeyim. File upload uzak sunucuya genellikle fotoğraf(image) dosyaları yüklemeye olanak sağlar. Hemen size örnek ile daha iyi izah edeyim Google üzerinden indirdiğim bir görseli yüklemeye çalışacağım.
bWAPP File Upload
Yukarıda gördüğünüz gibi starset.jpg adlı fotoğraf dosyamı yükleyeceğim, yüklendikten sonra ise uzak sunucuda onu görüntüleyeceğim.
Starset.jpg
Görüldüğü gibi yükleme başarılı, peki biz buna sıradan bir insan gözüyle bakmayacağız artık saldırgan bir hacker moda geçme vakti geldi.
Şimdi şöyle düşünelim ben bu zafiyeti kullanıp bu sunucuda zararlı bir kod çalıştırabilir miyim? Tabi ki de evet. Eğer bu güvenlik açığını düşük seviye güvenlik önlemlerinde çözüyor olsaydık işimiz kolaydı ama biz yüksek seviye güvenliğe aldığımız için güvenlik önlemleri artmış durumda bizim bunları bypass etmemiz lazım bunu size iki yöntemle anlatacağım.
İlk olarak bize sunucudan ters bağlantı açacak PHP kodunu alıp düzenleyelim. Kali Linux’ta bu websheller varsayılanolarak gelmektedir.
Kullanacağımız Shell PHP dosyasının kali linux’ta default olarak geldiği dosya yolu:
/usr/share/webshells/php/php-reverse-shell.php
Ben bu shell dosyasını masaüstüme kayıt edeceğim ve ardından düzenleyeceğim.
file upload shell
Şimdi ise PHP Reverse Shell dosyasının bizden istediği bilgileri verelim. IP parametresine ters bağlantının açılacağı IP bilgisini girelim yani saldırgan makinanın IP bilgisini, port parametresi ise bize bağlantı gelecek portu belirtir. Varsayılan olarak 1234 numaralı port verilmiş istersek biz bunu değiştirebiliriz (65535 e kadar). Ben varsayılan olarak bırakıp kayıt ediyorum.
Reverse Shell
Şimdi ise bu PHP dosyamızı uzak sunucuya yüklemeye çalışalım bakalım izin verecek mi? Hedef ip ile saldırgan makine iplerini değişmiş olarak gördünüz ip değişikliği gerçekleşti ve PHP dosyasını tekrar düzenledim. Devam edelim yüklemeyi gerçekleştiriyorum.
Görüldüğü gibi izin vermedi sadece .jpg ve .png dosyalarına izin veriyor bizim bu güvenlik önlemini atlatmamız lazım. İlk yönteme geleyim .php uzantısına bir fotoğraf dosyası uzantısı ekleyeceğim bunu ister yeniden adlandırarak istersem de post request üzerinden değiştirebilirim. Ben post request üzerinden değiştireceğim öncelikle proxy’i açıp Burp Suite aracını çalıştıracağım.
Burp Suite ile sunucuya giden Request’i yakalayıp manipüle edebiliriz. Şimdi dosyayı tekrar yükleyip isteği yakalayıp uzantı olarak .jpg ekleyip sonra isteği sunucuya iletmeye çalışacağım.
Görüldüğü gibi ilk güvenlik önlemini atlatmayı başardık, şimdi bu dosyayı çalıştıralım.
Görüldüğü gibi çalışmadı çünkü tarayıcı bunu JPEG olarak yorumladı ve engelledi. Şimdi şöyle düşünelim, bizim bunu çalıştırmamız gerek bunun için geri php uzantısına çevirmemiz lazım işte burada devreye başka bir web uygulama zafiyeti girecek Command injection.
Command injection hedef sistemde komut çalıştırmamızı sağlar hadi beraber bakalım öncelikle zafiyetli makinenin de linux işletim sistemine sahip olduğunu biliyoruz ve linux komutları çalıştırmamız gerek
Öncelikle nerede olduğumuzu öğrenelim bunun için bir php kodu çalıştırmamız gerekecek ben düşük seviye uygulama yaparken bu kodu yüklemiştim.
Kodumuz:
<?php system($_GET['cmd']); ?>
Bu php kodu cmd parametresine verdiğiniz komutu hedef sistemde çalıştırıyor ben bu kodu cmd.php olarak kayıt etmiştim
Görüldüğü gibi /images dizini altında cmd.php yi gördük şimdi bu dosyaya gidip komut çalıştırarak nerede olduğumuzu görüntüleyelim
Resimde gösterilen dizinde imişiz. Şimdi ise Command Injection zafiyetini kullanarak JPEG dosyasını PHP dosyasına çevirelim. BWAPP’ten Command Injection zafiyetini seçip işlem yapalım amaç File upload anlatmak bu sebeple command injection güvenlik önlemini low bırakacağım.
Yukarıda görüldüğü gibi sunucu bizden bir domain aldı ve sunucu tarafında command çalıştırıp DNS bilgilerini getirdi. Şimdi command injection zafiyetini tetikleyerek jpg dosyasını php ye çevirelim.
Burada zafiyeti istismar ederken ; (noktalı virgül) kullandım bu aynı satırda iki komutu da aynı anda çalıştırmamı sağladı. Hem nsa.gov’a DNS sorguları gerçekleştirdik hem de jpg dosyamızı php ye çevirdik
Aslında sunucu tarafında böyle bir komut çalıştı.
Görüldüğü gibi shell.php.jpg artık shell.php olmuş durumda şimdi ise php kodunda belirttiğimiz portu dinlemeye alıp php kodunu tarayıcıya yorumlatıp bize kurban sistemden Reverse Shell gelmesini sağlayalım
Ve sunucuya girmeyi başardık
İkinci yönteme geçelim bu sefer biraz basit düşüneceğiz. İlk olarak güvenlik önlemini medium’a çekip php’yi yükleyelim.
Yukarıda görüldüğü gibi bu uzantılara izin vermediğini söyledi. Şimdi şöyle bir atlatma tekniği kullanacağım ki php uzantısının sonuna tarayıcının algılayamayacağı bir uzantı eklemem gerek. Ben örnek olarak en çok dinlediğim starset grubunun en sevdiğim albümlerinden biri olan transmissions albümünü uzantı olarak vereceğim.
Ardından bu dosyayı uzak sunucuya yükleyelim.
Şimdi ise tekrar nc ile portu dinlemeye alıp dosyayı çalıştıralım.
Peki burada ne oldu derseniz yeni bir uzantı ekleyip yolladık ve ardından tarayıcıya yorumlatınca tarayıcı sondaki .transmissions uzantısını algılayamadı ve bir önceki .php uzantısına göre yorumladı ve sisteme sızmayı başardık.
Yazımı okuduğunuz için teşekkür ederim.
Tarık Eren Taşdemir
[TR] File Upload Zafiyeti ve İstismarı (bWAPP High level)
Merhaba arkadaşlar ben siber güvenlik araştırmacısı Tarık Eren Taşdemir bu yazımda uygulamalı olarak file upload zafiyetini ele alacağım.
İlk olarak saldırgan makinamız Kali Linux’u ayağa kaldıralım ardın da kurban makinamızı ve sonra kurban makinamızın web uygulamasına erişelim.
bWAPP Portal
Anlatımımda bWAPP üzerinden gideceğim.
bWAPP bir çok web uygulama zafiyeti barındıran, kendinizi geliştirmenizi sağlayan bir lab ortamıdır. bWAPP kurduktan sonra sağ üst köşeden file upload zafiyetini seçip güvenlik seviyesini yüksek seviyeye alalım.
bWAPP File Upload
Öncelikle biraz size file upload uygulamasından bahsedeyim. File upload uzak sunucuya genellikle fotoğraf(image) dosyaları yüklemeye olanak sağlar. Hemen size örnek ile daha iyi izah edeyim Google üzerinden indirdiğim bir görseli yüklemeye çalışacağım.
bWAPP File Upload
Yukarıda gördüğünüz gibi starset.jpg adlı fotoğraf dosyamı yükleyeceğim, yüklendikten sonra ise uzak sunucuda onu görüntüleyeceğim.
Starset.jpg
Görüldüğü gibi yükleme başarılı, peki biz buna sıradan bir insan gözüyle bakmayacağız artık saldırgan bir hacker moda geçme vakti geldi.
Şimdi şöyle düşünelim ben bu zafiyeti kullanıp bu sunucuda zararlı bir kod çalıştırabilir miyim? Tabi ki de evet. Eğer bu güvenlik açığını düşük seviye güvenlik önlemlerinde çözüyor olsaydık işimiz kolaydı ama biz yüksek seviye güvenliğe aldığımız için güvenlik önlemleri artmış durumda bizim bunları bypass etmemiz lazım bunu size iki yöntemle anlatacağım.
İlk olarak bize sunucudan ters bağlantı açacak PHP kodunu alıp düzenleyelim. Kali Linux’ta bu websheller varsayılanolarak gelmektedir.
Kullanacağımız Shell PHP dosyasının kali linux’ta default olarak geldiği dosya yolu:
/usr/share/webshells/php/php-reverse-shell.php
Ben bu shell dosyasını masaüstüme kayıt edeceğim ve ardından düzenleyeceğim.
file upload shell
Şimdi ise PHP Reverse Shell dosyasının bizden istediği bilgileri verelim. IP parametresine ters bağlantının açılacağı IP bilgisini girelim yani saldırgan makinanın IP bilgisini, port parametresi ise bize bağlantı gelecek portu belirtir. Varsayılan olarak 1234 numaralı port verilmiş istersek biz bunu değiştirebiliriz (65535 e kadar). Ben varsayılan olarak bırakıp kayıt ediyorum.
Reverse Shell
Şimdi ise bu PHP dosyamızı uzak sunucuya yüklemeye çalışalım bakalım izin verecek mi? Hedef ip ile saldırgan makine iplerini değişmiş olarak gördünüz ip değişikliği gerçekleşti ve PHP dosyasını tekrar düzenledim. Devam edelim yüklemeyi gerçekleştiriyorum.
Görüldüğü gibi izin vermedi sadece .jpg ve .png dosyalarına izin veriyor bizim bu güvenlik önlemini atlatmamız lazım. İlk yönteme geleyim .php uzantısına bir fotoğraf dosyası uzantısı ekleyeceğim bunu ister yeniden adlandırarak istersem de post request üzerinden değiştirebilirim. Ben post request üzerinden değiştireceğim öncelikle proxy’i açıp Burp Suite aracını çalıştıracağım.
Burp Suite ile sunucuya giden Request’i yakalayıp manipüle edebiliriz. Şimdi dosyayı tekrar yükleyip isteği yakalayıp uzantı olarak .jpg ekleyip sonra isteği sunucuya iletmeye çalışacağım.
Görüldüğü gibi ilk güvenlik önlemini atlatmayı başardık, şimdi bu dosyayı çalıştıralım.
Görüldüğü gibi çalışmadı çünkü tarayıcı bunu JPEG olarak yorumladı ve engelledi. Şimdi şöyle düşünelim, bizim bunu çalıştırmamız gerek bunun için geri php uzantısına çevirmemiz lazım işte burada devreye başka bir web uygulama zafiyeti girecek Command injection.
Command injection hedef sistemde komut çalıştırmamızı sağlar hadi beraber bakalım öncelikle zafiyetli makinenin de linux işletim sistemine sahip olduğunu biliyoruz ve linux komutları çalıştırmamız gerek
Öncelikle nerede olduğumuzu öğrenelim bunun için bir php kodu çalıştırmamız gerekecek ben düşük seviye uygulama yaparken bu kodu yüklemiştim.
Kodumuz:
<?php system($_GET['cmd']); ?>
Bu php kodu cmd parametresine verdiğiniz komutu hedef sistemde çalıştırıyor ben bu kodu cmd.php olarak kayıt etmiştim
Görüldüğü gibi /images dizini altında cmd.php yi gördük şimdi bu dosyaya gidip komut çalıştırarak nerede olduğumuzu görüntüleyelim
Resimde gösterilen dizinde imişiz. Şimdi ise Command Injection zafiyetini kullanarak JPEG dosyasını PHP dosyasına çevirelim. BWAPP’ten Command Injection zafiyetini seçip işlem yapalım amaç File upload anlatmak bu sebeple command injection güvenlik önlemini low bırakacağım.
Yukarıda görüldüğü gibi sunucu bizden bir domain aldı ve sunucu tarafında command çalıştırıp DNS bilgilerini getirdi. Şimdi command injection zafiyetini tetikleyerek jpg dosyasını php ye çevirelim.
Burada zafiyeti istismar ederken ; (noktalı virgül) kullandım bu aynı satırda iki komutu da aynı anda çalıştırmamı sağladı. Hem nsa.gov’a DNS sorguları gerçekleştirdik hem de jpg dosyamızı php ye çevirdik
Aslında sunucu tarafında böyle bir komut çalıştı.
Görüldüğü gibi shell.php.jpg artık shell.php olmuş durumda şimdi ise php kodunda belirttiğimiz portu dinlemeye alıp php kodunu tarayıcıya yorumlatıp bize kurban sistemden Reverse Shell gelmesini sağlayalım
Ve sunucuya girmeyi başardık
File Upload Security Medium
İkinci yönteme geçelim bu sefer biraz basit düşüneceğiz. İlk olarak güvenlik önlemini medium’a çekip php’yi yükleyelim.
Yukarıda görüldüğü gibi bu uzantılara izin vermediğini söyledi. Şimdi şöyle bir atlatma tekniği kullanacağım ki php uzantısının sonuna tarayıcının algılayamayacağı bir uzantı eklemem gerek. Ben örnek olarak en çok dinlediğim starset grubunun en sevdiğim albümlerinden biri olan transmissions albümünü uzantı olarak vereceğim.
Ardından bu dosyayı uzak sunucuya yükleyelim.
Şimdi ise tekrar nc ile portu dinlemeye alıp dosyayı çalıştıralım.
Peki burada ne oldu derseniz yeni bir uzantı ekleyip yolladık ve ardından tarayıcıya yorumlatınca tarayıcı sondaki .transmissions uzantısını algılayamadı ve bir önceki .php uzantısına göre yorumladı ve sisteme sızmayı başardık.
Yazımı okuduğunuz için teşekkür ederim.
Tarık Eren Taşdemir
Moderatör tarafında düzenlendi: