تشریح مغز Nuclei: همهچیز درباره Templateها
نویسنده: یاسین عابدینی · دسته: Tools · تاریخ انتشار: ۱۴۰۵/۱/۳۱
کالبدشکافی تمپلیتهای Nuclei: راهنمای قطعی ساخت اسکنرهای اختصاصی (بخش دوم)
مقدمه
همانطور که در مقاله قبلی (شکارچی آسیبپذیریها: آموزش نصب و تسلط بر خط فرمان Nuclei) به تفصیل در مورد نصب و استفاده از سوییچهای این ابزار قدرتمند صحبت کردیم، اکنون زمان آن فرا رسیده است که به هسته مرکزی Nuclei نفوذ کنیم. در این مقاله قصد داریم ساختار تمپلیتها (Templates) و نحوه ایجاد یک اسکنر اختصاصی برای آسیبپذیریها را کالبدشکافی کنیم.
بخشهای مختلف یک تمپلیت (Template Parts)
۱. بلوک اطلاعات (Information block)
این بلوک برای ارائه متادیتا درباره خود تمپلیت، آسیبپذیری، دورکها، کوئریها و تگها استفاده میشود.
id: CVE-2017-7925 # شناسه بدون فاصله
info:
name: Dahua Security - Configuration File Disclosure
author: E1A
severity: critical
description: |
توضیحات مربوط به آسیبپذیری و دیوایسهای تحت تاثیر...
reference:
- https://nvd.nist.gov/vuln/detail/CVE-2017-7925
metadata:
max-request: 1
vendor: dahuasecurity
tags: cve,cve2017,dahua,camera
۲. درخواست HTTP
در این بخش نحوه ارسال درخواست مشخص میشود. متدهای مختلفی مانند GET, POST, PUT, DELETE قابل استفاده هستند.
http:
- method: GET
path:
- "{{BaseURL}}/login.php"
redirects: true
max-redirects: 3
۳. متغیرهای مسیر (Paths)
Nuclei متغیرهای پویایی را برای ساخت مسیرها ارائه میدهد:
{{BaseURL}}: آدرس ورودی کامل (مثال: https://example.com:443/foo/bar.php){{RootURL}}: آدرس ریشه (مثال: https://example.com:443){{Hostname}}: نام هاست همراه با پورت{{Host}}: فقط نام هاست{{Port}}: فقط پورت هدف{{Path}}: مسیر فایل{{Scheme}}: پروتکل (مثل https)
۴. درخواستهای HTTP خام (Raw HTTP request)
درخواستهای Raw انعطافپذیری بیشتری داشته و از توابع کمکی DSL پشتیبانی میکنند.
http:
- raw:
- |
GET / HTTP/1.1
Host: {{Hostname}}
Origin: {{BaseURL}}
Connection: close
شروط درخواست: تطبیقدهندهها (Matchers)
Matcherها به شما امکان میدهند تا کلمات یا وضعیتهای خاصی را در پاسخهای دریافت شده بررسی کنید. میتوانید مشخص کنید این جستجو در بدنه (body) یا هدر (header) انجام شود.
matchers:
# بررسی وجود همزمان دو کلمه
- type: word
words:
- '[core]'
- '[api]'
condition: and
# بررسی وضعیت کد 200 در هدر
- type: status
part: header
status:
- 200
# استفاده از عبارات منظم (Regex)
- type: regex
part: body
regex:
- "root:.*:0:0:"
استخراجکنندهها (Extractors)
Extractorها مشابه Matcherها کار میکنند با این تفاوت که مقدار یافت شده را استخراج کرده و در نتایج نمایش میدهند (برای مثال استخراج نسخه یک نرمافزار):
- regex: استخراج بر اساس عبارات منظم.
- kval: استخراج فرمت کلید=مقدار از هدر یا کوکی.
- json: استخراج داده از پاسخهای JSON با سینتکسی شبیه JQ.
- xpath: استخراج دادههای مبتنی بر xpath از پاسخ HTML.
- dsl: استخراج بر اساس عبارات DSL.
حالتهای حمله (Attack Modes)
هنگام استفاده از Payloadها، سه حالت اصلی برای تزریق وجود دارد:
- Batteringram: یک Payload ثابت را همزمان در تمام موقعیتهای مشخص شده قرار میدهد.
- Pitchfork: از چندین لیست Payload به صورت موازی استفاده میکند (خط اول لیست اول با خط اول لیست دوم و...).
- Clusterbomb: تمام ترکیبات ممکن از Payloadها را آزمایش میکند (ضرب دکارتی).
http:
- raw:
- |
POST /?file={{path}} HTTP/1.1
User-Agent: {{header}}
Host: {{Hostname}}
payloads:
path: helpers/wordlists/prams.txt
header: helpers/wordlists/head