macOS .Net Applications Injection
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
Bu, https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/ adresindeki gönderinin bir özetidir. Daha fazla ayrıntı için kontrol edin!
.NET'te hata ayıklayıcı ile hata ayıklanan arasındaki iletişimin yönetimi dbgtransportsession.cpp tarafından yapılmaktadır. Bu bileşen, dbgtransportsession.cpp#L127 adresinde görüldüğü gibi her .NET işlemi için iki adlandırılmış boru hattı kurar ve bunlar twowaypipe.cpp#L27 aracılığıyla başlatılır. Bu boru hatları -in
ve -out
ile sonlandırılır.
Kullanıcının $TMPDIR
dizinine giderek, .Net uygulamalarını hata ayıklamak için mevcut olan hata ayıklama FIFO'larını bulabilirsiniz.
DbgTransportSession::TransportWorker hata ayıklayıcıdan gelen iletişimi yönetmekten sorumludur. Yeni bir hata ayıklama oturumu başlatmak için, bir hata ayıklayıcı out
boru hattı aracılığıyla MessageHeader
yapısıyla başlayan bir mesaj göndermelidir; bu yapı .NET kaynak kodunda ayrıntılı olarak açıklanmıştır:
Yeni bir oturum talep etmek için, bu yapı aşağıdaki gibi doldurulur, mesaj türü MT_SessionRequest
ve protokol sürümü mevcut sürüm olarak ayarlanır:
Bu başlık daha sonra write
syscall'ı kullanılarak hedefe gönderilir, ardından oturum için bir GUID içeren sessionRequestData
yapısı gelir:
out
borusundaki bir okuma işlemi, hata ayıklama oturumu kurulumunun başarıyla tamamlandığını veya başarısız olduğunu doğrular:
Bir hata ayıklama oturumu kurulduktan sonra, bellek MT_ReadMemory
mesaj türü kullanılarak okunabilir. readMemory fonksiyonu, bir okuma isteği göndermek ve yanıtı almak için gerekli adımları gerçekleştiren ayrıntılı bir işlemdir:
Tam kanıt konsepti (POC) burada mevcuttur.
Benzer şekilde, bellek writeMemory
fonksiyonu kullanılarak yazılabilir. Süreç, mesaj türünü MT_WriteMemory
olarak ayarlamayı, verinin adresini ve uzunluğunu belirtmeyi ve ardından veriyi göndermeyi içerir:
İlgili POC burada mevcuttur.
Kod çalıştırmak için, rwx izinlerine sahip bir bellek bölgesi tanımlanmalıdır; bu, vmmap -pages: kullanılarak yapılabilir.
Bir işlev işaretçisini geçersiz kılmak için bir yer bulmak gereklidir ve .NET Core'da bu, Dynamic Function Table (DFT) hedeflenerek yapılabilir. Bu tablo, jithelpers.h
dosyasında detaylandırılmıştır ve çalışma zamanı tarafından JIT derleme yardımcı işlevleri için kullanılır.
x64 sistemler için, _hlpDynamicFuncTable
sembolüne bir referans bulmak için imza avcılığı kullanılabilir libcorclr.dll
içinde.
MT_GetDCB
hata ayıklayıcı işlevi, libcorclr.dll
'nin işlem belleğindeki konumunu gösteren bir yardımcı işlevin adresi olan m_helperRemoteStartAddr
dahil olmak üzere yararlı bilgiler sağlar. Bu adres daha sonra DFT'yi aramak ve bir işlev işaretçisini shellcode'un adresi ile geçersiz kılmak için kullanılır.
PowerShell'e enjeksiyon için tam POC kodu buradan erişilebilir.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)