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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
ctftool — أداة استكشاف تفاعلية لـ CTF | Kitploit
أدوات/GitHubGitHub/taviso/ctftool
أطر الاستغلالالاختبار العشوائياختبار الاختراقالتعلم والتعليماستغلال الملفات الثنائية
GitHubtaviso/ctftool

ctftool

أداة استكشاف تفاعلية لـ CTF

عرض المستودع
1.7k263منذ 4 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة

CTFTOOL

هل تريد فقط اختبار استغلال SYSTEM؟ انقر هنا.

Video of Exploit

أداة تفاعلية لاستكشاف CTF

هذه ctftool، أداة سطر أوامر تفاعلية لتجربة CTF، وهو بروتوكول غير معروف يُستخدم في ويندوز لتنفيذ خدمات النص. قد يكون مفيدًا لدراسة دواخل ويندوز، وتصحيح المشكلات المعقدة مع معالجات إدخال النص وتحليل أمان ويندوز.

من الممكن كتابة نصوص برمجية بسيطة باستخدام ctftool لأتمتة التفاعل مع عملاء أو خوادم CTF، أو إجراء اختبارات تشويش بسيطة.

خلفية

هناك منشور مدونة يرافق إصدار هذه الأداة متاح هنا.

https://googleprojectzero.blogspot.com/2019/08/down-rabbit-hole.html

الاستخدام

تم اختبار ctftool على ويندوز 7 وويندوز 8 وويندوز 10. كلا الإصدارين 32 بت و x64 مدعومان، ولكن تم اختبار x64 بشكل أكثر شمولاً.

هناك تعليمات عبر الإنترنت لمعظم الأوامر، ببساطة اكتب help لرؤية قائمة الأوامر، و help <command> لرؤية تعليمات مفصلة لأمر معين.

root@kitploit:~
$ ./ctftool.exe
An interactive ctf exploration tool by @taviso.
Type "help" for available commands.
Most commands require a connection, see "help connect".
ctf> help
Type `help <command>` for help with a specific command.
Any line beginning with # is considered a comment.

help            - List available commands.
exit            - Exit the shell.
connect         - Connect to CTF ALPC Port.
info            - Query server informaiton.
scan            - Enumerate connected clients.
callstub        - Ask a client to invoke a function.
createstub      - Ask a client to instantiate CLSID.
hijack          - Attempt to hijack an ALPC server path.
sendinput       - Send keystrokes to thread.
setarg          - Marshal a parameter.
getarg          - Unmarshal a parameter.
wait            - Wait for a process and set it as the default thread.
thread          - Set the default thread.
sleep           - Sleep for specified milliseconds.
forget          - Forget all known stubs.
stack           - Print the last leaked stack ptr.
marshal         - Send command with marshalled parameters.
proxy           - Send command with proxy parameters.
call            - Send command without appended data.
window          - Create and register a message window.
patch           - Patch a marshalled parameter.
module          - Print the base address of a module.
module64        - Print the base address of a 64bit module.
editarg         - Change the type of a marshalled parameter.
symbol          - Lookup a symbol offset from ImageBase.
set             - Change or dump various ctftool parameters.
show            - Show the value of special variables you can use.
lock            - Lock the workstation, switch to Winlogon desktop.
repeat          - Repeat a command multiple times.
run             - Run a command.
script          - Source a script file.
print           - Print a string.
consent         - Invoke the UAC consent dialog.
reg             - Lookup a DWORD in the registry.
gadget          - Find the offset of a pattern in a file.
section         - Lookup property of PE section.
Most commands require a connection, see "help connect".
ctf>

أول شيء سترغب في فعله هو الاتصال بجلسة، ومعرفة العملاء المتصلين.

root@kitploit:~
ctf> connect
The ctf server port is located at \BaseNamedObjects\msctf.serverDefault1
NtAlpcConnectPort("\BaseNamedObjects\msctf.serverDefault1") => 0
Connected to CTF server@\BaseNamedObjects\msctf.serverDefault1, Handle 00000264
ctf> scan
Client 0, Tid 3400 (Flags 0x08, Hwnd 00000D48, Pid 8696, explorer.exe)
Client 1, Tid 7692 (Flags 0x08, Hwnd 00001E0C, Pid 8696, explorer.exe)
Client 2, Tid 9424 (Flags 0x0c, Hwnd 000024D0, Pid 9344, SearchUI.exe)
Client 3, Tid 12068 (Flags 0x08, Hwnd 00002F24, Pid 12156, PROCEXP64.exe)
Client 4, Tid 9740 (Flags 0000, Hwnd 0000260C, Pid 3840, ctfmon.exe)

يمكنك بعد ذلك التجربة بإرسال واستقبال الأوامر إلى الخادم، أو أي من العملاء المتصلين.

