macOS .Net Applications Injection
Bu, https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/ adresindeki yazının özeti. Daha fazla ayrıntı için kontrol edin!
.NET Core Hata Ayıklama
Bir Hata Ayıklama Oturumu Kurma
.NET'te hata ayıklama aracı ve hata ayıklanan arasındaki iletişim dbgtransportsession.cpp tarafından yönetilir. Bu bileşen, her .NET işlemi için dbgtransportsession.cpp#L127 adresinde görüldüğü gibi iki adet isimlendirilmiş pipe kurar. Bu borular -in
ve -out
ile sonlandırılır.
Kullanıcının $TMPDIR
'sini ziyaret ederek, .Net uygulamalarını hata ayıklamak için kullanılabilen hata ayıklama FIFO'larını bulabilirsiniz.
DbgTransportSession::TransportWorker, bir hata ayıklama aracından gelen iletişimi yönetmekten sorumludur. Yeni bir hata ayıklama oturumu başlatmak için, bir hata ayıklama aracı, .NET kaynak kodunda detayları verilen MessageHeader
yapısını içeren bir mesajı out
boruya göndermelidir:
Yeni bir oturum isteği yapmak için, bu yapı aşağıdaki gibi doldurulur, mesaj türü MT_SessionRequest
olarak ve protokol sürümü mevcut sürüm olarak ayarlanır:
Bu başlık daha sonra write
sistem çağrısı kullanılarak hedefe gönderilir ve ardından oturum için bir GUID içeren sessionRequestData
yapısı gönderilir:
out
boru üzerinde yapılan bir okuma işlemi, hata ayıklama oturumunun başarılı olup olmadığını doğrular.
Bellek Okuma
Bir hata ayıklama oturumu oluşturulduğunda, bellek MT_ReadMemory
mesaj türünü kullanarak okunabilir. readMemory işlevi, bir okuma isteği göndermek ve yanıtı almak için gerekli adımları ayrıntılı olarak gerçekleştirir:
Tam kanıt (POC) burada bulunmaktadır.
Belleğe Yazma
Benzer şekilde, belleğe yazma işlemi writeMemory
fonksiyonu kullanılarak gerçekleştirilir. İşlem, mesaj türünün MT_WriteMemory
olarak ayarlanması, verinin adresi ve uzunluğunun belirtilmesi ve ardından verinin gönderilmesini içerir:
İlgili POC burada bulunabilir.
.NET Core Kodu Yürütme
Kod yürütmek için, rwx izinlerine sahip bir bellek bölgesi belirlemek gerekmektedir. Bu, vmmap -pages kullanılarak yapılabilir:
Bir işlev işaretçisini üzerine yazmak için bir yer bulmak gereklidir ve .NET Core'da bunu yapmanın bir yolu Dynamic Function Table (DFT)'ye hedef alarak yapmaktır. Bu tablo, JIT derleme yardımcı işlevleri için çalışma zamanı tarafından kullanılan jithelpers.h
dosyasında detaylı olarak açıklanmıştır.
x64 sistemler için, libcorclr.dll
içindeki _hlpDynamicFuncTable
sembolüne bir referans bulmak için imza avı kullanılabilir.
MT_GetDCB
hata ayıklama işlevi, m_helperRemoteStartAddr
adlı bir yardımcı işlevin adresi de dahil olmak üzere yararlı bilgiler sağlar. Bu adres, DFT'nin konumunu ve bir işlev işaretçisini kabuk kodunun adresiyle üzerine yazmak için kullanılır.
PowerShell'e enjeksiyon için tam POC kodu buradan erişilebilir.
Referanslar
Last updated