Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
AzureRedOps — Azure RedOps هو مجموعة أدوات أمنية هجومية لتقييم الوضع الأمني لـ Microsoft Entra ID | Kitploit
أدوات/GitHubGitHub/mr-un1k0d3r/azureredops
أدوات التصيدتصعيد الامتيازاتالاستطلاعهجمات كلمات المرورالاستغلالجمع المعلوماتما بعد الاستغلالاختبار الاختراقأمن السحابةالمصادقةالفريق الأحمر
18018منذ شهر واحدتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
GitHub
mr-un1k0d3r/azureredops

AzureRedOps

Azure RedOps هو مجموعة أدوات أمنية هجومية لتقييم الوضع الأمني لـ Microsoft Entra ID

عرض المستودع

AzureRedOps

أداة Swiss Army لعمليات الفريق الأحمر على Azure / Entra ID.

المؤلف: Mr.Un1k0d3r (TrueCyber Inc) الإصدار: 0.1 اللغة: Python 3.12+


نظرة عامة

AzureRedOps عبارة عن مجموعة أدوات أمنية هجومية لتقييم الوضع الأمني لمستأجري Microsoft Entra ID وAzure. يغلف سير العمل الأكثر شيوعًا للفريق الأحمر — المصادقة، وإدارة الرموز، وتعداد الدليل، والتحقق من الامتيازات، ورش كلمات المرور، وإجراءات ما بعد الاستغلال ضد Microsoft Graph — خلف واجهة CLI واحدة متسقة تعتمد على --activity.

يتم تحديد كل عملية باستخدام -a/--activity. يمكن تخزين الرموز التي تم الحصول عليها أثناء المصادقة محليًا (.azure_creds) وإعادة استخدامها بالاسم عبر -l/--load-access-token، لذا نادرًا ما تضطر إلى لصق رموز JWT الخام.

تعرف على المزيد حول الأداة على مدونة CYPFER

الميزات

  • إدارة الرموز — حفظ، وسرد، وفك ترميز/عرض، وحذف رموز الوصول/التحديث في مخزن بيانات اعتماد محلي (.azure_creds). يمكن لأي تدفق حفظ رموزه تلقائيًا باستخدام -s/--save + -n/--name.
  • تدفقات مصادقة متعددة:
    • ROPC (auth) — مصادقة مباشرة باسم المستخدم/كلمة المرور.
    • التصيد عبر رمز الجهاز (phish-start / phish-capture) — استغلال منح تفويض الجهاز في OAuth لالتقاط الرموز الصادرة عندما يدخل الهدف رمز المستخدم الخاص بك في microsoft.com/devicelogin. يتم الالتقاط تلقائيًا افتراضيًا.
    • موافقة تطبيق طرف ثالث (auth-app) — تدفق رمز التفويض الكامل + PKCE مقابل تسجيل تطبيق مخصص، يقدمه مستمع HTTPS محلي مدمج يستقبل إعادة التوجيه.
    • التقاط المتصفح التفاعلي (auth-interactive) — قم بقيادة متصفح حقيقي (Playwright؛ Firefox افتراضيًا، و-br للتبديل) (يتعامل مع MFA / الوصول الشرطي / SSO)، ثم اجمع كل رمز من جلسة HAR المسجلة.
    • تبادل رمز التحديث (refresh) — استبدل رمز التحديث برموز وصول جديدة.
    • منح On-Behalf-Of (obo) — استبدال رمز وصول صادر مسبقًا برمز جديد مخصص لمورد نهائي (OAuth 2.0 jwt-bearer / OBO).
    • SSO من الرمز إلى المتصفح (browser-sso) — افتح متصفحًا حقيقيًا مباشرة في تطبيق الويب المستهدف (Outlook على الويب، Teams، SharePoint، بوابة Azure، ...). مع يقوم تلقائيًا بسك ملف تعريف ارتباط من رمز التحديث (تسجيل الجهاز → PRT → )، بحيث يكمل متصفح جديد تسجيل الدخول الأحادي دون تسجيل دخول يدوي.
  • تعداد الدليل عبر Microsoft Graph — المستخدمون، التطبيقات، كيانات الخدمة، سياسات التفويض، ومجمع gather-all الشامل.
  • رش كلمات المرور ضد معرّفات تطبيقات Microsoft الرسمية المعروفة (spray) ورش رموز التحديث عبر التطبيقات (spray-refresh).
  • ما بعد الاستغلال — تسجيل التطبيقات، وإنشاء المجموعات، وتعيين أدوار الدليل، ودعوة المستخدمين الخارجيين (الضيوف)، ورفع الملفات إلى OneDrive.
  • أدوات مساعدة للاستطلاع — يجد magic-app التطبيقات القابلة لإعادة التوجيه علنًا بموافقة AllPrincipals؛ وقوائم مدمجة بمعرّفات تطبيقات Microsoft المعروفة/المهمة.
  • تحسينات تجربة الاستخدام — تبديل نقطة نهاية بيتا، ترويسات مخصصة، وكيل مستخدم/نطاق/جمهور مخصص، تصفية السمات، مخرجات موسعة، تسجيل تصحيح/HTTP مفصّل، وإعادة توجيه المخرجات إلى ملف.

المتطلبات

  • Python 3.12 أو أحدث (يعتمد الكود على صيغة f-string الخاصة بـ PEP 701).
  • حزم Python (انظر requirements.txt):
    • PyJWT
    • requests
    • playwright
    • cryptography (مطلوب فقط لـ browser-sso -aprt، تدفق PRT التلقائي)
  • وقت تشغيل متصفح Playwright لتدفقات المتصفح (auth-interactive، browser-sso). Firefox هو المحرك الافتراضي (-br/--browser)؛ قم بتثبيته باستخدام python -m playwright install firefox.
  • شهادة TLS + مفتاح في includes/web/cert.pem وincludes/web/key.pem (مطلوبة فقط لتدفق auth-app PKCE — انظر ).