البناء

إذا كنت لا ترغب في بنائه بنفسك، تحقق من علامة التبويب الإصدارات

استخدمت GNU make و Visual Studio 2019 لتطوير ctftool. يتم دعم الإصدارات 32 بت فقط، لأن هذا يسمح للأداة بالعمل على ويندوز x86 و x64.

إذا تم تثبيت جميع التبعيات، فإن مجرد كتابة make في موجه أوامر المطور يجب أن يكون كافياً.

أستخدم متغير "Build Tools" من Visual Studio، والمكونات الوحيدة التي لدي المحددة هي MSVC و MSBuild و CMake و SDK.

يستخدم هذا المشروع وحدات فرعية لبعض التبعيات، تأكد من أنك تستخدم أمرًا مثل هذا لجلب جميع التعليمات البرمجية المطلوبة.

root@kitploit:~
git submodule update --init --recursive

الاستغلال

الأمثلة تعمل فقط على ويندوز 10 x64. جميع المنصات والإصدارات منذ ويندوز XP متأثرة، ولكن لا يوجد إثبات مفهوم مطبق حاليًا.

تم استخدام هذه الأداة لاكتشاف العديد من مشاكل الأمان الحرجة مع بروتوكول CTF التي كانت موجودة منذ عقود.

إذا كنت تريد فقط اختبار استغلال على ويندوز 10 x64 1903، قم بتشغيل أو النقر المزدوج على ctftool.exe وأدخل هذا الأمر:

root@kitploit:~
An interactive ctf exploration tool by @taviso.
Type "help" for available commands.
Most commands require a connection, see "help connect".
ctf> script .\scripts\ctf-consent-system.ctf

سينتظر ظهور مربع حوار UAC، ويخترقه ويبدأ شل.

في الواقع، ينقسم كود الاستغلال إلى مرحلتين يمكنك استخدامهما بشكل مستقل. على سبيل المثال، قد ترغب في اختراق عملية تابعة لمستخدم في جلسة مختلفة باستخدام المعاملات الاختيارية لـ connect.

يمكن اختراق معظم عملاء CTF، حيث يجبر النواة التطبيقات التي ترسم النوافذ على تحميل المكتبة الضعيفة.

ببساطة اتصل بجلسة، اختر عميلاً لاختراقه (استخدم أوامر scan و thread، أو فقط wait)، ثم:

root@kitploit:~
ctf> script .\scripts\ctf-exploit-common-win10.ctf

ملاحظات الاستغلال

بناء سلسلة قفز CFG تعمل على أغلب عملاء CTF كان صعبًا جدًا. هناك مكونان أساسيان للاستغلال النهائي، تعسفي بدائي الكتابة ثم إعداد مسجلاتنا لاستدعاء LoadLibrary().

يمكنك استخدام dumpbin /headers /loadconfig لتفريغ أهداف الفرع المسموح بها.

الكتابة التعسفية

أحتاج إلى أداة كتابة تعسفية لإنشاء كائنات في موقع يمكن توقعه. أفضل أداة قابلة للاستخدام تمكنت من العثور عليها كانت تناقص dword تعسفي في msvcrt!_init_time.

هذا يعني أنه بدلاً من مجرد تعيين القيم التي نريدها، علينا الاستمرار في التناقص حتى يصل LSB إلى القيمة التي نريدها. هذا عمل كثير، لكننا لا نضطر أبدًا للقيام بأكثر من (2^8 - 1) * len عملية تناقص.

Decrement Write

باستخدام هذه البدائية، أبني كائنًا مثل هذا في بعض المساحة الفارغة غير المستخدمة في قسم .data في kernel32. يجب أن يكون جزءًا من صورة حتى أتمكن من توقع مكان تعيينها، لأن عشوائية الصورة تكون لكل إقلاع في ويندوز.

Object Layout

كانت هناك (بالطبع) العديد من أدوات الكتابة التعسفية، المشكلة كانت في استعادة السيطرة على التنفيذ بعد الكتابة. أثبت هذا أنه صعب جدًا، وهذا هو السبب الذي جعلني عالقًا مع تناقص dword بدلاً من شيء أبسط.

MSCTF تلتقط جميع الاستثناءات، لذا كان التحدي هو إيجاد كتابة تعسفية لم تفسد المكدس بحيث ينجو SEH، أو تعطلت بسرعة كبيرة بدون إحداث أي ضرر.

كانت أداة msvcrt!_init_time أفضل ما وجدته، خلال بضع تعليمات تقوم بإلغاء الإشارة إلى NULL دون إفساد المزيد من الذاكرة. هذا يعني يمكننا تكرارها إلى ما لا نهاية.

