
نصوص Nmap NSE التي تستعلم عن واجهة برمجة تطبيقات Vulners لتحديد الثغرات الأمنية المعروفة (CVEs) للخدمات الشبكية المكتشفة، مما يعزز مسح المنافذ القياسي بالبحث التلقائي عن CVEs وتقييم CVSS.
<div align="center">
# nmap-vulners
**حوّل فحص خدمات nmap إلى قائمة مرتّبة من ثغرات CVE والاستغلالات وما يتم
استهدافه في البرية.**
نص برمجي واحد من NSE يأخذ البرنامج الذي حدّده nmap بالفعل، ويسأل قاعدة بيانات
[Vulners](https://vulners.com) عمّا هو معروف عنه، ويطبع الإجابة داخل تقرير الفحص -
الأسوأ أولاً، بحسب ما هو قابل للاستغلال فعلياً.
[](https://github.com/vulnersCom/nmap-vulners/actions)
[](LICENSE)
[](https://nmap.org)
[](https://vulners.com)
[](https://github.com/vulnersCom/nmap-vulners/stargazers)
<img src="https://assets.kitploit.com/production/public/readmes/1680/0a17fe209e2ad4d8bbd8bf49c72243a8c8b3f0fb9e603317b21c8a2cd6982b0f.gif" alt="ثلاثة فحوصات: منفذ SSH بدون مفتاح API، نفس المنفذ مع مفتاح، ومنفذ ويب حيث يسمّي المسح Tomcat خلف لافتة Coyote" width="900">
<sub>فحوصات حقيقية لمضيفات منشورة للفحص. بدون مفتاح، ثم بمفتاح، ثم منفذ ويب:
يُبلغ nmap's <code>-sV</code> عن لافتة Coyote ويسمّي المسح Tomcat وjQuery خلفها.</sub>
</div>
---
## ما الذي يفعله
لكل منفذ مفتوح، يبحث عن البرنامج الذي حدّده nmap - عناصر CPE التي أنتجها
`-sV` - ويطبع ما تعرفه Vulners عنه: الأسوأ أولاً بحسب ما يتم استغلاله وليس
بحسب النتيجة فقط، وكل صف رابط إلى الصفحة خلفه.
على منفذ HTTP، يقوم أيضاً ببصمة مكدّس الويب نفسه، وهو ما يسمّي برامج لا
يستطيع `-sV` رؤيتها - إطار عمل تطبيقات، نظام إدارة محتوى CMS، إصدار PHP خلف
وكيل عكسي. 721 قاعدة تقرأ أجزاء الاستجابة التي تحمل إصداراً: ترويسة
`Server`، و`X-Powered-By`، وملفات تعريف الارتباط، وعنوان الصفحة، ووسوم `<meta>`،
وأسماء ملفات `<script src>` والنص الأساسي. يتم البحث عن تلك الهويات أيضاً،
ونشرها على المنفذ ليتمكن باقي الفحص من استخدامها.
أمران يقوم بهما يتجاوزان المسح:
* **يقرأ لافتة خدمة nmap الخاصة.** عندما لا يستطيع `-sV` تسمية خدمة، تتم مطابقة
اللافتة الخام مع قواعد لـ FTP وSMTP وSSH وMySQL وDNS وNTP
وLDAP وغيرها. لا يكلف ذلك طلباً إضافياً، وهو الحالة التي لن يُبلغ فيها المنفذ
عن أي شيء على الإطلاق.
* **يسأل منتجاً لن يقول.** نظام إدارة محتوى يسمّي نفسه ويخفي إصداره أمر شائع،
ولا يمكن لأي قدر من مطابقة الأنماط استخراج رقم غير موجود على الصفحة. عندما يتم
التعرف على المنتج ولا يتم التعرف على الإصدار، يذهب طلب واحد إلى المكان الذي
يجيب - `/CHANGELOG.txt` لـ Drupal، و`/administrator/manifests/files/joomla.xml`
لـ Joomla. المضيف الذي لا يشغّل أيّاً من المنتجات الستة التي يتم فحصها لا يُرسل
إليه أي شيء إضافي.```sh
nmap -sV --script vulners <target>
```
هذه هي الواجهة بأكملها. تعمل بدون مفتاح API؛ ومع وجوده تمنحك
معلومات أكثر. لا يوجد تبديل للوضع.```
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.7 ((Ubuntu))
| vulners: cpe:/a:apache:http_server:2.4.7 272 findings, 56 exploitable
| SEVERITY CVSS AI FLAGS LINK
| ======== ==== ==== ======= ==============================================================
| CRITICAL 10.0 8.8 EXP https://vulners.com/gitee/3E6BA608-776F-5B1F-9BA5-589CD2A5A351
| CRITICAL 9.8 9.9 EXP https://vulners.com/zdt/1337DAY-ID-39214
| CRITICAL 9.8 9.6 EXP https://vulners.com/packetstorm/PACKETSTORM:171631
| CRITICAL 9.8 9.9 https://vulners.com/cve/CVE-2021-44790
| CRITICAL 9.8 9.8 https://vulners.com/cve/CVE-2023-25690
|_ 262 more not shown; -v shows all, -vv adds where each was found
```
باستخدام مفتاح، يعطي نفس الفحص لنفس المضيف إجابات مختلفة - `KEV` تعني
أن CISA سجّلت الثغرة الأمنية على أنها مستغلة في البرية، و`EPSS` هو
الاحتمال المنشور بأنها ستُستغل:```
| vulners: cpe:/a:apache:http_server:2.4.7 272 findings, 78 exploitable
| SEVERITY CVSS EPSS FLAGS LINK
| ======== ==== ==== ======= ==============================================================
| CRITICAL 9.1 >99% KEV EXP https://vulners.com/cve/CVE-2024-38475
| CRITICAL 9.0 >99% KEV EXP https://vulners.com/cve/CVE-2021-40438
| CRITICAL 9.1 >99% KEV https://vulners.com/cnvd/CNVD-2024-36387
| CRITICAL 10.0 71% EXP https://vulners.com/gitee/3E6BA608-776F-5B1F-9BA5-589CD2A5A351
| CRITICAL 9.8 97% EXP https://vulners.com/cve/CVE-2021-44790
|_ 262 more not shown; -v shows all, -vv adds where each was found
```
نفس النتائج الـ 272، بترتيب مختلف، وصف علوي مختلف - و22 منها إضافية
معروفة بأنها قابلة للاستغلال، لأن مفتاحاً يربط كل استغلال بثغرات CVE التي
يستغلها. كلاهما إجابتان حقيقيتان من vulners.com، تم التقاطهما ضد
خادم محلي يعرض ذلك البانر.
## الترتيب
الحقائق تتفوق على التوقعات. يتم ترتيب النتائج:
1. **CISA KEV** - مسجلة كأنها مستغلة في البرية
2. **SSVC `active`** - حكم منسّق بأن الاستغلال يحدث
3. **يوجد استغلال** - الكود منشور، لهذه الثغرة أو لثغرة CVE تسميها
4. **EPSS مرتفع** - نموذج يتوقع حدوث استغلال
5. كل شيء آخر
CVSS يكسر التعادلات داخل النطاق، وليس عبره: ثغرة 7.5 مستغلة هي مشكلة
أسوأ من ثغرة 9.8 غير مستغلة، وهذا هو الترتيب الذي يقول ذلك.
الأعمدة تتبع البيانات. الإشارة التي لم تحملها الإجابة تفقد عمودها
بدلاً من إظهار خلية فارغة، لأن EPSS فارغاً يُقرأ على أنه "هادئ"،
وهذا ادعاء لا يمكن لحقل غائب أن يدعمه.
## ما الذي يضيفه مفتاح API
| | |
|---|---|
| **بدون مفتاح** | يتم البحث عن كل CPE وجده nmap على نقطة النهاية المجانية. النتائج والدرجات وعلامات الاستغلال ودرجة Vulners الخاصة بالذكاء الاصطناعي. بدون أرصدة، بدون حساب |
| **مفتاح، بدون أرصدة** | كل نتيجة تكتسب ما تعرفه نقطة نهاية id: العناوين والتواريخ وصفحة الاستشارة أو الاستغلال العلوية وربط الاستغلال بـ CVE وCISA KEV و- حسب الترخيص - EPSS وSSVC |
| **مفتاح، رصيد واحد** | البرمجيات التي لم يستطع المسار المجاني تسميتها إطلاقاً يتم تحديدها من بانرها الخام. هذا هو الشيء الوحيد هنا الذي يكلف شيئاً، وفقط لخدمة بدون CPE |
المنفذ الذي يحمل CPE بالفعل لا يكلف رصيداً أبداً: عند قياسه عبر أربعة
منتجات، يعيد البحث المجاني **نفس CVEs** التي يعيدها المدفوع مقابل CPE.
ما يشتريه الرصيد هو التحديد، وليس المزيد من الثغرات.
المفاتيح المجانية متاحة على [vulners.com/userinfo](https://vulners.com/userinfo).
## التثبيت
**macOS، Linux، Kali، WSL** - سطر واحد، بدون وسائط:```sh
curl -fsSL https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/install.sh | sh
```
**Windows** - PowerShell بصلاحيات المسؤول:```powershell
irm https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/install.ps1 | iex
```
يطلب المثبّت من nmap أين يحتفظ ببياناته، وينسخ السكربتات وملفات بياناتها إلى هناك، ويعيد بناء قاعدة بيانات السكربتات، ثم يتحقق من أن `--script vulners` يحلّ فعلاً إلى ما تم تثبيته للتو - حيث يأتي nmap مع `vulners.nse` خاص به، وهذا يستبدله.
<details>
<summary><b>بدون صلاحيات الجذر، وخيارات أخرى</b></summary>```sh
# into ~/.nmap, no sudo; the installer prints the NMAPDIR line to add to your profile
curl -fsSL https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/install.sh | sh -s -- --user
# a specific directory
./install.sh --prefix /usr/local/share/nmap
# a specific release
./install.sh --ref v2.0
# remove everything it installed
./install.sh --uninstall
```
PowerShell يأخذ نفس الخيارات: `-User`, `-Prefix`, `-Ref`, `-Uninstall`.
</details>
<details>
<summary><b>من نسخة مستخرجة (checkout)</b></summary>```sh
git clone https://github.com/vulnersCom/nmap-vulners
cd nmap-vulners
./install.sh
```
المثبّت يستخدم الملفات الموجودة بجانبه، لذا فإن هذا يثبّت بالضبط ما قمت باستنساخه. كما أن تشغيل السكربتات مباشرة من مجلد الاستنساخ يعمل أيضًا:```sh
nmap -sV --script "$PWD/vulners.nse" <target>
```
> عند التشغيل من نسخة مستخرجة (checkout)، استخدم مسارًا **مطلقًا**. إذ يقوم nmap بحل مسار
> نسبي مثل `--script ./vulners.nse` مقابل ملف `script.db` الخاص به أولًا،
> ثم يشغّل النسخة المرفقة مع nmap بصمت بدلًا من نسختك.
</details>
<details>
<summary><b>يدويًا</b></summary>
ملف واحد: انسخ `vulners.nse` إلى `<nmap data dir>/scripts/` ثم شغّل
`sudo nmap --script-updatedb`. لا يوجد شيء آخر لوضعه — إذ يقوم السكربت
بتنزيل قواميسه وقت الفحص ولا يكتب أي شيء على القرص — وبالتالي لا يوجد شيء
لتنسى وضعه، وهو ما كان سابقًا ينتج سكربتًا يعمل ولا يجد شيئًا ولا يوضح السبب.
إذا كنت تقوم بالترقية من الإصدار 1.x، فاحذف `vulners_enterprise.nse` و
`http-vulners-regex.nse` من ذلك الدليل أيضًا. فبقاء
`http-vulners-regex.nse` يحمل فئة `default` ويستمر في مسح الأهداف
بأمر `-sC` عادي. المثبّت يقوم بذلك نيابة عنك.
دليل بيانات nmap عادةً ما يكون `/usr/share/nmap` (ديبيان، أوبونتو، كالي)،
`/usr/local/share/nmap` (مُجمَّع من المصدر)، `/opt/homebrew/share/nmap`
(Homebrew) أو `C:\Program Files (x86)\Nmap` (ويندوز). للتأكد، اسأل nmap:```sh
nmap -d2 --script-help probe 2>&1 | grep nse_main.lua
```
الدليل الذي يحتوي على `nse_main.lua` هو الذي يستخدمه هذا nmap.
</details>
## وسائط السكربت
| الوسيطة | الافتراضي | المعنى |
|---|---|---|
| `vulners.mincvss` | `0` | إخفاء النتائج التي تقل درجتها عن هذا الحد. النشرات غير المسجلة بدرجة وأي شيء له استغلال معروف يُعرض مهما كان الحد |
| `vulners.paths` | المسارات الـ 939 المنشورة | مسارات الفحص الشبكي: قائمة Lua، أو سلسلة نصية واحدة تسمي ملفًا يحتوي على مسار واحد في كل سطر، أو `none` لإيقاف الفحص. ملف تسميه ولا يمكن قراءته يوقف الفحص ويُعلن ذلك، بدلًا من الرجوع إلى القائمة المنشورة |
| `vulners.width` | `80` | عرض الطرفية الذي صُمم الجدول له |
| `vulners.max_items` | `32` | سقف العناصر المحتسبة للفحص بأكمله |
| `vulners.api_key` | - | رمز API. تسريبي: nmap ينسخ سطر أوامره الخاص إلى `-oX` |
| `vulners.api_key_file` | - | مسار مطلق لملف سطره الأول هو الرمز |
| `vulners.api_host` | `vulners.com` | اسم مضيف API |
| `vulners.api_port` | `443` | المنفذ على `api_host` |
الاسم المجرد يعمل أيضًا، لذا `--script-args mincvss=7` كافٍ.
بادئات الوسائط من الإصدار 1.x - `vulners_enterprise.*` و
`http-vulners-regex.paths` - مقبولة لإصدار واحد وتطبع إشعار إهمال.
## أين تحفظ مفتاح API
حسب ترتيب الأفضلية:
1. `~/.nmap/vulners.key`، سطر واحد، وضع 600 - يعرض المثبّت كتابته
2. `VULNERS_API_KEY` في البيئة
3. `--script-args vulners.api_key_file=/absolute/path`
4. `--script-args vulners.api_key=<token>`
الأخير مريح وتسريبي: nmap ينسخ سطر أوامره الخاص إلى كل تقرير، لذا ينتهي الرمز في سمة `args` من مخرجات `-oX` وفي سجل الأوامر الخاص بقشرتك. السكربت نفسه لا يكتب الرمز في أي مكان أبدًا، بما في ذلك مخرجات التصحيح الخاصة به - يوجد اختبار انحدار يؤكد ذلك.
ملف مفاتيح تسميه صراحةً ولا يمكن قراءته يوقف التشغيل بدلًا من الرجوع بهدوء - المشغّل الذي يسمي ملفًا يعني ذلك الملف - ويذكر التقرير أي ملف كان. المسار المكتوب خطأً لا يمكن أن يبدو كفحص نظيف.
## من أين تأتي البصمات
السكربت لا يحملها. ينزّل ثلاثة قواميس مرة واحدة لكل فحص، قبل لمس أول مضيف:```
https://raw.githubusercontent.com/vulnersCom/nmap-vulners/catalog/
index.json what exists, at which serial
fingerprints.json 721 product and version rules
paths.json 939 paths the sweep requests
probes.json targeted version probes
```
هذا أربعة طلبات لكل فحص - واحد لكل ملف، وليس لكل مضيف وليس لكل منفذ -
لـ 40 كيلوبايت مضغوطة من أصل 250 كيلوبايت من JSON، في مرحلة ما قبل الفحص في nmap. مُقاسًا
مقابل الفرع المنشور. لذلك يلتقط السكربت المثبّت بصمات جديدة دون أن يتم تحديثه.
**لا يكتب أي شيء على نظام ملفاتك.** تُحتفظ بالقواميس طوال مدة
الفحص ثم تُسقط، وهذا هو سلوك كل سكربت يوفّره nmap:
من بين 611 سكربتًا، يفتح 26 منها ملفًا للكتابة وكل واحد يكتب فقط حيث
أخبرته وسيطة سكربت. لا يحتفظ أي منها بذاكرة تخزين مؤقت، ولا هذا أيضًا.
**إذا تعذّر تنزيلها، يستمر الفحص في العمل.** تغذّي القواميس
بصمة الويب ولا شيء غير ذلك، لذا فإن جهازًا لا يملك مسارًا إلى GitHub يفقد
ذلك ويحتفظ بكل شيء آخر: البرنامج الذي حدّده nmap نفسه ما زال
يُبحث عنه، ويقول التقرير أي قدرة كانت مفقودة بدلًا من أن يتركك
تقرأ نتيجة فارغة على أنها شبكة نظيفة.
| الوسيطة | ما تفعله |
|---|---|
| `vulners.catalog_url=<url>` | الجلب من مرآة بدلًا من ذلك - لشبكة معزولة. اسم مضيف أو عنوان IPv6 بين قوسين، `http://[fd00::1]/catalog/` |
| `vulners.catalog=none` | لا تجلب إطلاقًا؛ ابحث فقط عما سمّاه nmap |
## المسح، ومدى ضجيجه
على منفذ HTTP يطلب السكربت كل مسار ينشره الكتالوج - 939
مسارًا - ويطابق كل 721 قاعدة ضد كل إجابة. تأتي المسارات من
WhatWeb وnuclei وFingerprintHub: أماكن يُعرَف فيها المنتج، وليس
تخمينات. حتى المسار الذي ينتمي إلى برنامج لا تشغّله يستحق
الطلب، لأن الإجابة ما زالت تحمل `Server` و`X-Powered-By` وملف تعريف ارتباط
وعنوانًا، وهذه هي المواضع التي تجد فيها القواعد الحزمة التي أمامها.
**مدى سرعة ذلك هو إعداد `-T` الخاص بك**، وليس إعدادًا من إعداداتنا. القائمة
لا تتقلص أبدًا؛ المعدل هو ما يتغير:
| | دفعات | الانتظار بينها | مُقاس، منفذ ويب واحد |
|---|---|---|---|
| `-T0` بجنون ارتياب | 188 × 5 | 2 ث | 11 د 22 ث |
| `-T1` متسلل | 94 × 10 | 1 ث | 1 د 56 ث |
| `-T2` مهذب | 38 × 25 | 0.5 ث | 26.2 ث |
| `-T3` عادي | 10 × 100 | 0.1 ث | 7.6 ث |
| `-T4` عدواني | 4 × 250 | لا شيء | 6.7 ث |
| `-T5` مجنون | 1 | لا شيء | 6.6 ث |
كل الستة مُقاسة في تشغيل واحد ضد نفس الخادم المحلي. `-sV` وحده ضدّه
هو 6.1 ث، لذا يكلف المسح ثانية ونصف في الإعداد الافتراضي. الصفّان البطيئان
هما `-T0` و`-T1` يؤديان وظيفتهما: 188 و94 دفعة، مع انتظار
متعمّد بين كل واحدة.
الطلبات مُخطّط لها عبر 34-48 اتصالًا مع فتح أربعة على الأكثر في
الوقت نفسه، وهو `pipeline_go` الخاص بـ nselib - نفس الآلية التي يستخدمها
`http-enum` الخاص بـ nmap نفسه، مع احترام `Keep-Alive: max=` الخاص بالخادم و
`--script-args http.max-pipeline=N`.
`--script-args vulners.paths=none` يطفئ المسح تمامًا.
## كيف يعمل```
nmap -sV
|
+-- service fingerprint --> port.version.cpe --------------+
| |
+-- vulners.nse |
reads nmap's banner for services -sV could not name |
on an HTTP port: requests the path list in one |
pipeline, matches 721 rules against the header, the |
title, the meta tags, the scripts and the body |
probes for a version when a product hid it |
publishes everything it recognised ------------------+
|
v
GET /api/v3/burp/software/ per identity
free, no key, CDN-cached
|
POST /api/v3/search/id/ per 100 findings
free, needs a key: enrichment
|
POST /api/v4/audit/smart only for a
service with no CPE: 1 credit
|
ranked, filtered, printed
```
يتم تخزين الإجابات مؤقتًا للمسح بأكمله، مع مفتاح لكل هوية، لذا فإن مئة خادم متطابق تكلف بحثًا واحدًا. يتم تخزين الإثراء مؤقتًا لكل معرف نتيجة، لذا فإن منفذي ويب يشغّلان برامج متداخلة يجلبان كل مستند مرة واحدة.
## مخرجات قابلة للقراءة آليًا
كل ما يُطبع هو أيضًا منظم، لذا يمكن تحليل `-oX` دون لمس النص البشري. معرّف السكربت، ومستويا الجدولين، ومفاتيح العناصر الخمسة الأصلية لم تتغير عن الإصدار 1.x، وهذا ما تقرؤه DefectDojo وFaraday وnmap2csv وraven:```xml
<script id="vulners">
<elem key="schema">2.0</elem>
<elem key="mode">keyed</elem>
<table key="cpe:/a:apache:http_server:2.4.7">
<table>
<elem key="id">CVE-2021-40438</elem>
<elem key="type">cve</elem>
<elem key="severity">CRITICAL</elem>
<elem key="cvss">9.0</elem>
<elem key="cvss_type">cvss3.1</elem>
<elem key="is_exploit">false</elem>
<elem key="exploit_known">true</elem>
<elem key="kev">true</elem>
<elem key="epss">0.99612</elem>
<elem key="exploitation">active</elem>
<elem key="title">Apache HTTP Server SSRF in mod_proxy</elem>
<elem key="href">https://vulners.com/cve/CVE-2021-40438</elem>
<elem key="source_href">https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2021-40438</elem>
</table>
</table>
</script>
```
جديد في 2.0: `schema`، `mode`، `severity`، `exploit_known`، `kev`، `epss`،
`epss_percentile`، `exploitation`، `ai_score`، `title`، `published`، `href`،
`source_href` و `found_on`. كل حقل إمّا حاضر أو غائب، ولا يكون فارغًا أبدًا.
لا يوجد أي تداخل أعمق من ذي قبل، لأن مستوى جدول ثالثًا
غير مرئي لأي أداة استيراد تم فحصها.
`href` هو دائمًا صفحة vulners.com للنتيجة، في كلا الوضعين. و`href` الخاص
بالنقطة الطرفية هو العنوان **المنبع** — nvd.nist.gov لـ CVE،
وgithub.com لاستغلال مُلتقط — وينتقل ذلك بشكل منفصل، كـ
`source_href`، بحيث لا يعتمد معنى أي من الحقلين على الوضع الذي أنتجه.
المخرجات المنظمة تحمل دائمًا كل نتيجة اجتازت `mincvss`، حتى
تلك التي يخفيها سلم الإسهاب من النص — فلا تفقد أي أتمتة
نتائج بعدم تمرير `-v`.
**النص المعروض هو فاصل.** رموز `*EXPLOIT*` و `*HAS EXPLOIT*`
والتخطيط المفصول بعلامات تبويب قد ولّت، واستُبدلت بالجدول المحاذي أعلاه. رابط
vulners.com لكل صف بقي: فهو العمود الأخير، وهو الخلية الوحيدة
التي لن يختصرها التخطيط، لأن نصف الرابط ليس رابطًا. المستهلكون
الذين يعتمدون على كشط النص بحاجة إلى تحديث؛ مستهلكو `-oX` لا يحتاجون.
## الفحص بأدب
فحص الشبكة يطلب من الواجهة البرمجية أقل بكثير مما يبدو:
* طلب واحد لكل هوية برمجية، والإجابات تُخزَّن مؤقتًا طوال الفحص
* بحث قيد التنفيذ بالفعل يُنتظَر بدلًا من تكراره
* الاكتشاف يذهب إلى نقطة نهاية **مخزنة عبر CDN**، دون مفتاح حتى عندما يكون
مكوّنًا، فيبقى على ذاكرة التخزين المؤقت المشتركة بدلًا من ضرب الأصل
* مسح الـ 939 مسارًا يعمل عبر حفنة من **الاتصالات الأنبوبية** بدلًا من
اتصال واحد لكل مسار، ويطلب
صفحات مضغوطة، ويتوقف عن المطابقة بمجرد استنفاد ميزانيته البايتية
* حد المعدل أو الانقطاع يوقف ذلك الجزء من الفحص بدلًا من إعادة المحاولة لكل
مضيف، والمفتاح المرفوض ينزل إلى المسار المجاني بدلًا من إسكات الفحص
* تُنفق الاعتمادات فقط حيث لا يستطيع المسار المجاني الإجابة إطلاقًا
## التطوير
الاختبارات، وبوابة النظافة، وملف `CONTRIBUTING.md` موجودة في مستودع git
فقط؛ أرشيف الإصدار يحمل السكربتات وبياناتها. ثماني بوابات، جميعها
تعمل دون اتصال إلا حيث يُشار إلى ذلك، وCI تشغّل هذه بالضبط:```sh
nmap -sn -Pn --script ./tests/run.nse --script-args testdir=tests,root=. 127.0.0.1
python3 tests/e2e/run_e2e.py
python3 tools/check.py
python3 tools/catalog.py --check
python3 tools/xml_contract.py --selftest
python3 tools/fingerprints/selftest.py
python3 tools/catalog_diff.py --selftest
python3 tools/nmap_style.py
```
270 حالة اختبار وحدة تُشغَّل داخل nmap مقابل مكتبات NSE الحقيقية؛ و64 حالة شاملة
تقود ثنائي nmap الحقيقي مقابل خادم ويب محلي وواجهة Vulners API بديلة تفرض ما يفرضه
النظام الحقيقي؛ وبوابة النظافة تُبقي الأسرار ومخرجات الفحص وفوضى المحرر خارج
الشجرة وترفض قراءة عامة قد تحوّلها NSE إلى نتيجة ضائعة؛ والأربع الأخيرة تحمل البيانات
والأدوات التي تنشرها - شكل الكتالوج، وعقد XML الذي يقرؤه كل مستورد، ومترجم
الأنماط، والبوابة التي تقرر أن إعادة البناء آمنة للنشر. الأخيرة تُخضع المستودع بأكمله
لمعايير [Nmap's own Code Standards](https://secwiki.org/w/Nmap/Code_Standards)، التي
يسمّيها `HACKING` كسلطة لسكربت يريد العيش في شجرة nmap:
لا مسافات جدولة، لا مسافات زائدة في النهاية، أسطر تحت 80 عمودًا، لا فواصل منقوطة،
توثيق NSEdoc خاص يبدأ بـ `--;`، وPEP 8 للبايثون.
`python3 tests/e2e/run_e2e.py --live` يضيف فحوصات مقابل الخدمة الحقيقية.
انظر [CONTRIBUTING.md](https://github.com/vulnerscom/nmap-vulners/blob/master/CONTRIBUTING.md).
## الأسئلة الشائعة
**هل يستغل أي شيء؟** لا. يقرأ الترويسات والصفحات ويسأل قاعدة
بيانات - لا يرسل أي حمولة ولا يجرب أي بيانات اعتماد. يُصنَّف
`discovery, intrusive, vuln, external` بدلاً من `safe`، لسبب واحد: مسح
المسارات يطلب 939 مسارًا من منفذ ويب، وتعريف nmap لـ `safe`
يستبعد السكربتات التي تستخدم كميات كبيرة من النطاق الترددي. سكربت nmap الخاص
`http-enum` يطلب 2 204 ويحمل نفس التصنيف. إعداد `-T` الخاص بك يحدد مدى سرعة
خروج تلك الطلبات ولا يحدد عددها أبدًا، و`--script-args vulners.paths=none` يوقف المسح
تمامًا.
**هل يعمل بدون مفتاح API؟** نعم، بالكامل. بدونه يستخدم نقطة النهاية
المجانية، التي تُرجع نفس الثغرات لـ CPE مثل المدفوعة. المفتاح
يضيف تفاصيل لكل نتيجة، ويمكنه تسمية برامج لا يستطيع المسار المجاني تسميتها.
**لماذا توقف `-sC` عن العثور على برامج الويب؟** لأن `vulners` لم يعد في
فئة `default` في nmap، وكذلك مسح البصمات الذي كان يعيش في
`http-vulners-regex.nse`. إرسال هوية برنامج هدف إلى
طرف ثالث يجب أن يكون شيئًا طلبتَه: شغّل `--script vulners`.
**لماذا تُظهر ثغرة `cvss2.0` بينما تُظهر أخرى `cvss3.1`؟** التسمية
تسمّي المقياس الذي تقع عليه النتيجة. تُرجع Vulners ما نشره المصدر
أيًا كان؛ نتيجة v2 البالغة 9.3 ليست نتيجة v3 البالغة 9.3.
**لماذا يُعرض إدخال منخفض النتيجة عندما أضبط `mincvss`؟** لأنه يحتوي على
استغلال معروف، أو لأن المصدر لم يقيّمه أبدًا. كلاهما مقصود.
**يقول التقرير إن الكتالوج تعذر تنزيله.** إذًا لم يعمل تحديد بصمة الويب
وكل شيء آخر عمل: البرنامج الذي سمّاه nmap نفسه ما زال
يُبحث عنه. يُقال ذلك بصوت عالٍ لهذا السبب - قدرة لم تعمل
تُقرأ كقدرة لم تجد شيئًا. السببان لهما صياغة منفصلة: "تعذر تنزيله" هو
الشبكة، و"أجاب، لكن تعذر قراءة أحد قواميسه" هو المرآة التي وجّهته إليها.
**لم يجد شيئًا على مضيف أعرف أنه معرض للخطر.** شغّل مع `-d2`: يسجّل
كل هوية سأل عنها. عادةً سمّى nmap الخدمة لكن ليس
نسختها، ولا توجد نسخة للبحث عنها.
## الترخيص
السكربتات مرخّصة بنفس طريقة Nmap نفسها - انظر [LICENSE](https://github.com/vulnerscom/nmap-vulners/blob/master/LICENSE) لرخصة
Nmap Public Source License، و
[nmap.org/npsl](https://nmap.org/npsl/) لمعرفة ما تعنيه.
بيانات الثغرات تأتي من [Vulners](https://vulners.com) وتخضع
لشروطهم.
## ذات صلة
* [vulners.com](https://vulners.com) - قاعدة البيانات خلف هذه السكربتات
* [vulnersCom/api](https://github.com/vulnersCom/api) - عميل البايثون
* [vulnersCom/burp-vulners-scanner](https://github.com/vulnersCom/burp-vulners-scanner) - نفس البيانات داخل Burp Suite
* [nmap.org/book/nse.html](https://nmap.org/book/nse.html) - كيف تعمل سكربتات NSE
---
<div align="center">
يُصان بواسطة فريق Vulners <[email protected]>
`#nmap` `#nse` `#vulnerability-scanner` `#cve` `#cvss` `#cpe` `#vulners`
`#security-tools` `#pentest` `#infosec` `#network-scanner` `#exploit-database`
`#lua` `#vulnerability-detection` `#security-automation`
</div>