macOS .Net Applications Injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Це резюме поста https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/. Перевірте його для отримання додаткових деталей!
Обробка зв'язку між налагоджувачем і налагоджуваним у .NET керується dbgtransportsession.cpp. Цей компонент налаштовує два іменовані канали для кожного процесу .NET, як видно в dbgtransportsession.cpp#L127, які ініціюються через twowaypipe.cpp#L27. Ці канали мають суфікси -in
та -out
.
Відвідавши $TMPDIR
користувача, можна знайти FIFOs для налагодження доступні для налагодження .Net додатків.
DbgTransportSession::TransportWorker відповідає за управління зв'язком від налагоджувача. Щоб ініціювати нову сесію налагодження, налагоджувач повинен надіслати повідомлення через out
канал, починаючи з структури MessageHeader
, детально описаної в вихідному коді .NET:
Щоб запитати нову сесію, ця структура заповнюється наступним чином, встановлюючи тип повідомлення на MT_SessionRequest
і версію протоколу на поточну версію:
Цей заголовок потім надсилається на ціль за допомогою системного виклику write
, за яким слідує структура sessionRequestData
, що містить GUID для сесії:
Операція читання з каналу out
підтверджує успіх або невдачу встановлення сеансу налагодження:
Якщо сесія налагодження встановлена, пам'ять можна читати за допомогою типу повідомлення MT_ReadMemory
. Функція readMemory детально описує необхідні кроки для відправки запиту на читання та отримання відповіді:
Повний доказ концепції (POC) доступний тут.
Аналогічно, пам'ять можна записати, використовуючи функцію writeMemory
. Процес включає встановлення типу повідомлення на MT_WriteMemory
, вказуючи адресу та довжину даних, а потім надсилаючи дані:
Пов'язаний POC доступний тут.
Щоб виконати код, потрібно ідентифікувати область пам'яті з правами rwx, що можна зробити за допомогою vmmap -pages:
Знаходження місця для перезапису вказівника функції є необхідним, і в .NET Core це можна зробити, націлившись на Dynamic Function Table (DFT). Ця таблиця, детально описана в jithelpers.h
, використовується середовищем виконання для допоміжних функцій JIT-компіляції.
Для систем x64 можна використовувати підхід підбору підписів для знаходження посилання на символ _hlpDynamicFuncTable
у libcorclr.dll
.
Функція налагодження MT_GetDCB
надає корисну інформацію, включаючи адресу допоміжної функції m_helperRemoteStartAddr
, що вказує на місцезнаходження libcorclr.dll
у пам'яті процесу. Ця адреса потім використовується для початку пошуку DFT і перезапису вказівника функції адресою shellcode.
Повний код POC для ін'єкції в PowerShell доступний тут.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)