1Ağustos
Nishang Framework

Nishang ile Windows Post Exploitation – Part 1

  1. GENEL BAKIŞ

Nishang, Nikhal Mittal tarafından geliştirilen bir post-exploitation araçlar takımıdır. Nishang içerisinde post-exploitation işlemleri sırasında kullanılabilecek olan, Powershell dilinde yazılmış script kodları bulunmaktadır. Nishang’e ait script kodları ile; port taraması, bilgi toplama, hak yükseltme, kimlik bilgilerini ele geçirme, backdoor(arka kapı) bırakma gibi işlemler gerçekleştirilebilir. Powershell ile oluşturulduğundan dolayı Windows işletim sisteminde herhangi bir kurulum gerektirmeden çalıştırılabilir. Aracın önemli özelliklerinden biri de çalıştırılan script’lerin disk üzerinde değil, bellek üzerinde çalışmasıdır.

Nishang aracı,

https://github.com/samratashok/nishang

adresinden indirilebilir. Ayrıca Nishang, Kali Linux işletim sisteminde /usr/share/nishang dizini altında varsayılan olarak kurulu şekilde gelmektedir.

Nishang aracı belirtildiği üzere bir post-exploitation aracıdır ve içerisinde Metasploit Framework gibi exploitation modülleri bulunmaz. Ayrıca Nishang, bir post-exploitation framework olan Empire aracı gibi, makine üzerinde interaktif işlemlerin gerçekleştirilebileceği bir agent elde etme imkanı da sunmaz. Dolayısıyla exploit edilmiş ve oturum bağlantısı alınmış bir sisteme Nishang aracına ait script kodları yüklenir ve o makine üzerinde çalıştırılır. Kodlar Powershell ile yazıldığından ve Windows işletim sisteminde Powershell varsayılan olarak bulunduğundan dolayı, yüklenen script’lerin “Import-Module” cmdlet ile eklenmesi, komutların çalıştırılabilmesi için yeterli olacaktır.

Nishang’i kullanabilmek için ele geçirilen sistem üzerinde bir powershell çalıştırılmalıdır ve bağlantılar bu powershell üzerinden alınmalıdır. Bunun dışında eğer Meterpreter veya varsayılan Windows cmd ile bir bağlantı alınırsa, komutları çalıştırabilmek için “powershell.exe” uygulaması çalıştırılmalıdır. Aşağıdaki görüntüde “PRIVIA” domain’ine bağlı bir Windows Server 2016 sistemden elde edilmiş meterpreter oturumu görülmektedir.

Resim 1.1 – Meterpreter Oturumu

Nishang’in sunduğu imkanlar ile Windows Server 2016 sistem üzerinden yola çıkılarak çeşitli post-exploitation işlemleri gerçekleştirilebilir. Daha sonra ilerlenilerek Domain Controller üzerinden bir bağlantı elde edilip yine o sistem üzerinde de çeşitli işlemler gerçekleştirilebilir. Bu işlemlerde Nishang’i kullanmak için gerekli script kodları makineye yüklenmelidir. Örnek olarak iç ağdaki sistemlere ait portları taramak için “Invoke-PortScan.ps1” script’i yüklenebilir. Bunun için meterpreterde “upload” komutu kullanılabilir.

Resim 1.2 – Dosya Yükleme

Dosya yükleme işleminden sonra, etkileşimli bir powershell çalıştırmak için “shell” komutu kullanılarak Windows’a ait komut satırına geçilmelidir. Ardından “powershell” komutu ile powershell başlatılmalıdır.

Resim 1.3 – Powershell

Yüklenen dosya “Import-Module” cmdlet ile modüller arasına eklendiğinde artık kullanılabilir hale gelecektir.

Resim 1.4 – Modül Ekleme

Modülün yüklenmesinin ardından, “Invoke-PortScan” modülü Powershell üzerinde bir cmdlet olarak çalışabilir. Aşağıdaki görüntüde belirli IP aralığındaki sistemlere yönelik port taraması yapılmıştır ve taranan IP aralığında aktif 1 adet sistem tespit edilmiş olup, bu sistemin açık portlarının numaraları ekrana basılmıştır.

Resim 1.5 – Port Taraması

Bu örnekte Nishang kullanılarak basit bir şekilde port taraması gerçekleştirilmiştir.

Nishang, örnekte gösterilen port tarama modülü gibi birçok modül sunar. Bütün modüller yaptıkları işe göre belirli isimlere sahip dizinlerin altında toplanmıştır. Aşağıdaki görüntüde Nishang script dosyalarının bulunduğu dizinler görülmektedir.

Resim 1.6 – Nishang Dizinler

