
أداة BOF غير متزامنة لاستخراج أو تجديد رموز Kerberos TGTs تلقائياً على نظام مستهدف.
يحتوي هذا المستودع على ملفي كائنات Beacon غير متزامنين (BOF). الأول، tgt-monitor، يراقب النظام بحثًا عن أحداث تسجيل الدخول إلى Kerberos ويوقظ الوكيل كلما تم التقاط TGT جديد لـ Kerberos. على غرار أمر monitor الخاص بـ Rubeus، يعمل هذا BOF بشكل غير محدود ويتحقق دوريًا من ذاكرة التخزين المؤقت لتذاكر LSA على النظام. عند اكتشاف TGT جديد، يقوم بطباعة بيانات التذكرة وإخراج blob مشفر بـ base64 بصيغة kirbi يمكن استخدامه للحركة الجانبية عبر هجمات تمرير التذكرة. الثاني، tgt-renew، يقوم تلقائيًا بتجديد TGTs على النظام إذا كان عمرها المتبقي أقل من حد محدد (مثل 15 دقيقة).
[!Important] تتطلب BOFs في هذا المستودع قدرات تحميل ملفات الكائنات غير المتزامنة. يتم توفير هذه الوظيفة بواسطة إطار عمل Conquest.
يتطلب تشغيل كلا الملفين BOF من سياق NT AUTHORITY\SYSTEM. يتم التحقق من الامتيازات بنفس المنطق.
SeImpersonatePrivilege). ينتهي BOF إذا لم يؤدي ذلك أيضًا إلى الوصول على مستوى SYSTEM.يتم تكرار الخطوات أدناه في حلقة حتى يتم إلغاء BOF عبر حدث الإيقاف. يحدد فاصل زمني محدد من قبل المستخدم التأخير بين الاستطلاعات.
--user، يتم النظر فقط في الجلسات المطابقة لاسم المستخدم ذلك.BeaconWakeup() لإجبار الوكيل على تسجيل الوصول وإرجاع المخرجات.
--user، يتم النظر فقط في الجلسات المطابقة لاسم المستخدم ذلك.RenewUntil، يتم وضع علامة عليها كمنتهية الصلاحية ويتطلب إعادة المصادقة.BeaconWakeup().
تتضمن عملية تجديد التذاكر الخطوات التالية:
يحتوي هذا المستودع على وحدة Conquest تنفذ الأمرين التاليين.
يقوم BOF tgt-monitor بالتنبيه عند التقاط TGTs جديدة وإرجاعها كـ blob مشفر بـ Base64. يجب تمرير الوسيطات التالية إلى ملف الكائن:
| الاسم | النوع | الوصف |
|---|---|---|
interval | int | المهلة بين الفحوصات بالثواني. |
targetUsers | string | قائمة غير حساسة لحالة الأحرف بأسماء المستخدمين المستهدفين مفصولة بفواصل. عند تعيين هذا الحقل، يتم استرداد TGTs فقط للمستخدمين المحددين. وإلا، يتم جمع TGTs لجميع المستخدمين. لاحظ أن حسابات الكمبيوتر يجب أن تنتهي بـ $. |
Usage: tgt-monitor [--interval interval] [--user user]
Example: tgt-monitor --interval 5 --user DC01$
Optional arguments:
--interval interval INT Polling interval in seconds (default: 60).
--user user STRING Comma-separated list of target usernames (default: all users).

يمكن استخدام التذكرة المشفرة مباشرة مع Rubeus.exe ptt /ticket:<base64> أو impacket-ticketConverter لمزيد من الحركة الجانبية، كما هو موضح في لقطة الشاشة أدناه. في Conquest، من الممكن استخدام الأمر ptt لحقن التذكرة مباشرة في جلسة تسجيل الدخول الحالية لانتحال شخصية المستخدم المستهدف.

يقوم BOF tgt-renew تلقائيًا بتجديد التذاكر التي ستنتهي صلاحيتها قريبًا حتى لا يمكن تجديدها بعد ذلك. يجب تمرير الوسيطات التالية إلى ملف الكائن:
| الاسم | النوع | الوصف |
|---|---|---|
interval | int | المهلة بين الفحوصات بالثواني. |
threshold | int | حد التجديد بالدقائق. يتم تجديد التذكرة عندما يكون الوقت المتبقي إلى EndTime أقل من هذا الحد. |
targetUsers | string | قائمة غير حساسة لحالة الأحرف بأسماء المستخدمين المستهدفين مفصولة بفواصل. عند تعيين هذا الحقل، يتم تجديد TGTs فقط للمستخدمين المحددين. وإلا، يتم تجديد TGTs لجميع المستخدمين. لاحظ أن حسابات الكمبيوتر يجب أن تنتهي بـ $. |
targetLuids | string | قائمة غير حساسة لحالة الأحرف بـ LUIDs المستهدفة مفصولة بفواصل. عند تعيين هذا الحقل، يتم تجديد TGTs فقط لـ LUIDs المحددة. |
Usage: tgt-renew [--interval seconds] [--threshold minutes] [--user user] [--luid luid]
Example: tgt-renew --luid 0x3e4 --interval 300 --threshold 30
Optional arguments:
--interval seconds INT Polling interval in seconds (default: 60).
--threshold minutes INT Ticket renewal threshold in minutes (default: 15).
--user user STRING Comma-separated list of target usernames (default: all users).
--luid luid STRING Comma-separated list of target LUIDs (default: all LUIDs).
العلامتان --user و --luid متبادلتان (لا يمكن استخدامهما معًا).

git clone https://github.com/jakobfriedl/tgt-monitor-bof
cd tgt-monitor-bof
make
من هناك، استخدم مدير البرامج النصية لـ Conquest لتحميل الوحدة dist/tgt-monitor.py.
يعتمد تنفيذ ملف كائن Beacon هذا على المشاريع التالية: