ماهو سكربت NSE ؟
ببساطة هي سكريبتات Script موجودة في الكاللي لينكس مسبقًا بالمسار الأتيcd /usr/share/nmap/scripts/وهذه السكريبتات عبارة عن مهام مبرمجة ومجمعة مسبقا تغنيك عن كتابة الأوامر من جهة, ومن جهة أخرى تغنيك عن استعمال أدوات أخرى. فعلا سبيل المثال يمكنك عن طريق NSE وبواسطة Nmap فقط فعل ما يلي:
اختراق السيرفر, التخمين على السيرفرات والمواقع والاجهزة ssh smb ftp وغيرهم, اكتشاف الثغرات, معرفة نوع النظام ... لو كتبت جميع ما يمكن فعله بواسطة اداة ان ماب لا يكفيني موضوع واحد.
طريقة استعمال NSE
ببساطة أكتب أسم الاداة nmap وامامها أكتب --script بعدها أدخل اسم السكريبت المراد استعماله<ايبي الضحية الهدف> <اسم السكريبت> nmap --scriptالسكريبتات موجودة بالمسار
cd /usr/share/nmap/scripts/
وهذه بعض السكريبتات الموجودة بالاداة كلها تبلغ 590 لحد كتابتي الموضوع
✿◕‿◕✿ ❀◕‿◕❀ ❁◕‿◕❁ ✾◕‿◕✾
✿◕‿◕✿ ❀◕‿◕❀ ❁◕‿◕❁ ✾◕‿◕✾
بعض الأمثلة:
سأستعمل سكريبت http-enum فهو ينفذ Brute Force على مسار الخادم من أجل اكتشاف تطبيقات الويب.فإنه يختبر أكثر من 2000 مسار الخادم. إن عمل هذا السكريبت NSE يشبه NIKTO.nmap -p80 --script http-enum 192.168.1.16
والنتيجة
✿◕‿◕✿ ❀◕‿◕❀ ❁◕‿◕❁ ✾◕‿◕✾
وهذا مثال اخر باستعمال http-title
nmap --script http-title 192.168.1.16
نتيجة تطبيق الأمر
✿◕‿◕✿ ❀◕‿◕❀ ❁◕‿◕❁ ✾◕‿◕✾
وهذا مثال أخير باستعمال سكريبت smb-discovery دوره
nmap -p 445 --script smb-os-discovery 192.168.1.16
والنتيجة
✿◕‿◕✿ ❀◕‿◕❀ ❁◕‿◕❁ ✾◕‿◕✾
تصنيفات السكريبتات NSE
auth لاكتشاف بيانات الدخول مثل اليوزر.Discovery هو صنف يجمع السكريبتات الخاصة بعمليات الاستطلاع والكشف على الخدمات والبورتات
Dos خاص بعمل هجمات حجب الخدمة على الخدمات المختلفة
exploit للبحث عن الثغرات وتطبيق الاختراق
brute للتخمين على الخدمات
malware البحث عن باكدور
vuln استكشاف الثغرات بالخدمات والسيرفرات والمواقع
fuzzer يعرفها مكتشفي الاخطاء والثغرات فهي تعمل على حقن البيانات بالمواقع والبرامج عبر جميع المدخلات بالبرنامج حتى يحدث خطأ امتلاء الذاكرة مثلا.
default تستعمل السكريبتات العامة والشائعة على الهدف
استعمال NSE Nmap بطرق متقدمة وسهلة
يمكننا استعمال سكريبتات الانماب NSE بطرق متقدمة فمثلا بدل استعمال السكريبتات عن طريق اسم السكريبت http-titleكالامثلة السابقة:
nmap --script http-title <الهدف>
ضع فاصلة بين السكريبتات المختلفةnmap -p80 --script http-huawei-hg5xx-vuln <الهدف>
nmap --script http-title,http-methods <الهدف>
نستعمل البحث عن طريق التصنيف, بمعنى عندما نستعمل التصنيف Discovery سيستعمل السكريبتات الخاصة بالاستطلاع وكشف الخدمات بهذه الطريقة:
nmap --script discovery 192.168.1.16
ستظهر الكثير من النتائج كما بالصور
✿◕‿◕✿ ❀◕‿◕❀ ❁◕‿◕❁ ✾◕‿◕✾
✿◕‿◕✿ ❀◕‿◕❀ ❁◕‿◕❁ ✾◕‿◕✾
لم أستطع تصويرها كلها فهي كثيرة لذا قمت بنسخ بعض النتائج هنا بالأسفل
root@bt:~# nmap --script discovery 192.168.1.16
Starting Nmap 7.70 ( https://nmap.org ) at 2018-11-01 02:00 CET
Pre-scan script results:
| broadcast-igmp-discovery:
| 192.168.1.15
| Interface: wlan0
| Version: 2
| Group: 224.0.0.251
| Description: mDNS (rfc6762)
| 192.168.1.15
| Interface: wlan0
| Version: 2
| Group: 224.0.0.252
| Description: Link-local Multicast Name Resolution (rfc4795)
| 192.168.1.15
| Interface: wlan0
| Version: 2
| Group: 239.255.255.250
| Description: Organization-Local Scope (rfc2365)
|_ Use the newtargets script-arg to add the results as targets
| ipv6-multicast-mld-list:
| fe80::a00:27ff:fe50:55eb:
| device: wlan0
| mac: fa:aa:09:28:40:49
| multicast_ips:
| ff02::1:ff50:55eb (NDP Solicited-node)
| ff02::1:ff50:55eb (NDP Solicited-node)
| fe80::2a3b:82ff:febf:c29c:
| device: wlan0
| mac: 28:3b:82:bf:c2:9c
| multicast_ips:
| ff02::1:ff00:0 (Solicited-Node Address)
| ff02::16 (All MLDv2-capable routers)
| ff02::1:ffbf:c29c (NDP Solicited-node)
|_ ff02::2 (All Routers Address)
| lltd-discovery:
| 192.168.1.1
| Hostname: BRCM_ROUTER
| Mac: 28:3b:82:bf:c2:9c (Unknown)
|_ Use the newtargets script-arg to add the results as targets
| targets-asn:
|_ targets-asn.asn is a mandatory parameter
| targets-ipv6-multicast-echo:
| IP: fe80::2a3b:82ff:febf:c29c MAC: 28:3b:82:bf:c2:9c IFACE: wlan0
| IP: fe80::a00:27ff:fe50:55eb MAC: 08:00:27:50:55:eb IFACE: wlan0
|_ Use --script-args=newtargets to add the results as targets
| targets-ipv6-multicast-invalid-dst:
| IP: fe80::2a3b:82ff:febf:c29c MAC: 28:3b:82:bf:c2:9c IFACE: wlan0
| IP: fe80::a00:27ff:fe50:55eb MAC: 08:00:27:50:55:eb IFACE: wlan0
|_ Use --script-args=newtargets to add the results as targets
| targets-ipv6-multicast-mld:
| IP: fe80::2a3b:82ff:febf:c29c MAC: 28:3b:82:bf:c2:9c IFACE: wlan0
| IP: fe80::a00:27ff:fe50:55eb MAC: 08:00:27:50:55:eb IFACE: wlan0
|
|_ Use --script-args=newtargets to add the results as targets
| targets-ipv6-multicast-slaac:
| IP: fe80::a00:27ff:fe50:55eb MAC: 08:00:27:50:55:eb IFACE: wlan0
|_ Use --script-args=newtargets to add the results as targets
Stats: 0:01:44 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan
NSE Timing: About 99.96% done; ETC: 02:02 (0:00:00 remaining)
Nmap scan report for 192.168.1.16
Host is up (0.00092s latency).
Not shown: 977 closed ports
PORT STATE SERVICE
21/tcp open ftp
|_banner: 220 (vsFTPd 2.3.4)
| ftp-syst:
| STAT:
| FTP server status:
| Connected to 192.168.1.10
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| vsFTPd 2.3.4 - secure, fast, stable
|_End of status
22/tcp open ssh
|_banner: SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1
| ssh-hostkey:
| 1024 60:0f:cf:e1:c0:5f:6a:74:d6:90:24:fa:c4:d5:6c:cd (DSA)
|_ 2048 56:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3 (RSA)
| ssh2-enum-algos:
| kex_algorithms: (4)
| server_host_key_algorithms: (2)
| encryption_algorithms: (13)
| mac_algorithms: (7)
|_ compression_algorithms: (2)
23/tcp open telnet
|_banner: \xFF\xFD\x18\xFF\xFD \xFF\xFD#\xFF\xFD'
| telnet-encryption:
|_ Telnet server does not support encryption
25/tcp open smtp
|_banner: 220 metasploitable.localdomain ESMTP Postfix (Ubuntu)
|_smtp-commands: metasploitable.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN,
|_smtp-open-relay: Server doesn't seem to be an open relay, all tests failed
| ssl-cert: Subject: commonName=ubuntu804-base.localdomain/organizationName=OCOSA/stateOrProvinceName=There is no such thing outside US/countryName=XX
| Not valid before: 2010-03-17T14:07:45
|_Not valid after: 2010-04-16T14:07:45
|_ssl-date: 2018-11-01T01:01:06+00:00; 0s from scanner time.
| ssl-enum-ciphers:
| SSLv3:
| ciphers:
| TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA - E
| TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 1024) - D
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 1024) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 1024) - A
| TLS_DHE_RSA_WITH_DES_CBC_SHA (dh 1024) - D
| TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA - F
| TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 - F
| TLS_DH_anon_WITH_3DES_EDE_CBC_SHA - F
| TLS_DH_anon_WITH_AES_128_CBC_SHA - F
| TLS_DH_anon_WITH_AES_256_CBC_SHA - F
| TLS_DH_anon_WITH_DES_CBC_SHA - F
| TLS_DH_anon_WITH_RC4_128_MD5 - F
| TLS_RSA_EXPORT_WITH_DES40_CBC_SHA - E
| TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 - E
| TLS_RSA_EXPORT_WITH_RC4_40_MD5 - E
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 1024) - D
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 1024) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 1024) - A
| TLS_RSA_WITH_DES_CBC_SHA (rsa 1024) - D
| TLS_RSA_WITH_RC4_128_MD5 (rsa 1024) - D
| TLS_RSA_WITH_RC4_128_SHA (rsa 1024) - D
| compressors:
| DEFLATE
| NULL
| cipher preference: client
| warnings:
| 64-bit block cipher 3DES vulnerable to SWEET32 attack
| 64-bit block cipher DES vulnerable to SWEET32 attack
| 64-bit block cipher DES40 vulnerable to SWEET32 attack
| 64-bit block cipher RC2 vulnerable to SWEET32 attack
| Broken cipher RC4 is deprecated by RFC 7465
| CBC-mode cipher in SSLv3 (CVE-2014-3566)
| Ciphersuite uses MD5 for message integrity
| Weak certificate signature: SHA1
| TLSv1.0:
| ciphers:
| TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA - E
| TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 1024) - D
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 1024) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 1024) - A
| TLS_DHE_RSA_WITH_DES_CBC_SHA (dh 1024) - D
| TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA - F
| TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 - F
| TLS_DH_anon_WITH_3DES_EDE_CBC_SHA - F
| TLS_DH_anon_WITH_AES_128_CBC_SHA - F
| TLS_DH_anon_WITH_AES_256_CBC_SHA - F
| TLS_DH_anon_WITH_DES_CBC_SHA - F
| TLS_DH_anon_WITH_RC4_128_MD5 - F
| TLS_RSA_EXPORT_WITH_DES40_CBC_SHA - E
| TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 - E
| TLS_RSA_EXPORT_WITH_RC4_40_MD5 - E
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 1024) - D
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 1024) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 1024) - A
| TLS_RSA_WITH_DES_CBC_SHA (rsa 1024) - D
| TLS_RSA_WITH_RC4_128_MD5 (rsa 1024) - D
| TLS_RSA_WITH_RC4_128_SHA (rsa 1024) - D
| compressors:
| DEFLATE
| NULL
| cipher preference: client
| warnings:
| 64-bit block cipher 3DES vulnerable to SWEET32 attack
| 64-bit block cipher DES vulnerable to SWEET32 attack
| 64-bit block cipher DES40 vulnerable to SWEET32 attack
| 64-bit block cipher RC2 vulnerable to SWEET32 attack
| Broken cipher RC4 is deprecated by RFC 7465
| Ciphersuite uses MD5 for message integrity
| Weak certificate signature: SHA1
|_ least strength: F
53/tcp open domain
|_dns-nsec-enum: Can't determine domain for host 192.168.1.16; use dns-nsec-enum.domains script arg.
|_dns-nsec3-enum: Can't determine domain for host 192.168.1.16; use dns-nsec3-enum.domains script arg.
| dns-nsid:
|_ bind.version: 9.4.2
80/tcp open http
|_http-apache-negotiation: mod_negotiation enabled.
| http-auth-finder:
| Spidering limited to: maxdepth=3; maxpagecount=20; withinhost=192.168.1.16
| url method
| http://192.168.1.16:80/dvwa/ FORM
| http://192.168.1.16:80/phpMyAdmin/ FORM
| http://192.168.1.16:80/dvwa/login.php FORM
| http://192.168.1.16:80/phpMyAdmin/index.php FORM
|_ http://192.168.1.16:80/twiki/TWikiDocumentation.html FORM
|_http-chrono: Request times for /; avg: 297.14ms; min: 194.40ms; max: | http-auth-finder:
| Spidering limited to: maxdepth=3; maxpagecount=20; withinhost=192.168.1.16
| url method
| http://192.168.1.16:8180/manager/status HTTP: Basic
| http://192.168.1.16:8180/admin/ FORM
|_ http://192.168.1.16:8180/manager/html HTTP: Basic
|_http-chrono: Request times for /; avg: 1773.74ms; min: 214.36ms; max: 4702.71ms
|_http-date: Thu, 01 Nov 2018 01:01:05 GMT; -1s from local time.
| http-default-accounts:
| [Apache Tomcat] at /manager/html/
|_ tomcat:tomcat
| http-enum:
| /admin/: Possible admin folder
| /admin/index.html: Possible admin folder
| /admin/login.html: Possible admin folder
| /admin/admin.html: Possible admin folder
| /admin/account.html: Possible admin folder
| /admin/admin_login.html: Possible admin folder
| /admin/home.html: Possible admin folder
| /admin/admin-login.html: Possible admin folder
| /admin/adminLogin.html: Possible admin folder
| /admin/controlpanel.html: Possible admin folder
| /admin/cp.html: Possible admin folder
| /admin/index.jsp: Possible admin folder
| /admin/login.jsp: Possible admin folder
| /admin/admin.jsp: Possible admin folder
| /admin/home.jsp: Possible admin folder
| /admin/controlpanel.jsp: Possible admin folder
| /admin/admin-login.jsp: Possible admin folder
| /admin/cp.jsp: Possible admin folder
| /admin/account.jsp: Possible admin folder
| /admin/admin_login.jsp: Possible admin folder
| /admin/adminLogin.jsp: Possible admin folder
| /manager/html/upload: Apache Tomcat (401 Unauthorized)
| /manager/html: Apache Tomcat (401 Unauthorized)
| /admin/view/javascript/fckeditor/editor/filemanager/connectors/test.html: OpenCart/FCKeditor File upload
| /admin/includes/FCKeditor/editor/filemanager/upload/test.html: ASP Simple Blog / FCKeditor File Upload
| /admin/jscript/upload.html: Lizard Cart/Remote File upload
|_ /webdav/: Potentially interesting folder
|_http-favicon: Apache Tomcat
| http-grep:
| (2) http://192.168.1.16:8180/:
| (2) email:
| + users@tomcat.apache.org
| + dev@tomcat.apache.org
| (3) http://192.168.1.16:8180/tomcat-docs/changelog.html:
| (3) email:
| + remm@apache.org
| + yoavs@apache.org
| + fhanik@apache.org
| (1) http://192.168.1.16:8180/tomcat-docs/:
| (1) email:
|_ + craigmcc@apache.org
| http-headers:
| Server: Apache-Coyote/1.1
| Content-Type: text/html;charset=ISO-8859-1
| Date: Thu, 01 Nov 2018 01:01:06 GMT
| Connection: close
|
|_ (Request type: HEAD)
|_http-title: Apache Tomcat/5.5
| http-vhosts:
|_127 names had status 200
MAC Address: 08:00:27:50:55:EB (Oracle VirtualBox virtual NIC)
Host script results:
|_dns-brute: Can't guess domain of "192.168.1.16"; use dns-brute.domain script argument.
|_fcrdns: FAIL (No PTR record)
|_ipidseq: All zeros
|_msrpc-enum: NT_STATUS_OBJECT_NAME_NOT_FOUND
|_nbstat: NetBIOS name: METASPLOITABLE, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
|_path-mtu: PMTU == 1500
| qscan:
| PORT FAMILY MEAN (us) STDDEV LOSS (%)
| 1 0 446.80 71.34 0.0%
| 21 0 483.20 85.39 0.0%
| 22 0 525.10 170.05 0.0%
| 23 0 447.30 108.34 0.0%
| 25 0 511.78 99.24 10.0%
| 53 1 508.60 68.68 0.0%
| 80 0 492.60 74.90 0.0%
| 111 0 441.70 59.25 0.0%
|_139 1 530.20 113.72 0.0%
| smb-mbenum:
|_ ERROR: Failed to connect to browser service: Could not negotiate a connection:SMB: ERROR: Server returned less data than it was supposed to (one or more fields are missing); aborting [12]
| smb-os-discovery:
| OS: Unix (Samba 3.0.20-Debian)
| NetBIOS computer name:
| Workgroup: WORKGROUP\x00
|_ System time: 2018-10-31T21:01:10-04:00
|_smb2-time: Protocol negotiation failed (SMB2)
Nmap done: 1 IP address (1 host up) scanned in 166.20 seconds
root@bt:~#
✿◕‿◕✿ ❀◕‿◕❀ ❁◕‿◕❁ ✾◕‿◕✾
nmap --script vuln 192.168.1.16
ستظهر النتائج بالتفصيل
هنا يظهر السيرفر مصاب بعدة ثغرات مثل ثغرة FTP ويعطيك استغلال الثغرة
ظهرت بالصورة أسفل ثغرات CSRF
وفي هذه الصورة السيرفر مثصاب بثغرات Sql Injection
وهنا يظهر المجلدات الموجودة بالسيرفر ولوجة التحكم وغيرها من المعلومات المفيدة , وفي الأسفل السيرفر مصاب بثغرة تمكننا من تطبيق هجوم حجب الخدمة بواسطة أداة Slowloris
حيل في التعامل مع العبارات
يمكننا استعمال جميع سكريبتات البحث واستثناء البعض, لاستثناء سكريبت نضع العبارة not
العبارة or تعني أو
استثناء أمر من البحث
هذا الأمر أسفل مثلاnmap --script "not(intrusive or dos or exploit)" -sV <الهدف>
يعني قم باستعمال جميع السكريبتات باستثناء dos أو intrusive أو exploit .
استعمال امر الجمع and
في الأمر السابق استعملنا and ومعنى الأمر قم باستخدام السكريبت broadcast و discovery معًاnmap --script "broadcast and discovery" <الهدف>
استعمال العلامة * في NSE وهي تعني أي شيء أو الكل
في الأمر
> معناه استعمل اي سكريبت يبدأ ب snmp- ولا يهم بماذا ينتهي.nmap --script "snmp-*" <الهدف>
سنحاول دمج أمرين ولنجعل الامر أكثر تعقيد
هنا استعملنا كل السكريبتات التي تبدا ب http- باستثناء exploitnmap --script "http-* and not(exploit)" <الهدف>
استعمال مدخلات أخرى (script-args) مع NSE سنقوم مثلا بالفحص وجعل الأمر يظهر عند الضحية وكأنني أستعمل متصفح أخر باستعمال خاصية user-agent
nmap -sV --script http-title --script-args http.useragent="Mozilla 1337"
<الهدف>
✿◕‿◕✿ ❀◕‿◕❀ ❁◕‿◕❁ ✾◕‿◕✾
ملاحظة: يمكن صنع سكريبتات خاصة بك باستعمال لغة LUA
تنقيح سكريبت Debugging NSE scripts
ان أردت تنقيح ومعرفة اين يقع المشكل بالسكريبت ضع الأمر الاتي script-trace
nmap --script exploit --script-trace <الهدف>
وهذا الامر لتنقيح الحزم packet-trace
nmap -O --script myscript.nse --packet-trace <الهدف>
طريقة تحديث السكريبتات NSE
لتحديثها قم بادخال الأمر الأتي بالطرفية:nmap --script-updatedb
✿◕‿◕✿ ❀◕‿◕❀ ❁◕‿◕❁ ✾◕‿◕✾
لمعرفة المزيد حول NSE وكيفية تصميم سكريبت خاص بك انصحك بكتاب عنوانه
Mastering Nmap Scripting Engine Book