إعادة توجيه التنفيذ

وجدت أداتين مفيدتين لضبط المسجلات، الأولى كانت:

root@kitploit:~
combase!CStdProxyBuffer_CF_AddRef:
      mov     rcx,qword ptr [rcx-38h]
      mov     rax,qword ptr [rcx]    
      mov     rax,qword ptr [rax+8]  
      jmp     qword ptr [combase!__guard_dispatch_icall_fptr]

والثانية كانت:

root@kitploit:~
MSCTF!CCompartmentEventSink::OnChange:
      mov     rax,qword ptr [rcx+30h]
      mov     rcx,qword ptr [rcx+38h]
      jmp     qword ptr [MSCTF!_guard_dispatch_icall_fptr]

من خلال الجمع بين هاتين الأداتين والكائن الذي شكلناه باستخدام أداة الكتابة لدينا، يمكننا إعادة توجيه التنفيذ إلى kernel32!LoadLibraryA عن طريق القفز بينهما.

كان هذا معقدًا، لكن تسلسل القفز يعمل على النحو التالي:

Exploit Chain Sequence

إذا كنت مهتمًا، أوصي بمشاهدته في مصحح الأخطاء. لاحظ أنك ستحتاج إلى استخدام الأمر sxd av و sxd bpe وإلا سيتوقف المصحح لكل كتابة!

هجمات تحرير الجلسة

بصرف النظر عن تلف الذاكرة، فإن فئة ثغرات رئيسية يعرضها CTF هي هجمات تحرير الجلسة. عادةً، عملية غير مميزة (على سبيل المثال، منخفضة النزاهة) لن يُسمح لها بإرسال إدخال أو قراءة بيانات من عملية عالية الامتياز. يسمى حد الأمان هذا UIPI، عزل واجهة المستخدم المميزة.

يكسر CTF هذه الافتراضات، ويسمح للعمليات غير المميزة بإرسال إدخال إلى العمليات المميزة.

هناك بعض المتطلبات لنجاح هذا الهجوم، على حد علمي سينجح فقط إذا كان لديك لغة عرض مثبتة تستخدم TIP خارج العملية، معالج إدخال نص خارج العملية. المستخدمون الذين لديهم لغات إدخال تستخدم IMEs (الصينية واليابانية والكورية، وما إلى ذلك) والمستخدمون الذين لديهم أدوات وصول يندرجون ضمن هذه الفئة.

تشمل الهجمات النموذجية...

  • إرسال الأوامر إلى نافذة أوامر مرتفعة.
  • قراءة كلمات المرور من مربعات الحوار أو شاشة تسجيل الدخول.
  • الهروب من صناديق الرمل IL/AppContainer عن طريق إرسال الإدخال إلى نوافذ غير محصنة.

يوجد نص برمجي مثال في دليل scripts سيرسل إدخالًا إلى نافذة notepad لتوضيح كيفية عمل جلسات التحرير.

Edit Session Screenshot

اختطاف المراقب

نظرًا لعدم وجود مصادقة بين العملاء والخوادم في بروتوكول CTF، يمكن للمهاجم الذي لديه الامتيازات اللازمة للكتابة إلى \BaseNamedObjects إنشاء منفذ CTF ALPC والتظاهر بأنه المراقب.

هذا يسمح بتجاوز أي وجميع القيود التي يفرضها المراقب.

إذا كنت تريد تجربة هذا الهجوم، جرب الأمر hijack في ctftool.

root@kitploit:~
An interactive ctf exploration tool by @taviso.
Type "help" for available commands.
ctf> hijack Default 1
NtAlpcCreatePort("\BaseNamedObjects\msctf.serverDefault1") => 0 00000218
NtAlpcSendWaitReceivePort("\BaseNamedObjects\msctf.serverDefault1") => 0 00000218
000000: 18 00 30 00 0a 20 00 00 00 11 00 00 44 11 00 00  ..0.. ......D...
000010: a4 86 00 00 b7 66 b8 00 00 11 00 00 44 11 00 00  .....f......D...
000020: e7 12 01 00 0c 00 00 00 80 01 02 00 20 10 d6 05  ............ ...
A a message received
        ProcessID: 4352, SearchUI.exe
        ThreadId: 4420
        WindowID: 00020180
NtAlpcSendWaitReceivePort("\BaseNamedObjects\msctf.serverDefault1") => 0 00000218
000000: 18 00 30 00 0a 20 00 00 ac 0f 00 00 0c 03 00 00  ..0.. ..........
000010: ec 79 00 00 fa 66 b8 00 ac 0f 00 00 0c 03 00 00  .y...f..........
000020: 12 04 01 00 08 00 00 00 10 01 01 00 00 00 00 00  ................
A a message received
        ProcessID: 4012, explorer.exe
        ThreadId: 780
        WindowID: 00010110