التثبيت```bash

Clone the repository

git clone AzureRedOps cd AzureRedOps

Create and activate a virtual environment

python3 -m venv AzureRedOps source AzureRedOps/bin/activate # Linux / macOS

.\AzureRedOps\Scripts\Activate.ps1 # Windows PowerShell

Install dependencies

pip install -r requirements.txt

Install the browser used by the browser flows (one-time).

Firefox is the default engine; install the one(s) you plan to use with -br.

python -m playwright install firefox

python -m playwright install chromium webkit # optional, for -br chromium/webkit

python -m playwright install-deps # Linux/WSL: pull system libs

root@kitploit:~
شغّل الأداة:```bash
python3 AzureRedOps.py -a <activity> [options]

الاستخدام

النمط العام للاستدعاء هو:```bash python3 AzureRedOps.py -a [authentication] [activity options] [global options]

root@kitploit:~
### تقديم رمز مميز (Token)

الأنشطة التي تستدعي Microsoft Graph تحتاج إلى رمز وصول (access token). يمكنك توفيره بطريقتين:

| الطريقة | العلامة | مثال |
|--------|------|---------|
| تمرير رمز مميز خام | `-ac, --access-token` | `-ac eyJ0eXAi...` |
| تحميل رمز مميز مخزّن بالاسم | `-l, --load-access-token` | `-l mytoken` |

عند استخدام `-l`، يتم قراءة `access_token` المطابق (وكذلك `refresh_token`
و`tenant` عند الحاجة) من مخزن `.azure_creds`.

### حفظ الرموز المميزة في ملف (`-s` / `-n`)

أي نشاط يحصل على رموز مميزة (`auth`, `auth-app`, `auth-interactive`,
`phish-start`/`phish-capture`, `refresh`) يمكنه **حفظها تلقائيًا** في
مخزن الاعتماديات المحلي (`.azure_creds`) عن طريق إضافة `-s/--save` مع
`-n/--name`:```bash
# Authenticate and save the resulting tokens under the name "victim1"
python3 AzureRedOps.py -a auth -u [email protected] -p 'P@ssw0rd!' -tid <tenant-guid> -s -n victim1
  • -s/--save يُفعّل الحفظ التلقائي؛ يتطلب -n/--name — يخرج البرنامج برسالة خطأ إذا كان -n مفقودًا.
  • -n/--name هو المفتاح الذي يُخزَّن تحته الرمز المميز (token). يمكنك لاحقًا إعادة استخدامه مع -l victim1 بدلاً من لصق JWT الخام، أو عرضه باستخدام -a view -n victim1، أو حذفه باستخدام -a delete -n victim1.
  • نشاط auth-interactive يحفظ تلقائيًا دائمًا وسيطالبك بإدخال اسم بشكل تفاعلي إذا لم يتم توفير -n.

حفظ مخرجات النشاط في ملف (-j)

