nuclei طريقة استخدام أداة
Last updated
Was this helpful?
Last updated
Was this helpful?
أداة 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 أو القوالب هى عبارة عن ملفات 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 وعلى أساسها الأداة هتعرف هل فى ثغرة ولا لا
هنفترض ان خدمة معينة بتستخدمها مجموعة من المواقع مصابة بثغرة xss علشان نستغل الثغرة دا محتاجين payload وال parameter المصاب يالثغرة دى وبنبعت ال payload باستخدام HTTP Client زى المتصفح مثلا ونلاحظ ال response هل ال payload رجع فى ال response ولا لا, لو رجع كدا الموقع مصاب لو مرجعش كدا الموقع غير مصاب
لو الخدمة المصابة بثغرة ال xss دى بيستخدمها 10000 موقع مثلا هل هتروح على واحد واحد فيهم وتبدأ تختبره بشكل يدوى؟ أكيد لا, وهنا تكمن قوة أداة زى nuclei الاداة بتاخد ال request و القيمة أو العلامة المميزة اللى الأداة هتبحث عنها فى ال response والقيمة دا بتكون فى ال matchers, فى شكل template وبتاخد ال domains list وتبدأ تبعتلهم واحد واحد وترجعلك النتايج فى الأخر, فى ال request هنلاقى {{BaseURL}}
ودى قيمة مميزة بيتم استبدالها بال URL لخاص بالموقع اللى هيتعمله فحص, والقيمة دى case sensitive لازم تتكتب زى ما هى
فى المثال الاول كنا بنكتب ال Request ك parameters وتقدر تضيف ال headers من خلال ال headers
لاكن هنا تقدر تنسخ ال request زى ما هو من ال burpsuite مثلا وتكتبة فى block واحد فى ال section اللى اسمه raw
فى أداة اسمها netcat ممكن تستخدمها فى انك تبدأ اتصال TCP or UDP ترسل بيها أو تستلم بيانات, على سبيل المثال ممكن تستخدمها فى انك تبعت HTTP request
أداة nuclei ممكن تؤدى نفس الوظيفة من خلال ال Network request
فى المثال دا هنستخدم nuclei فى اننا بعت raw HTTP request زى اللى بعتناه ب netcat
القيمة المميزة {{Hostname}}
بيتم استبدالها بال domain اللى هنبدأ معاه الاتصال
ممكن نستخدم nuclei فى اننا نعمل automation لل DNS Lookups ونبحث عن records معينة, هنلاحظ فى الصورة الname القيمة بتاعته {{FQDN}}
ودى قيمة مميزة بيتم استبادلها بكل Domain هنعمله lookup وال type وقيمته بتختلف على حسب نوع ال dns record اللى بنعمله lookup
ممكن نستخدم DNS requests فى اننا نجمع ال domains اللى شغالة فى ip range معين, على سبيل المثال ال domains اللى بتستخدم cloudflare, أو فى بعض الخدمات ممكن نتأكد اذا كان subdomain معين ممكن نعمله takeover
دلوقتى لو معانا مجموعة من الملفات المختلفة (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
لو افترضنا انك معاك 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, شغال تمام زى ما واضح فى الصورة