NtAlpcSendWaitReceivePort("\BaseNamedObjects\msctf.serverDefault1") => 0 00000218
000000: 18 00 30 00 0a 20 00 00 ac 0f 00 00 0c 03 00 00  ..0.. ..........
000010: fc 8a 00 00 2a 67 b8 00 ac 0f 00 00 0c 03 00 00  ....*g..........
000020: 12 04 01 00 08 00 00 00 10 01 01 00 58 00 00 00  ............X...
A a message received
        ProcessID: 4012, explorer.exe
        ThreadId: 780
...

هجمات عبر الجلسات

لا يوجد عزل جلسة في بروتوكول CTF، يمكن لأي عملية الاتصال بأي خادم CTF. على سبيل المثال، يمكن لمستخدم خدمات المحطة الطرفية التفاعل مع عمليات أي مستخدم آخر، حتى المسؤول.

يدعم الأمر connect في ctftool الاتصال بجلسات غير افتراضية إذا كنت تريد تجربة هذا الهجوم.

root@kitploit:~
An interactive ctf exploration tool by @taviso.
Type "help" for available commands.
Most commands require a connection, see "help connect".
ctf> help connect
Connect to CTF ALPC Port.

Usage: connect [DESKTOPNAME SESSIONID]
Without any parameters, connect to the ctf monitor for the current
desktop and session. All subsequent commands will use this connection
for communicating with the ctf monitor.

If a connection is already open, the existing connection is closed first.

If DESKTOPNAME and SESSIONID are specified, a connection to ctf monitor
for another desktop and session are opened, if it exists.
If the specified port does not exist, wait until it does exist. This is
so that you can wait for a session that hasn't started
yet in a script.
Examples
 Connect to the monitor for current desktop
  ctf> connect
 Connect to a specific desktop and session.
  ctf> connect Default 1
Most commands require a connection, see "help connect".

الحالة

في وقت كتابة هذا التقرير، من غير المعروف كيف ستغير مايكروسوفت بروتوكول CTF استجابة لعيوب التصميم العديدة التي ساعدت هذه الأداة في كشفها.

لهذا السبب، اعتبر هذه الأداة في حالة إثبات المفهوم.

الإصدارات والمنصات المدعومة

جميع إصدارات ويندوز منذ ويندوز XP تستخدم CTF، على جميع المنصات المدعومة.

بينما لم تكن جزءًا من النظام الأساسي حتى XP، فإن الإصدارات المبكرة مثل ويندوز 98 و NT4 كانت ستستخدم CTF إذا قمت بتثبيت مايكروسوفت أوفيس.

يدعم ctftool ويندوز 7 والإصدارات الأحدث على x86 و x64، ولكن الإصدارات الأقدم و المنصات الأخرى يمكن دعمها، وسنكون ممتنين للمساهمات.

الاختصار

لا توثق مايكروسوفت ما يرمز له CTF، لم يتم شرحه في أي من وثائق خدمات النص، أو نماذج SDK، أو أسماء الرموز، أو ملفات الرأس، أو في أي مكان آخر. نظريتي هي أنها من CTextFramework، ما قد تسميه الفئة في الترميز المجري.

هناك بعض المواقع التي تدعي أن ctfmon له علاقة بـ Clear Type Fonts أو إطار الترجمة التعاونية من Azure. إنهم مخطئون.

تحديث: Jake Nelson يجد دليلاً على 'إطار النص المشترك'

المؤلفون

Tavis Ormandy [email protected]

الترخيص

جميع التعليمات البرمجية الأصلية مرخصة بموجب Apache 2.0، راجع ملف LICENSE للتفاصيل.

المكونات التالية هي مشاريع طرف ثالث مستوردة.

  • pe-parse، بواسطة Andrew Ruef وآخرون.
    • يُستخدم pe-parse لتنفيذ GetProcAddress() للوحدات 64 بت من عملية 32 بت. يُستخدم هذا في الأمر symbol، ويسمح بنفس الملف الثنائي بالعمل على x64 و x86.
  • wineditline، بواسطة Paolo Tosco.
    • يُستخدم wineditline لتنفيذ إدخال سطر أوامر سهل الاستخدام و تحرير السجل.
  • dynamorio، بواسطة Derek Bruening وآخرون.
    • استعرت بعض النماذج الأولية وتعريفات الأنواع من DR.
  • ntdll.h، بواسطة Ladislav Zezula.
    • جمع Ladislav بعض تعريفات الهياكل والنماذج الأولية من إصدارات مختلفة من WDK و DDK و SDK في ملف واحد مناسب.
تنزيل الأداة