VulnCity

تشریح مغز 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