Görüldüğü üzere her scriptin yaptığı işe göre dizinler oluşturulmuş ve bu script dosyaları dizinler altında toplanmıştır. Örneğin; tarama işlemi yapan script dosyaları “Scan”, hak yükseltme işlemi yapan script dosyaları “Escalation” dizini altında yer almıştır. Bu dizinde yer alan “nishang.psm1” dosyası ise çalıştırıldığında bütün script dosyalarını tek seferde modüller arasına ekler.

  1. NISHANG ile POST EXPLOITATION

Sızma testlerinin olmazsa olmazı post-exploitation işlemleridir. Bir sistem exploitation yöntemleri ile ele geçirilebilir. Fakat bu sızma testinin bittiği anlamına gelmez. Çünkü bir saldırgan bir sistemi ele geçirdikten sonra durmayıp mümkün olduğunca ilerlemeye çalışacaktır. Bu nedenle exploitation aşamasının ardından ilerleme kaydetmek için post-exploitation yöntemlerini kullanmak gerekmektedir. Nishang post-exploitation adımının rahatlıkla gerçekleşebilmesi için işlevsel modüller sunmaktadır. Post-exploitation aşamaları sırasıyla;

  • Hak Yükseltme
  • Bilgi Toplama
  • Pivoting
  • Kalıcılık

olarak genellenebilir. Nishang bu aşamaları gerçekleştirmek için Windows üzerinde etkili çalışan script’ler sunar. Özellikle bu script kodlarının arasında, Windows üzerinde bulunan mimari tabanlı zafiyetlerden faydalanmak için kullanılabilecek scriptler de bulunmaktadır.

Aşağıda Nishang’e ait scriptler açıklanmıştır.

Windows sistemlerde servislerin yönetilmesinden sorumlu olan kısıtlı servis hesapları bulunmaktadır. Bu script, ActiveDirectory modülünün bulunduğu ortamlara kısıtlı bir servis hesabı eklemek için kullanılır. Böylece eklenen bu servis hesabı, s4u2self ve s4u2proxy protokolleri aracılığı ile servisleri ele geçirmek için TGS biletini almak adına backdoor sağlar.

Aşağıda bu scripte ait olan parametreler açıklanmıştır:

  • SamAccountName: Oluşturulacak olan kullanıcı adını belirler ve SAM veritabanına bu isimle kaydeder.
  • Password: Oluşturulacak hesabın parolasını belirler. Bu parametre kullanılmadığı takdirde otomatik olarak “[email protected]!” parolası atanır.
  • ServicePrincipalName: Delegasyonun etkinleştirilebilmesi için kullanıcı atanan SPN (Service Principal Name) değeridir.
  • AllowedToDelegateTo: Oluşturulan hesabın hangi servis üzerinde yetkili olacağı belirlenir.

Aşağıdaki örnekte bir backdoor hesap oluşturulmuştur ve bu hesaba WinRM servisini kontrol etme hakkı tanımlanmıştır.

Resim 2.1.1.1 – Kısıtlı Backdoor Hesabı Oluşturma

DCShadow atağı ile sahte bir Domain Controller aracılığı ile Active Directory şeması değiştirilir. Böylece sahte Domain Controller ile Domain Controller üzerinde bulunan kullanıcılar, bilgisayarlar vb. bilgiler değiştirilebilir. DCShadow atağı, kimlik bilgileri veya parolaları almak için kullanılan DCSync atağının yeni nesne enjekte edememe engelini ortadan kaldırır.

DCShadow atağının yapılması için mimikatz aracının yönetici hakları ile çalıştırılmasına gerek yoktur. Belirli haklara sahip olan bir kullanıcı hesabı ile bu atak gerçekleştirilebilir. Bu script ile mimikatz aracında bulunan DCShadow atağı için minimum Active Directory gereksinimleri sağlanır. Gerekli haklar aşağıdaki gibidir:

  • DS-Install-Replica (Add/Remove Replica in Domain)
  • DS-Replication-Manage-Topology (Manage Replication Topology)
  • DS-Replication-Synchronize (Replication Synchornization)

Aşağıda bu scripte ait olan parametreler açıklanmıştır:

  • FakeDC: DCShadow komutlarının yürütüldüğü bilgisayar nesnesini belirler.
  • Object: Bu parametre ile bir bilgisayar nesnesi, kullanıcı nesnesi veya başka bir nesne adı belirlenir.
  • SamAccountName: Hedeflenen kullanıcı nesnesi için SamAccountName değerini belirler.
  • ADSPath: LDAP yolunun atanacağı hedef nesne belirlenir.
  • Username: DCShadow tekniklerini uygulayacak olan kullanıcıyı belirler.
  • Remove: Komut dosyası ile eklenen izinleri kaldırmak için kullanılır.
Resim 2.2.1 – Antak Giriş Sayfası

Antak, Nishang içerisinde bulunan, Powershell tabanlı bir web shell’dir. Antak, “antak.aspx” adında tek bir dosyadır ve web üzerinden powershell konsolu kullanmayı sağlar. Aşağıda Antak’a ait giriş sayfası bulunmaktadır.