معظم أنشطة التعداد (list-users, list-applications, list-principals, gather-all, raw-url) تقبل -j/--json <filename> لكتابة استجابة API الخام في ملف JSON بدلاً من طباعتها (أو بالإضافة إلى طباعتها):```bash

Dump every user to users.json

python3 AzureRedOps.py -a list-users -l victim1 -j users.json

root@kitploit:~
بالنسبة إلى `gather-all`، يُستخدم اسم الملف المقدَّم كلاحقة ويُكتب ملف واحد
لكل نقطة نهاية في Graph (مثل `users-<name>`، `groups-<name>`، ...).

> ملاحظة: يتحكم `-j` في تصدير JSON المنظّم، بينما يقوم `-re/--redirect-to-file` بعكس
> مخرجات وحدة التحكم المنسّقة إلى `output.txt`. الاثنان مستقلان عن بعضهما.

### معرّفات المستأجر (Tenant)

- `-t, --tenant` يتوقع **اسم نطاق** (مثل `contoso.com`) ويُستخدم في نشاط `id`.
- `-tid, --tenant-id` يتوقع **GUID المستأجر** أو `common`، ويُستخدم في أنشطة المصادقة.

---

## خيارات سطر الأوامر

| Short | Long | Default | Description |
|-------|------|---------|-------------|
| `-a` | `--activity` | `id` | **(مطلوب)** النشاط المطلوب تنفيذه (انظر [Activities](#activities)). |
| `-ac` | `--access-token` | | رمز وصول Azure. |
| `-n` | `--name` | | الاسم المستخدم لحفظ/تحميل رمز، أو اسم العرض لـ `register-app`/`new-group`/`invite`. |
| `-t` | `--tenant` | | اسم **نطاق** مستأجر Azure (يستخدمه `id`). |
| `-c` | `--devicecode` | | رمز الجهاز (يستخدمه `phish-capture`). |
| `-tid` | `--tenant-id` | | **معرّف** مستأجر Azure (GUID) أو `common`. |
| `-app` | `--appid` | `d3590ed6-52b3-4102-aeff-aad2292ab01c` | معرّف التطبيق (العميل). |
| `-e` | `--endpoint` | `microsoftonline.com` | نطاق نقطة نهاية تسجيل الدخول المستهدف. |
| `-r` | `--refresh-token` | | رمز تحديث المصادقة. |
| `-as` | `--auto-start` | `True` | بدء التقاط رمز الجهاز تلقائيًا بعد `phish-start`. |
| `-l` | `--load-access-token` | | تحميل رمز مخزّن بالاسم من `.azure_creds`. |
| `-j` | `--json` | | حفظ مخرجات النشاط في ملف JSON معيّن. |
| `-fl` | `--filter` | | طباعة السمات التي يطابق مفتاحها أحد هذه القيم فقط (مفصولة بفواصل). |
| `-u` | `--username` | | اسم المستخدم الرئيسي (البريد الإلكتروني). |
| `-p` | `--password` | | كلمة مرور المستخدم. |
| `-s` | `--save` | `False` | حفظ الرموز التي تم الحصول عليها تلقائيًا في `.azure_creds` (**يتطلب `-n`**). |
| `-cp` | `--check-privileges` | `False` | بعد تسجيل دخول ناجح عبر الحقن (spray)، التحقق من إمكانية تعداد المستخدمين/التطبيقات. |
| `-uid` | `--uid` | | معرّف كائن مستخدم Azure (يستخدمه `add-group`). |
| `-headers` | `--headers` | | رؤوس HTTP إضافية بصيغة JSON، مثل `{"X-Foo": "bar"}`. |
| `-gid` | `--gid` | `62e90394-69f5-4237-91f9-056ad24d70a7` | معرّف دور الدليل / المجموعة (الافتراضي = **مسؤول عام**). |
| `-i` | `--id` | `False` | بالنسبة لـ `interest`: طباعة معرّفات التطبيقات فقط. |
| `-ty` | `--type` | | بالنسبة لـ `interest`: التصفية حسب فئة معيّنة. |
| `-fp` | `--filepath` | | الملف المراد رفعه (`push-file`) أو قائمة تطبيقات مخصصة للحقن (spraying). |
| `-v` | `--version` | `v2.0` | إصدار واجهة برمجة تطبيقات المصادقة: `v0` أو `v2.0`. |
| `-ua` | `--user-agent` | *(سلسلة Chrome UA)* | تجاوز `User-Agent` الخاص بـ HTTP. |
| `-au` | `--audience` | `https://graph.microsoft.com` | الجمهور/الموارد الخاص بالرمز. |
| `-sc` | `--scope` | `openid offline_access` | نطاق OAuth2. استخدم `https://graph.microsoft.com/.default` لـ Graph، و`openid` للحقن. |
| `-url` | `--url` | | عنوان URL المستهدف لـ `raw-url`/`invite`؛ قائمة عناوين URL مفصولة بفواصل لـ `auth-interactive`. |
| `-beta` | `--beta` | `False` | استخدام نقطة نهاية Microsoft Graph **التجريبية** لـ `list-users`/`list-applications`. |
| `-exp` | `--expand` | `False` | توسيع القوائم/القواميس المتداخلة في المخرجات إلى تنسيق قابل للقراءة البشرية. |
| `-k` | `--keep` | `False` | الاحتفاظ بملف `session.har` بعد `auth-interactive` / `browser-sso`. |
| `-cs` | `--client-secret` | | سر العميل السري المستخدم في منح On-Behalf-Of الخاص بـ `obo`. |
| `-prt` | `--prt-cookie` | | قيمة ملف تعريف ارتباط PRT (`x-ms-RefreshTokenCredential`) لتغذية SSO بالمتصفح لـ `browser-sso`. |
| `-br` | `--browser` | `firefox` | محرك متصفح Playwright لتدفقات المتصفح (`auth-interactive`، `browser-sso`). أحد: `firefox`، `chromium`، `webkit`. |
| `-aprt` | `--auto-prt` | `False` | بالنسبة لـ `browser-sso`: إنشاء ملف تعريف ارتباط PRT تلقائيًا من رمز التحديث (تسجيل الجهاز ← PRT ← `x-ms-RefreshTokenCredential`) بحيث يفتح المتصفح **مصادقًا بالفعل**. يتطلب `cryptography` ورمز تحديث FOCI/الوسيط. |
| `-d` | `--debug` | `False` | تفعيل تسجيل التصحيح (debug logging). |
| `-dd` | `--verbose-debug` | `False` | تفعيل تسجيل مفصّل لطلبات/استجابات HTTP. |
| `-re` | `--redirect-to-file` | `False` | عكس جميع مخرجات وحدة التحكم إلى `output.txt`. |

---

## الأنشطة

فيما يلي، يسرد كل نشاط وسيطاته **المطلوبة** و*الاختيارية*.
"Token" تعني أن `-ac` أو `-l` مطلوب.

### إدارة الرموز

