您现在的位置是:网站首页> 编程资料编程资料

Nmap备忘单:从探索到漏洞利用 第三章 NSE脚本的使用_工具使用_网络安全_

2023-05-24 432人已围观

简介 Nmap备忘单:从探索到漏洞利用 第三章 NSE脚本的使用_工具使用_网络安全_

众所周知NMAP是经常用来进行端口发现、端口识别。除此之外我们还可以通过NMAP的NSE脚本做很多事情,比如邮件指纹识别,检索WHOIS记录,使用UDP服务等。

发现地理位置

Gorjan Petrovski提交了个NMAP的NSE脚本,帮助我们定位远程IP的地理位置:ip-geolocation-maxmind,ip-geolocation-ipinfodb,和ipgeolocation-geobytes。

这将告诉我们如何设置并使用附带的NMAP NSE的地理位置脚本。

 ip-geolocation-maxmind

为了能调用该脚本,需要先下载MaxMind的城市数据库http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz。解压到本地的NMAP数据文件夹($Nmap_DATA/nselib/data/)。

命令:

Nmap  --script ip-geolocation-* ip

 提交新的地理位置提供商

有时地理位置可能是错误的,因为地理位置取决于的MaxMind数据库。因此我们必须给NMAP提供一个新的数据库。

 获得WHOIS记录信息

WHOIS记录通常包含如注册人的姓名和联系方式的重要数据。虽然这里有很多工具可以查询WHOIS协议,但NMAP的证明了自身的优秀,因为它能够批量处理IP范围和主机列表。

命令:Nmap --script whois 目标

图片1.png

 --script WHOIS查询参数告诉NMAP的,以获得给定目标的记录。此脚本使用IANA分配的数据来选择RIR,它的结果在本地缓存。另外,我们可以覆盖此行为,并选择服务提供商的说法whodb使用的顺序:

参数--script whois告诉NMAP去查询区域互联网注册管理机构WHOIS数据库来获得给定目标的whois记录。这个脚本使用IANA分配的数据选择RIR并在本地缓存结果。或者我们可以覆盖这一行为,指定whois数据库的提供商并依次查询。

命令:

Nmap --script whois --script-args whois.whodb=arin+ripe+afrinic <目标>

图片2.png

该脚本将会按顺序在WHOIS提供商中查询记录或者推荐记录,要忽略推荐记录请指定参数值nofollow。

命令:Nmap --script whois --script-args whois.whodb=nofollow <目标>

要批量查询的主机名列表(-iL <文件名>)的WHOIS记录而不启用端口扫描(-sn)。命令:Nmap -sn –script whois -v -iL hosts.txt (hosts.txt包含主机或者ip的列表)

禁用缓存

有时候whois查询返回的是缓存的结果而不是最新的,可以指定参数禁止查询缓存。

命令:

Nmap -sn --script whois -script-args whois.whodb=nocache scanme. Nmap.org

图片3.png 

检查主机是否有恶意行为

NMAP通过调用谷歌安全浏览服务API来检查主机是否进行恶意软件分发或者网络钓鱼攻击的行为。

使用脚本http-google-malware之前,先获取谷歌安全浏览服务API的密钥:

https://developers.google.com/safe-browsing/key_signup?csw=1

命令:

Nmap -p80 -script http-google-malware -script-args http-google-malware.api= <目标>

如果不使用API,也可以进行查询。

命令:Nmap -p80 --script http-google-malware -v scanme.Nmap.org

图片4.png 

收集有效的邮箱

收集邮箱对渗透测试非常有用,我们可以对这些邮箱进行钓鱼工具或者暴力破解攻击。NMAP可以进行邮箱的收集,但是脚本http-google-email不在NMAP的官方资料库中,我们需要手动下载http://seclists.org/Nmap-dev/2011/q3/att-401/http-google-email.nse,并把它复制到本地脚本目录。正如你所看到的,下面的截图有电子邮件收集脚本的详细信息:

图片5.png 

但作为一名安全研究人员必须要了解脚本,因为脚本可能包含恶意的东西。所以下面介绍关于脚本的详细信息。下面就是下载的脚本内容,这样你就不必再下载,可以直接使用该脚本。

找到所有的NSE脚本的最简单方法是使用find命令如下所示。

