nuclei طريقة استخدام أداة

مقدمة

أداة nuclei هى security scanner بيعتمد على ال templates علشان يشتغل تقدر تستخدمها فى عملية فحص المواقع بأكثر من protocol زى ال HTTP, DNS, FILE, NETWORK او تستخدمها ك headless browser فى المقال دا هشرح أشهر البروتوكولات المستخدمة (HTTP, DNS) بالاضافة لل FILE وال NETWORK

طريقة تثبيت الأداة:

GO111MODULE=on go get -v github.com/projectdiscovery/nuclei/v2/cmd/nuclei​

ايه هى ال templates؟

ال templates أو القوالب هى عبارة عن ملفات YAML بيكون فيها كل المعلومات عن نوع وشكل وتفاصيل ال request سواء كان HTTP أو DNS الأداة بتعتمد عليها فى عملية الفحص

شكل وتفاصيل ال template:

بشكل عام ال template بيتقسم لثلاث أقسام:

1- ال template ID: بيكون فيه ال CVE ID او اى ID تختاره لازم تتأكد انوا خالى من المسافات

2- ال template INFO: والقسم دا بيكون فيه بعض المعلومات الخاصة بال TEMPLATE زى الاسم name والشخص اللى كتب ال template أو ال author وال severity ممكن تكون info, low, medium,... على حسب خطورة الثغرة وال الوصف او ال description ودا بيكون فيها الشرح الخاص بوظيفة ال template

3- ال requests: والقسم دا بيبقى فى ال requests لمختلفة على حسب النوع وال matchers اللى على أساسها الأداة بتحدد هل الموقع مصاب بالثغرة اللى موجودة فى ال template ولا لا

ال template دا بيعمل فحص لثغرة xss بنكون محددين المسار اللى فيه الثغرة و كاتبين ال payload وفى ال matchers بنكتب الكلمة المميزة اللى المفروض تكون فى ال response وعلى أساسها الأداة هتعرف هل فى ثغرة ولا لا

طريقة استخدام الأداة

1- HTTP Request

هنفترض ان خدمة معينة بتستخدمها مجموعة من المواقع مصابة بثغرة xss علشان نستغل الثغرة دا محتاجين payload وال parameter المصاب يالثغرة دى وبنبعت ال payload باستخدام HTTP Client زى المتصفح مثلا ونلاحظ ال response هل ال payload رجع فى ال response ولا لا, لو رجع كدا الموقع مصاب لو مرجعش كدا الموقع غير مصاب

لو الخدمة المصابة بثغرة ال xss دى بيستخدمها 10000 موقع مثلا هل هتروح على واحد واحد فيهم وتبدأ تختبره بشكل يدوى؟ أكيد لا, وهنا تكمن قوة أداة زى nuclei الاداة بتاخد ال request و القيمة أو العلامة المميزة اللى الأداة هتبحث عنها فى ال response والقيمة دا بتكون فى ال matchers, فى شكل template وبتاخد ال domains list وتبدأ تبعتلهم واحد واحد وترجعلك النتايج فى الأخر, فى ال request هنلاقى {{BaseURL}} ودى قيمة مميزة بيتم استبدالها بال URL لخاص بالموقع اللى هيتعمله فحص, والقيمة دى case sensitive لازم تتكتب زى ما هى

2- Raw HTTP Request

فى المثال الاول كنا بنكتب ال Request ك parameters وتقدر تضيف ال headers من خلال ال headers

لاكن هنا تقدر تنسخ ال request زى ما هو من ال burpsuite مثلا وتكتبة فى block واحد فى ال section اللى اسمه raw

3- Network Requests

فى أداة اسمها netcat ممكن تستخدمها فى انك تبدأ اتصال TCP or UDP ترسل بيها أو تستلم بيانات, على سبيل المثال ممكن تستخدمها فى انك تبعت HTTP request

أداة nuclei ممكن تؤدى نفس الوظيفة من خلال ال Network request

فى المثال دا هنستخدم nuclei فى اننا بعت raw HTTP request زى اللى بعتناه ب netcat

القيمة المميزة {{Hostname}}بيتم استبدالها بال domain اللى هنبدأ معاه الاتصال

4- DNS Requests

ممكن نستخدم nuclei فى اننا نعمل automation لل DNS Lookups ونبحث عن records معينة, هنلاحظ فى الصورة الname القيمة بتاعته {{FQDN}} ودى قيمة مميزة بيتم استبادلها بكل Domain هنعمله lookup وال type وقيمته بتختلف على حسب نوع ال dns record اللى بنعمله lookup

ممكن نستخدم DNS requests فى اننا نجمع ال domains اللى شغالة فى ip range معين, على سبيل المثال ال domains اللى بتستخدم cloudflare, أو فى بعض الخدمات ممكن نتأكد اذا كان subdomain معين ممكن نعمله takeover

5- File Requests

دلوقتى لو معانا مجموعة من الملفات المختلفة (js, py, txt, html, jpg, png) وعايزين نقرأ نوع معين منهم ونستخرج منه بعض البيانات ممكن نستخدم أداة زى grep مثلا

فى المثال دا استخدمنا grep علشان نعمل extraction لل script tags من ملف HTML

ممكن ننفذ نفس العملية ولاكن باستخدام nuclei باستخدام ال template دا على سبيل المثال, بنحدد ال file types من خلال قسم ال extensions وبنكتب ال file extension اللى الأدة المفروض تقرأها فلو عندى ممجموعة مختلفه من الملفات هقدر أقرأ نوع معين, وبنحدد الحاجة اللى بندور عليها فى الملفات دى من خلال ال extractors والنوع هنا بيكون regex وبنكتب ال pattern اللى بندور عليه

فى المثال دا كانت الأداة بتبحث عن google API key دا خل ملفات JavaScript

طريقة كتابة ال template

لو افترضنا انك معاك PoC لثغرة معينة سواء أنت لقيت الثغرة دى بنفسك أو لوقيت ال PoC على twitter على سبيل المثال أزاى ممكن تحول ال PoC دا ل Template تقدر تستخدمه فى nuclei

1- أول خطوة ممكن نعملها اننها نعمل reproduce للثغرة

2- هنعمل capture لل request باستخدام ال burp لى سبيل المثال

3- هناخد ال request ونكتبه فى صورة template اما على شكل parameters او raw

لو هنكتبه غلى شكل parameters هيكون بالشكل دا متقسم لثلاث أقسام رئيسية (id , info, requests)

قسم ال requests بيتقسم لعدة أجزاء على حسب شكل ال requests فى الصورة دى متقسم لخمس أجزاء (method, path, headers, body, matchers)

1- method: GET, POST, PUT, DELETE, ....

2- path: file path on the server

3- headers: HTTP headers

4- body: optionally (based on HTTP method)

5- matchers: بيكون فيها البيانات اللى الاداة هتبحث عنها

اما لو هنكتبة بشكل raw فبيكون بالشكل دا الrequst زى ما هو فى block واحد

واخر خطوة بنتأكد ان كل حاجة سليمة بنشغل الأداة ونعترض ال request, شغال تمام زى ما واضح فى الصورة

المصادر

Last updated