| النشاط | مطلوب | اختياري | الوصف |
|----------|----------|----------|-------------|
| `save` | `-ac`، `-n` | `-tid`، `-r` | حفظ رمز وصول (ورمز تحديث اختياري) إلى `.azure_creds`. |
| `list-token` | — | — | سرد أسماء جميع الرموز المحفوظة. |
| `view` | `-n` | — | فك ترميز وعرض مطالبات JWT لرمز محفوظ. |
| `delete` | `-n` | — | إزالة رمز محفوظ من المخزن. |```bash
# Save a token under the name "mytoken"
python3 AzureRedOps.py -a save -n mytoken -ac eyJ0eXAi... -r 0.AReAB... -tid <tenant-guid>

# List, view, delete
python3 AzureRedOps.py -a list-token
python3 AzureRedOps.py -a view -n mytoken
python3 AzureRedOps.py -a delete -n mytoken

اكتشاف المستأجر والمصادقة

Resolve a tenant ID from a domain

python3 AzureRedOps.py -a id -t contoso.com

Device-code phishing (auto-capture is on by default)

python3 AzureRedOps.py -a phish-start -tid common -app d3590ed6-52b3-4102-aeff-aad2292ab01c

Capture later with a previously issued device code

python3 AzureRedOps.py -a phish-capture -c -tid common

Username / password (ROPC)

python3 AzureRedOps.py -a auth -u [email protected] -p 'P@ssw0rd!' -tid

Interactive browser capture, saving tokens automatically

python3 AzureRedOps.py -a auth-interactive -url https://portal.azure.com -s -n harvested

Refresh a saved token

python3 AzureRedOps.py -a refresh -l mytoken -app d3590ed6-52b3-4102-aeff-aad2292ab01c

On-Behalf-Of: exchange an issued token for a Graph-scoped token

python3 AzureRedOps.py -a obo -l mytoken -tid -app -cs -au https://graph.microsoft.com

Convert an issued token into an Outlook-on-the-web session and open it in a browser

python3 AzureRedOps.py -a browser-sso -l mytoken -url outlook -prt

root@kitploit:~
#### كيف تعمل تدفقات المصادقة

تنفذ AzureRedOps عدة طرق متميزة للحصول على الرموز. اختر الطريقة التي تناسب
مهمتك؛ جميعها تلتزم بـ `-s/-n` للحفظ التلقائي للنتيجة.

##### التصيد عبر رمز الجهاز (`phish-start` / `phish-capture`)

صُممت **منحة تفويض الجهاز** في OAuth 2.0 للأجهزة المقيدة بالإدخال،
مما يجعلها أداة تصيد قوية: تطلب رمزًا باسم تطبيق Microsoft من الطرف الأول،
ثم تدفع هدفًا عبر الهندسة الاجتماعية إلى إدخال هذا الرمز على
`https://microsoft.com/devicelogin` أثناء تسجيل دخوله إلى حسابه. وبمجرد
قيامه بذلك، يتم إصدار الرموز **لك**.

- يطلب `phish-start` رمز جهاز ويطبع **رمز المستخدم** وعنوان URL لتسجيل الدخول
  و**رمز الجهاز** الخام. ونظرًا لأن القيمة الافتراضية لـ `-as/--auto-start` هي `True`،
  فإنه يبدأ فورًا في الاستقصاء عن الرمز — لذا فإن مجرد تشغيل `phish-start` وتسليم
  رمز المستخدم إلى الهدف عادةً ما يكون كل ما تحتاجه.
- `phish-capture` هو النظير اليدوي: زوّده برمز جهاز حصلت عليه مسبقًا باستخدام
  `-c/--devicecode` فيستقصي نقطة نهاية الرمز حتى يكمل الضحية تسجيل الدخول
  (تعيد الأداة المحاولة بصمت بينما يكون التفويض معلقًا).
- استخدم `-app/--appid` لانتحال صفة عميل محدد من الطرف الأول و`-tid/--tenant-id`
  لتحديد النطاق إلى مستأجر (`common` افتراضيًا). نصيحة: اضبط النطاق على
  `'https://graph.microsoft.com/.default offline_access openid'` للحصول على
  رمز جاهز لـ Graph مع رمز تحديث.```bash
# Start a device-code session (auto-captures the token once the victim logs in)
python3 AzureRedOps.py -a phish-start -tid common -s -n phished

# Or capture against a code you generated separately
python3 AzureRedOps.py -a phish-capture -c <device-code> -tid common -s -n phished
موافقة تطبيق الطرف الثالث (auth-app)

يقوم auth-app بتنفيذ تدفق Authorization Code كامل مع PKCE مقابل تسجيل تطبيق خارجي (غير افتراضي). تشغّل الأداة مستمع HTTPS محليًا (includes/Webserver.py، على https://localhost:2342) يعمل كـ URI إعادة توجيه OAuth، وتولّد زوج PKCE code_verifier/code_challenge، وتطبع عنوان URL للتفويض لتفتحه في المتصفح. بعد موافقتك، يعيد Azure توجيه رمز التفويض إلى المستمع المحلي، ثم تقوم الأداة باستبداله بالرموز المميزة (tokens).

هذا هو التدفق الذي يجب استخدامه عندما تتحكم في تطبيق (أو تكون قد سجلّته) وتريد توجيه الموافقة عبر جلسة متصفح حقيقية — وهو مفيد لسيناريوهات من نوع الموافقة غير المشروعة (illicit-consent) أو عندما يكون ROPC محظورًا.

  • يتطلب زوج شهادة/مفتاح TLS في includes/web/cert.pem و includes/web/key.pem (راجع الملاحظات حول كيفية توليدهما).
  • معرف العميل الافتراضي لهذا التدفق هو 8545b2fc-a69c-4851-9206-0f74a519fe5f.```bash python3 AzureRedOps.py -a auth-app -tid -s -n consented
root@kitploit:~
##### المصادقة التفاعلية عبر المتصفح (`auth-interactive`)

`auth-interactive` يطلق **متصفحًا حقيقيًا عبر Playwright** (Firefox افتراضيًا؛ اختر
المحرك باستخدام `-br/--browser`) ويتيح للمشغّل
(أو لهدف في جلسة مشتركة) إكمال تسجيل دخول تفاعلي — بما في ذلك
MFA وConditional Access وعمليات إعادة التوجيه الموحّدة/SSO التي لا يمكن للتدفقات البرمجية
تلبيتها. يتم تسجيل جلسة المتصفح بالكامل في ملف HAR (`session.har`); تقوم الأداة
بعد ذلك بتحليل هذا الالتقاط، وتستخرج **كل** زوج من رموز الوصول/التحديث الذي يظهر على
نقطة النهاية `/oauth2/v2.0/token`، وتفك ترميز كل JWT، وتتيح لك اختيار أيّها (أو أيّها)
لحفظه.