description = [[ http-google-email queries the Google web search engine and Google Groups for e-mails pertaining to a specific domain. ]] --- -- @usage -- Nmap -p80 --script http-google-email  -- -- @output -- PORT STATE SERVICE -- 80/tcp open http -- | http-google-email: -- | Nmap-dev () insecure org -- | Nmap-svn () insecure org -- |_fyodor () insecure org -- -- @args http-google-email.domain Domain to search for. -- @args http-google-email.pages The number of results pages to be requested from Google Web search and Google Group search respectively. Default is 5. --- author = "Shinnok" license = "Same as Nmap--See http://Nmap.org/book/man-legal.html" categories = {"discovery", "safe", "external"} require "http" require "shortport" portrule = shortport.http --Builds Google Web Search query --@param domain --@param page --@return Url local function google_search_query(domain, page) return string.format("http://www.google.com/search?q=%%40%s&hl=en&lr=&ie=UTF-8&start=%s&sa=N", domain, page) end --Builds Google Groups Search query --@param domain --@param page --@return Url local function google_groups_query(domain, page) return string.format("http://groups.google.com/groups?q=%s&hl=en&lr=&ie=UTF-8&start=%s&sa=N", domain, page) end --- --MAIN --- action = function(host, port) local pages = 50 local target local emails = {} if(stdnse.get_script_args("http-google-email.pages")) then pages = stdnse.get_script_args("http-google-email.pages")*10 end -- Check if we have the domain argument passed if(stdnse.get_script_args("http-google-email.domain")) then target = stdnse.get_script_args("http-google-email.domain") else -- Verify that we have a hostname available if not(host.targetname) then return string.format("[ERROR] Host can not be resolved to a domain name.") else target = host.targetname end end stdnse.print_debug(1, "%s: Checking domain %s", SCRIPT_NAME, target) -- Google Web search for page=0, pages, 10 do local qry = google_search_query(target, page) local req = http.get_url(qry) stdnse.print_debug(2, "%s", qry) stdnse.print_debug(2, "%s", req.body) body = req.body:gsub('', '') body = body:gsub('', '') if body then local found = false for email in body:gmatch('[A-Za-z0-9%.%%%+%-]+@' .. target) do for _, value in pairs(emails) do if value == email then found = true end end if not found then emails[#emails+1] = email end end end end -- Google Groups search for page=0, pages, 10 do local qry = google_groups_query(target, page) local req = http.get_url(qry) stdnse.print_debug(2, "%s", qry) stdnse.print_debug(2, "%s", req.body) body = req.body:gsub('', '') body = body:gsub('', '') if body then local found = false for email in body:gmatch('[A-Za-z0-9%.%%%+%-]+@' .. target) do for _, value in pairs(emails) do if value == email then found = true end end if not found then emails[#emails+1] = email end end end end if #emails > 0 then return "\n" .. stdnse.strjoin("\n", emails) end end

find / -name ‘*.nse’

一般情况下的路径可能是usr/share/Nmap/scripts。

图片6.png

找到脚本文件所在的目录后,切换到这个目录,执行wget命令,当然你也可以手动拷贝一份到这个目录。

图片7.png

看下脚本内容是否正确。

图片8.png

拷贝了http-google-email.nse之后,我们需要手动更新脚本数据库,执行如下的命令:

Nmap -script-updatedb

更新完成后,就可以运行脚本了。

Nmap -p80 –script http-google-email <目标>

NSE脚本参数

选项–script-args是用于设置NSE脚本的参数。例如:

Nmap -sV --script http-title --script-args http.useragent=”Mozilla 999 ” <目标>

以上命令设置了参数useragent的值。

获取主机信息并进一步深入

作为一个专业的安全测试人员我们应该进一步获得关于网络或主机的附加信息去推动渗透测试。

-O参数用来探测目标操作系统:

命令:Nmap -O 目标

图片9.png

通过分析目标的响应是否符合某些操作系统的特征,从而判断目标操作系统的类型。为了能更准确的探测操作系统,目标主机至少要有一个开放的端口和关闭的端口。当扫描多个目标时,选项–osscan-limit可以忽略不满足这个要求的主机以加快扫描速度。使用选项-v可以展示扫描过程。

命令:Nmap -v -O 目标

图片10.png

在某些情况下NMAP不能确定操作系统时,它会显示一个指纹。该指纹可以提交到NMAP的数据库中(http://www.Nmap.org/submit/)

提交生成的指纹,并正确识别目标的操作系统,我们可以改善NMAP的操作系统检测功能在未来的版本中的准确性。

猜测操作系统

如果NMAP无法确定操作系统类型,通过选项–osscan-guess强制识别os。

命令:Nmap -O –osscan-guess 目标

图片11.png

它将列出的NMAP脚本数据库操作系统的所有可能的匹配。–fuzzy可以用作–osscan-guess的快捷方式。

图片12.png

如果目标至少有一个开放和一个关闭的TCP端口那么操作系统的类型识别会比较有效。选项–osscan-limit将会使NMAP不对没有满足这个要求的目标进行操作系统的识别。这样可以节省大量的时间,尤其是在对许多主机-Pn扫描。它只与选项-O或者-A搭配使用。

图片13.png

–max-OS-tries(设置针对目标的操作系统检测的最大尝试次数)

当NMAP针对目标进行操作系统检测,并未能找到一个完美的匹配时,它通常会重复尝试。默认情况下,如果环境条件比较好,NMAP会尝试五次,如果条件比较差那么只会尝试二次。指定 –max-os-tries的值比较低的话(比如1)会加快NMAP的速度,但可能会错过潜在的可识别的目标。

命令:map -O –max-os-tries 目标

图片14.png 

扫描时显示调试信息

选项 –version-trace会让NMAP显示详细的扫描内容。

命令:Nmap -sV –version-trace 目标

图片15.png 

执行RPC扫描

选项-sR对目标进行RPC(远程过程调用)扫描

图片16.png

命令:Nmap -sR 目标

上述-sR扫描的输出显示有关目标系统上运行的RPC服务的信息。RPC与Unix和Linux系统上的NFS(网络文件系统)服务关系很紧密。

NMAP扫描使用-hostmap选项

此hostmap脚本基于第三方服务,而官方版本只支持BFK的DNS历史记录。正如我前面所说的,下载脚本

https://svn.Nmap.org/Nmap/scripts/hostmap-bfk.nse)并更新NMAP的脚本数据库,然后执行命令:

Nmap -p80 –script hostmap Nmap.org

这些参数–script hostmap -p80告诉NMAP的启动HTTP版的hostmap脚本,并限制只扫描80端口以加快这一任务。

该hostmap.nse查询两个不同的Web服务:BFK DNS记录和ip2hosts.com。 BFK DNS记录是一项免费服务,从公共DNS数据和ip2hosts收集其信息。这两项服务都是免费的,滥用他们将很有可能让你禁止使用该服务。

可以设定参数指定不同的搜索引擎。

Nmap -p80 –script hostmap –script-args hostmap.provider=BING  <目标>

Nmap -p80 –script hostmap –script-args hostmap.provider=BFK  <目标>

Nmap -p80 –script hostmap –script-args hostmap.provider

-六神源码网