Antak kullanılmak istendiğinde ilk olarak giriş sayfasıyla karşılaşılmaktadır. Bir penetrasyon testinde, antak.aspx sayfasına istenmeyen kimselerin erişebilmesi durumundan dolayı direk erişim yerine bir kullanıcı adı ve parola girişi istenmektedir. Bu bilgiler, Antak web sunucusuna yüklenmeden önce kaynak kodlar üzerinden değiştirilebilir.

Resim 2.2.2 – Giriş Kontrolü

Yukarıdaki resimde görüldüğü üzere bir kimlik kontrolü gerçekleşmektedir. Antak için varsayılan kullanıcı adı “Disclaimer” ve varsayılan parola “ForLegitUseOnly” dir. Girilen bilgiler doğru ise, kullanıcı formu görünümü kapatılacak ve powershell konsolu görünümü aktif edilecektir.

Sayfa üzerinde powershell konsolu ve hemen altında komut girişi yapmak için bulunan bir metin kutusu bulunmaktadır. Metin kutusuna girilen komut çalıştırıldıktan sonra senkronize olarak bir POST isteği gidecektir ve girilen komut “powershell.exe” uygulamasının bir argümanı olarak çalışacaktır. Dönen çıktı ise web arayüzünde görüntülenecektir. Çalıştırılan bütün komutlar için ExecutionPolicy “bypass” değerini almaktadır ve girilen komutların çalıştırılması için bir kısıtlama bulunmamaktadır (Execution Policy tarafından bazı kısıtlamalar yapılır. Genel olarak IIS servisi ile çalışan web sayfaları kısıtlı hak ve yetkilere sahip bir servis hesabı ile çalışmaktadır. Dolayısıyla Execution Policy “bypass” değeri aldığı için tüm komutlar çalışacaktır. Fakat servis hesabından dolayı her komut çıktı döndürmeyebilir). Aşağıda giriş sonrası antak.aspx arayüzü görülmektedir:

Resim 2.2.3 – Antak Web Arayüzü

Antak ile powershell komutları çalıştırmak dışında, metin kutusunun altında bulunan butonlar kullanılarak çeşitli işlemler yapılabilmektedir. Bu işlemler aşağıda listelenmiştir:

  • Dosya İndirmek
  • Sunucuya dosya yüklemek
  • Web.config dosyası içerisindeki bilgileri ayrıştırıp ekrana basmak
  • SQL sorguları ile veritabanına sorgu göndermek
    1. Dosya İndirme

Antak ile sunucuda bulunan bir dosya indirilebilir. “Download” butonu, komut çalıştırmak için kullanılan metin kutusuna yazılan dosya yolunda bulunan dosyayı indirebilir.

Resim 2.2.1.1 – İndirme İşlemine Ait Kodlar

Yukarıdaki resimde görüldüğü üzere, dosya yolu HTTP başlığına eklenecektir ve TransmitFile() fonksiyonu aracılığı ile indirilecektir.

    1. Web.config Dosyası İçerisindeki Bilgileri Ayrıştırıp Ekrana Basma

Web.config, ASP.NET ile geliştirilmiş bir sitenin XML formatindaki uygulama yapılandırma dosyasıdır. Antak ile “Parse Web.config” butonuna tıklanarak, Web.config dosyası içerisindeki bilgiler ayrıştırılarak ekrana basılabilir.

Resim 2.2.1.2 – Web.config MSSQL Veritabanı Bağlantı Bilgileri

Antak, kullanıcının istediği bir dosyayı, erişim kısıtlaması olmayan bir dizine yüklemeyi sağlar. Bu işleve ait fonksiyon aşağıdaki gibidir:

Resim 2.2.2.1 – Dosya Yükleme İşlemine Ait Kodlar

Yukarıdaki resimde görüldüğü üzere; öncelikle yüklenecek dosyanın seçilip seçilmediği kontrol edilmektedir. Ardından dosya, aynı isim ile console.Text kutusu içerisine yazılan ve erişim kısıtlaması olmayan dizine yüklenecektir.

Resim 2.2.2.2 Dosya ve Dizin Seçimi
Resim 2.2.2.3 – Yüklenmiş Resim

Antak ile veritabanına yönelik sorgular yapılabilmektedir. Bunun için veritabanı bağlantı bilgilerinin girileceği, “sqlconnectiostr” adlı bir metin kutusu bulunmaktadır. Bu metin kutusuna girilen metinden sonra, veritabanı sorguları çalıştırmak için konsol metin kutusu kullanılacaktır. Aşağıdaki resimde bulunan kodlarda görüldüğü üzere metin kutularından alınan metinler, powershell ile veritabanına yollanacaktır.


Resim 2.2.3.1 Veritabanı Sorgulama Fonksiyonu
Resim 2.2.3.1 – Veritabanı sorgusu