- `-url/--url` يحدد الصفحة(صفحات) التي سيتم الانتقال إليها بعد تحميل صفحة تسجيل الدخول. يقبل
  **قائمة مفصولة بفواصل** من العناوين URL (مثل `https://portal.azure.com,https://outlook.office.com`)
  بحيث يمكنك جمع الرموز المميزة لعدة موارد في جلسة واحدة. القيمة الافتراضية هي
  `https://portal.azure.com`.
- يقوم هذا النشاط **دائمًا بالحفظ التلقائي**: بعد الاستخراج، يطلب منك تحديد فهرس (فهارس)
  الرمز المميز الذي تريد الاحتفاظ به واسمًا لتخزينها تحته.
- أضف `-k/--keep` للاحتفاظ بـ `session.har` للتحليل دون اتصال (يتم حذفه
  افتراضيًا).```bash
# Log in interactively and harvest tokens for two resources
python3 AzureRedOps.py -a auth-interactive -url https://portal.azure.com,https://outlook.office.com -k
تبادل رمز نيابةً عن (obo)

obo ينفّذ تدفق OAuth 2.0 نيابةً عن (grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer). يأخذ رمز وصول صادر مسبقًا كتأكيد (assertion) ويبادله برمز جديد تمامًا موجّه إلى مورد سفلي مختلف — دون إعادة مصادقة المستخدم.

  • يتم توفير رمز التأكيد عبر -ac/--access-token أو رمز مخزّن مؤقتًا عبر -l/--load-access-token.
  • -app/--appid + -cs/--client-secret يحدّدان العميل السري (confidential client) الذي ينفّذ عملية التبادل. يتطلب Entra ID أن يكون هذا العميل هو الجمهور (aud) لرمز التأكيد؛ أي عدم تطابق يفشل مع AADSTS500131/AADSTS50013.
  • يتم تعيين المورد الهدف باستخدام -au/--audience (الافتراضي https://graph.microsoft.com، ويُحوَّل إلى <audience>/.default) أو نطاق كامل باستخدام -sc/--scope.
  • تتم طباعة الرمز الناتج (ورمز التحديث، عند إرجاعه) ويحترم -s/-n.```bash

Exchange an issued token for a Microsoft Graph token on behalf of the user

python3 AzureRedOps.py -a obo -l mytoken -tid
-app -cs -au https://graph.microsoft.com -s -n obo-graph

root@kitploit:~
##### تسجيل الدخول الموحّد من الرمز المميّز إلى المتصفح (`browser-sso`)

يفتح `browser-sso` **متصفحًا حقيقيًا مصادَقًا مسبقًا بصفته المستخدم** — أنت
لا تضغط على أي شيء وتهبط مباشرة إلى الداخل، على سبيل المثال، **Outlook على الويب**. هذا هو
تدفق «فقط افتح المتصفح واحصل على جلسة صالحة». يحصل المتصفح على جلسته بإحدى
ثلاث طرق، حسب ترتيب الأفضلية:

**1. `-aprt/--auto-prt` — سكّ ملف تعريف ارتباط PRT تلقائيًا (موصى به).**
تحوِّل الأداة رمز التحديث بالكامل إلى **رمز التحديث الأساسي (PRT)** وإلى ملف تعريف الارتباط الخاص به في المتصفح
ثم تزرعه بحيث يُكمل ESTS الخاص بـ Entra عملية SSO دون تسجيل دخول يدوي.
السلسلة (في `includes/PRT.py`، بروتوكول ROADtoken / roadtx / AADInternals) هي:

1. استبدِل رمز التحديث برمز **تسجيل الجهاز (DRS)**.
2. **سجِّل جهازًا** لدى Azure AD → شهادة الجهاز + مفتاح النقل.
3. اطلب **PRT + مفتاح جلسة** باستخدام رمز التحديث، موقَّعًا بشهادة الجهاز.
4. **اشتقِ ملف تعريف الارتباط `x-ms-RefreshTokenCredential`** (KDFv2: KDF SP800-108 عبر `SHA256(ctx‖decoded-payload-bytes)` → JWT موقَّع بـ HS256؛ KDFv1 → `AADSTS5000611`، بايتات خاطئة → `AADSTS50058`)
   وازرعه في سياق متصفح جديد.

يُزرع ملف تعريف الارتباط بقيمة `SameSite=None` ويُستخدم عبر **إحماء `/authorize` من ESTS على
المستوى الأعلى** (عميل Office `landingv2`) بحيث يُسَكّ ملف تعريف ارتباط الجلسة `ESTSAUTH`
كطرف أول — بعدها يُفتح التطبيق الهدف مسجَّل الدخول بالفعل. يُشتق ملف تعريف الارتباط باستخدام
nonce جديد قبل الانتقال مباشرةً وتُعاد المحاولة مرة واحدة؛ إذا ما زال SSO غير مكتمل، تستكشف الأداة
`prompt=none` وتطبع سبب `AADSTS` الدقيق (مثل: وصول مشروط يتطلب
جهازًا متوافقًا/مُدارًا، أو MFA — ولا يمكن تجاوز أيٍّ منهما بجهاز مسجَّل حديثًا).

تتم طباعة PRT ومفتاح الجلسة وملف تعريف الارتباط (مع تلميح `-prt "<value>"` جاهز للصق)
بحيث يمكنك إعادة استخدامها لاحقًا دون إعادة تشغيل السلسلة.

> **المتطلبات والأمان التشغيلي لـ `-aprt`:**
> - يتطلب حزمة **`cryptography`** (`pip install cryptography`؛ وهي موجودة في
>   `requirements.txt`).
> - يجب أن ينتمي رمز التحديث إلى **عميل FOCI / وسيط** — مثلًا، رمز تم التقاطه بواسطة
>   **تصيّد Microsoft Authentication Broker باستخدام رمز الجهاز**
>   (`29d9ed98-a469-4536-ade2-f981bc1d605e`)، وهذا بالضبط ما
>   يولّده طُعم رمز الجهاز الخاص بـ SharePoint/OneDrive. يعمل أيضًا `-app` الافتراضي (عميل Microsoft Office FOCI).
> - **تسجيل الجهاز يكتب كائن جهاز في المستأجر (tenant)** — فهو ليس صامتًا و
>   يترك أثرًا (ويتطلب أن يكون المستخدم مخوَّلًا بضم/تسجيل الأجهزة).

**2. `-prt/--prt-cookie` — ازرع ملف تعريف ارتباط PRT تمتلكه بالفعل.**
إذا كنت تمتلك بالفعل قيمة `x-ms-RefreshTokenCredential` (من تشغيل سابق لـ `-aprt`، أو
من جهاز مخترَق عبر `ROADtoken`/`browsercore` أو `Mimikatz`)، مرّرها مباشرةً و
تخطَّ سلسلة السكّ.

**3. لا شيء من ذلك — حوِّل الرمز وسجِّل الدخول يدويًا (بديل احتياطي).**
بدون ملف تعريف ارتباط PRT، يُستبدَل رمز التحديث برمز وصول/تحديث مقيّد النطاق بمورد
(تتم طباعته وحفظه باستخدام `-s/-n`)، ويُفتح المتصفح على الهدف لكي
تُكمل تسجيل الدخول يدويًا.

**حصاد PRT / ملفات تعريف ارتباط الجلسة.** عندما تنتهي جلسة المتصفح (مهلة الإغلاق التلقائي أو
إغلاقك للنافذة)، يقرأ `browser-sso` سياق المتصفح النشط ويطبع **كل
ملف تعريف ارتباط SSO قابل لإعادة الاستخدام تم إصداره** — ملف تعريف ارتباط PRT (`x-ms-RefreshTokenCredential`) و
ملفات تعريف ارتباط جلسة ESTS (`ESTSAUTH`, `ESTSAUTHPERSISTENT`, ...) — كلٌّ منها مع تلميح
`-prt` جاهز للصق بحيث يمكنك إعادة استخدامها في المرة القادمة. تتم مراقبة ملفات تعريف الارتباط دوريًا بينما الجلسة نشطة،
لذا يتم التقاط القيمة حتى لو أغلقت النافذة مبكرًا. يعمل الحصاد نفسه في
نهاية `auth-interactive`.

- يحدد `-url/--url` الهدف. استخدم إعدادًا مسبقًا سهلًا — `outlook`، `office`، `teams`،
  `sharepoint`، `onedrive`، `portal`، `graph` — أو مرّر واحدًا أو أكثر من عناوين URL الخام `https://`
  (مفصولة بفواصل). الافتراضي هو `outlook`.
- يوفر `-r/--refresh-token` + `-tid` (أو `-l` مخزَّن مؤقتًا) رمز التحديث.
  الافتراضي لـ `-app/--appid` هو عميل Microsoft Office FOCI.
- يختار `-br/--browser` محرك Playwright (Firefox افتراضيًا).
- يحافظ `-k/--keep` على تسجيل `session.har` لجلسة المتصفح.```bash
# BEST: auto-mint a PRT from a device-code-phished (broker) token and drop straight
# into an authenticated Outlook on the web — no manual login.
python3 AzureRedOps.py -a browser-sso -l phished -url outlook -aprt

# Seed a PRT cookie you already have
python3 AzureRedOps.py -a browser-sso -l mytoken -url outlook -prt <x-ms-RefreshTokenCredential>

# Target Teams from a raw refresh token, auto-mint the PRT, keep the session recording
python3 AzureRedOps.py -a browser-sso -r 0.AReAB... -tid <tenant-guid> -url teams -aprt -k

عمليات Microsoft Graph

Who am I?

python3 AzureRedOps.py -a self -l mytoken

Enumerate users (beta endpoint, save to JSON, only show some fields)

python3 AzureRedOps.py -a list-users -l mytoken -beta -j users.json -fl displayName,userPrincipalName

Register an application

python3 AzureRedOps.py -a register-app -n EvilApp -l mytoken

Assign Global Admin to a user

python3 AzureRedOps.py -a add-group -uid -l mytoken

Upload a file to OneDrive

python3 AzureRedOps.py -a push-file -fp ./payload.docx -n payload.docx -l mytoken

Query an arbitrary Graph URL

python3 AzureRedOps.py -a raw-url -url "https://graph.microsoft.com/beta/users" -l mytoken

Invite an external user

python3 AzureRedOps.py -a invite -n [email protected] -url https://example.com/invite -l mytoken

Hunt for exploitable public apps

python3 AzureRedOps.py -a magic-app -l mytoken

root@kitploit:~
### رش كلمات المرور

| النشاط | مطلوب | اختياري | الوصف |
|----------|----------|----------|-------------|
| `spray` | `-u`, `-p`, `-tid` | `-fp`, `-cp` | رشّ بيانات الاعتماد ضد معرّفات تطبيقات الطرف الأول المعروفة (واجهات برمجة التطبيقات v0 + v2.0). |
| `spray-refresh` | `-v`, و (`-l`) **أو** (`-r` + `-tid`) | `-fp`, `-cp` | إعادة استخدام رمز تحديث عبر العديد من معرّفات التطبيقات. |

بشكل افتراضي، يستخدم كلا النشاطين `includes/auth_apps.json` كمصدر للتطبيقات؛ يمكنك تجاوزه باستخدام `-fp`. أضف `-cp` لاختبار ما إذا كان كل تسجيل دخول ناجح يمكنه تعداد المستخدمين/التطبيقات.```bash
# Spray a single credential across first-party apps
python3 AzureRedOps.py -a spray -u [email protected] -p 'P@ssw0rd!' -tid <tenant-guid> -cp

# Cross-app refresh spraying from a saved token
python3 AzureRedOps.py -a spray-refresh -l mytoken -v v2.0

الاستخبارات والاكتشاف

root@kitploit:~
---

## المخرجات والملفات المُنشأة

| الملف | مُنشأ بواسطة | الوصف |
|------|-----------|-------------|
| `.azure_creds` | الأنشطة التي تحفظ الرموز | ذاكرة تخزين مؤقتة محلية بصيغة JSON لرموز الوصول والتحديث، مُفهرسة بالاسم. |
| `output.txt` | علم `-re` | نسخة مطابقة بزمن استلام لجميع مخرجات وحدة التحكم. |
| `session.har` | `auth-interactive` / `browser-sso` | تسجيل جلسة المتصفح (يُحذف ما لم يتم ضبط `-k`). |
| `<name>.json` | علم `-j` / `gather-all` | استجابات API محفوظة. |

### ملفات البيانات المضمنة

| الملف | الوصف |
|------|-------------|
| `includes/auth_apps.json` | معرّفات التطبيقات المستهدفة المستخدمة في الرش (spraying) وقوائم الاهتمام. |
| `includes/apps.json` | معرّفات تطبيقات Microsoft المعروفة وبياناتها الوصفية لـ `knownids`. |
| `includes/Webserver.py` | مستمع HTTPS محلي ينفّذ إعادة توجيه PKCE لـ `auth-app`. |
| `includes/PRT.py` | سلسلة سكّ رموز PRT (تسجيل الجهاز ← PRT ← ملف تعريف ارتباط `x-ms-RefreshTokenCredential`) المستخدمة بواسطة `browser-sso -aprt`. |
| `includes/web/cert.pem`, `includes/web/key.pem` | مواد TLS للمستمع المحلي. |

---

## ملاحظات ونصائح

- **معرّف التطبيق الافتراضي** (`d3590ed6-52b3-4102-aeff-aad2292ab01c`) هو عميل Microsoft Office الرسمي، ويعمل مع معظم التدفقات. وتشير التلميحات المطبوعة بواسطة بعض الأنشطة إلى تمديد الرموز إلى تطبيق **Microsoft Azure CLI** (`04b07795-8ddb-461a-bbee-02f9e1bf7b46`) للوصول بشكل أوسع.
- **إرشادات النطاق:** استخدم `-sc openid` لرشّ كلمات المرور (password spraying) و `-sc 'https://graph.microsoft.com/.default'` لعمليات Graph.
- **`--beta`** يحوّل `list-users` / `list-applications` إلى نقطة نهاية Graph التجريبية، والتي يمكن أن تُظهر معلومات إضافية (مثل سمات المزامنة المحلية (on-prem)).
- **`auth-app` TLS:** يتطلب مستمع PKCE المحلي زوج شهادة/مفتاح في `includes/web/cert.pem` و `includes/web/key.pem`. قم بتوليد زوج موقّع ذاتيًا إذا كانا مفقودين، على سبيل المثال:  ```bash
  openssl req -x509 -newkey rsa:2048 -nodes \
    -keyout includes/web/key.pem -out includes/web/cert.pem -days 365 -subj "/CN=localhost"
  • تصحيح الأخطاء: يطبع -d معلومات تصحيح عالية المستوى؛ بينما يُفرغ -dd طلبات واستجابات HTTP الكاملة (الترويسات والأجسام) — مفيد عند تشخيص فشل عمليات تبادل الرموز.
  • محرك المتصفح (-br/--browser). تدفقات المتصفح (auth-interactive، browser-sso) تشغّل متصفح Playwright بواجهة مرئية. المحرك الافتراضي هو firefox (أكثر محرك موثوق بواجهة مرئية تحت WSLg)؛ يمكنك التبديل باستخدام -br chromium أو -br webkit. ثبّت المحرك الذي تختاره مرة واحدة باستخدام python -m playwright install <engine>.
  • Playwright على WSL — نافذة فارغة / تجمّد الجهاز بالكامل. تحت WSL/WSLg، يمكن لمتصفح بواجهة مرئية أن يفتح فارغًا ولا يرسم أبدًا بينما يعلق المضيف بالكامل. السبب الجذري: يكشف WSLg عن GPU افتراضية (/dev/dxg، مدفوعة ببرنامج تشغيل d3d12 Mesa driver) التي تحاول عملية GPU/compositor الخاصة بالمتصفح استخدامها، بينما يكون /dev/shm الافتراضي في VM الخاص بـ WSL صغيرًا جدًا (غالبًا 64 ميجابايت). ويتضافر الأمران — تدور عملية GPU على جهاز لا يمكنها تشغيله ويستنفد مُركّب الذاكرة المشتركة — لذلك لا يُعرض أي شيء ويتضخم VM حتى ينهار مضيف Windows. وكان هناك عامل مساهم ثانوي هو : صفحة تسجيل الدخول من Microsoft تستخدم الاستطلاع الطويل، لذلك لا يتم تشغيل أبدًا ويُحجب التنقل على صفحة فارغة حتى انتهاء المهلة.

الاعتمادات

تم الإنشاء بواسطة Mr.Un1k0d3r — TrueCyber Inc.

تنزيل الأداة
تمت مصادقته بالفعل كمستخدم
-aprt/--auto-prt
Primary Refresh Token (PRT)
x-ms-RefreshTokenCredential
الملاحظات
النشاطمطلوباختياريالوصف
id-t—حدّد معرّف المستأجر (Tenant ID) لنطاق بريد إلكتروني معيّن.
phish-start—-app, -tid, -as, -s, -nابدأ تدفق رمز الجهاز (device-code flow)؛ يطبع رمز المستخدم ويلتقطه تلقائيًا (بشكل افتراضي).
phish-capture-c-app, -tid, -s, -nاستعلم عن الرموز المميزة باستخدام رمز جهاز تم إصداره مسبقًا.
auth-u, -p, -tid, -app, -v-s, -nصادِق باستخدام اسم المستخدم وكلمة المرور (ROPC).
auth-app-tid-s, -nتدفق رمز التفويض (Authorization-Code) + PKCE عبر مستمع HTTPS محلي.
auth-interactive—-url, -k, -nشغّل متصفحًا (Playwright)، واترك المستخدم يسجّل الدخول، واجمع الرموز من ملف HAR الخاص بالجلسة. يحفظ دائمًا تلقائيًا.
refresh-v, -app, و (-l) أو (-r + -tid)-s, -nاستبدل رمز التحديث (refresh token) برمز وصول جديد.
obo-tid, -app, و (-ac) أو (-l)-cs, -au, -sc, -s, -nOn-Behalf-Of: استبدل رمز وصول صادر برمز مقيّد بنطاق مورد آخر.
browser-sso-app, و (-l) أو (-r + -tid)-aprt, -url, -prt, -v, -k, -s, -nافتح متصفحًا مصادقًا بصفة المستخدم بالفعل. أضف -aprt لسكّ ملف تعريف ارتباط PRT تلقائيًا من رمز التحديث، أو أدخل واحدًا جاهزًا باستخدام -prt، أو ارجع إلى تحويل الرمز مع تسجيل الدخول اليدوي.
النشاطمطلوباختياريالوصف
selfToken—عرض ملف التعريف الخاص بالمستخدم الحالي (/me).
emailToken, -fl—البحث في صندوق بريد المستخدم المُسجَّل دخوله عن كلمة مفتاحية.
permissionToken—عرض سياسة تخويل المستأجر (beta).
list-usersToken-j, -beta, -fl, -expتعداد جميع المستخدمين.
list-applicationsToken-j, -beta, -fl, -expتعداد جميع التطبيقات.
list-principalsToken-j, -fl, -expتعداد جميع كيانات الخدمة.
register-appToken, -n—تسجيل تطبيق جديد (مع سر عميل لمدة عام واحد).
new-groupToken, -n—إنشاء مجموعة أمان جديدة.
add-groupToken, -uid-gidإسناد دور دليل إلى كيان أساسي (الدور الافتراضي = Global Admin).
push-fileToken, -fp, -n—رفع ملف محلي إلى OneDrive الخاص بالمستخدم.
gather-allToken-jجمع شامل للمستخدمين والمجموعات والتطبيقات وكيانات الخدمة والأدوار والسياسات والمنح.
raw-urlToken, -url-j, -fl, -expإرسال طلب GET خام إلى أي عنوان Graph/REST URL (يتعامل مع ترقيم صفحات @odata.nextLink).
inviteToken, -n-urlدعوة مستخدم خارجي (ضيف). -n هو البريد الإلكتروني للمدعو.
magic-appToken—البحث عن التطبيقات التي لديها موافقة AllPrincipals، وappRoleAssignmentRequired=false، وعناوين URI عامة لإعادة التوجيه.
النشاطمطلوباختياريالوصف
knownids—-fl, -expسرد معرفات تطبيقات Microsoft المعروفة (includes/apps.json).
list-interest——سرد فئات التطبيقات المعرّفة في includes/auth_apps.json.
interest—-i, -tyسرد معرفات التطبيقات المثيرة للاهتمام؛ -i يطبع المعرفات فقط، -ty يفلتر حسب الفئة.
python3 AzureRedOps.py -a knownids
python3 AzureRedOps.py -a list-interest
python3 AzureRedOps.py -a interest -ty all_users
python3 AzureRedOps.py -a interest -i # IDs only
/dev/shm
page.goto(..., wait_until="networkidle")
networkidle
  • تم إصلاحه داخل الأداة: يكتشف AzureRedOps الآن WSL تلقائيًا ويعطّل تسريع العتاد لأي محرك تستخدمه — يحصل Chromium على --no-sandbox --disable-gpu --disable-dev-shm-usage، ويحصل Firefox على gfx.webrender.force-disabled / layers.acceleration.disabled — مع الرجوع إلى عرض CPU (البرمجي) حتى تظل الصفحة تُعرض وتكون تفاعلية بالكامل. كل عملية تنقّل تنتظر الآن domcontentloaded بدلاً من networkidle. يجب أن ترى ببساطة متصفحًا يعمل.
  • إذا كنت لا تزال تواجه مشكلات، ارفع حجم /dev/shm (sudo mount -o remount,size=1g /dev/shm)، وتأكد من أنك على WSL 2 مع WSLg (wsl --update؛ يجب أن يكون echo $DISPLAY غير فارغ)، وتحقق من تثبيت بيئة تشغيل المتصفح في البيئة الافتراضية (venv) (python -m playwright install firefox و python -m playwright install-deps).