渗透测试工具篇——Nmap

目录
  • 渗透测试工具篇——Nmap
  • 介绍
  • 安装
  • 基本使用方法
    • 主机发现
    • 端口扫描
      • 原理
      • 用法
    • 版本侦测
      • 原理
      • 用法
    • OS侦测
  • Nmap进阶用法
    • 防火墙/IDS规避

      • 规避原理
      • 规避用法
    • NSE脚本引擎
      • 用法
      • 实例
  • 常用命令小结

介绍

Nmap是一款网络扫描和主机检测的非常有用的工具。 Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。它可以适用于winodws,linux,mac等操作系统。Nmap是一款非常强大的实用工具,包含四项基本功能:

  • 主机发现(Host Detection)

  • 端口扫描(Port Scanning)

  • 版本侦测(version Detection)

  • 操作系统侦测(Operating System Detection)

安装

Nmap官网

Nmap中文网站

基本使用方法

主机发现

-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。-sn: Ping Scan 只进行主机发现,不进行端口扫描。-Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。-PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。-PE/PP/PM: 使用ICMP echo, timestamp, and netmask 请求包发现主机。-PO[protocollist]: 使用IP协议包探测对方主机是否开启。-n/-R: -n表示不进行DNS解析;-R表示总是进行DNS解析。--dns-servers <serv1[,serv2],...>: 指定DNS服务器。--system-dns: 指定使用系统的DNS服务器--traceroute: 追踪每个路由节点

端口扫描

nmap默认会扫描1000个最有可能开放的TCP端口

端口扫描的状态:

Opend:端口开启

Closed: 端口关闭

Filtered:端口被过滤,数据没有到达主机,返回的结果为空,数据被防火墙

Unfiltered:未被过滤,数据有到达主机,但是不能识别端口的当前状态

Open|filtered:开放或者被过滤,端口没有返回值,主要发生在UDP、IP、FIN、NULL和Xmas扫描中

Closed|filtered:关闭或者被过滤,只发生在IP ID idle扫描

原理

  • TCP SYN scanning

    这是Nmap默认的扫描方式,通常被称作半开放扫描(Half-open scanning)。该方式发送SYN到目标端口,如果收到SYN/ACK回复,那么判断端口是开放的;如果收到RST包,说明该端口是关闭的。如果没有收到回复,那么判断该端口被屏蔽(Filtered)。因为该方式仅发送SYN包对目标主机的特定端口,但不建立的完整的TCP连接,所以相对比较隐蔽,而且效率比较高,适用范围广。

  • TCP connect scanning

    TCP connect方式使用系统网络API connect向目标主机的端口发起连接,如果无法连接,说明该端口关闭。该方式扫描速度比较慢,而且由于建立完整的TCP连接会在目标机上留下记录信息,不够隐蔽。所以,TCP connect是TCP SYN无法使用才考虑选择的方式。

  • TCP ACK scanning

    向目标主机的端口发送ACK包,如果收到RST包,说明该端口没有被防火墙屏蔽;没有收到RST包,说明被屏蔽。该方式只能用于确定防火墙是否屏蔽某个端口,可以辅助TCP SYN的方式来判断目标主机防火墙的状况。

  • TCP FIN/Xmas/NULL scanning

    这三种扫描方式被称为秘密扫描(Stealthy Scan),因为相对比较隐蔽。FIN扫描向目标主机的端口发送的TCP FIN包或Xmas tree包/Null包,如果收到对方RST回复包,那么说明该端口是关闭的;没有收到RST包说明端口可能是开放的或被屏蔽的(open|filtered)。其中Xmas tree包是指flags中FIN URG PUSH被置为1的TCP包;NULL包是指所有flags都为0的TCP包。

  • UDP scanning

    UDP扫描方式用于判断UDP端口的情况。向目标主机的UDP端口发送探测包,如果收到回复“ICMP port unreachable”就说明该端口是关闭的;如果没有收到回复,那说明UDP端口可能是开放的或屏蔽的。因此,通过反向排除法的方式来断定哪些UDP端口是可能出于开放状态。

  • 其他方式

    除上述几种常用的方式之外,Nmap还支持多种其他探测方式。例如使用SCTP INIT/COOKIE-ECHO方式来探测SCTP的端口开放情况;使用IP protocol方式来探测目标主机支持的协议类型(TCP/UDP/ICMP/SCTP等等);使用idle scan方式借助僵尸主机(zombie host,也被称为idle host,该主机处于空闲状态并且它的IPID方式为递增。详细实现原理参见:http://nmap.org/book/idlescan.html)来扫描目标在主机,达到隐蔽自己的目的;或者使用FTP bounce scan,借助FTP允许的代理服务扫描其他的主机,同样达到隐藏自己的身份的目的。

用法

-sS/sT/sA/sW/sM:  指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主    机进行扫描。
-sU:   指定使用UDP扫描方式确定目标主机的UDP端口状况。
-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状    态。
--scanflags <flags>: 定制TCP包的flags。
-sI <zombiehost[:probeport]>: 指定使用idle scan方式来扫描目标主机(前提需要找到合适的        zombie host)
-sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况。
-sO: 使用IP protocol 扫描确定目标机支持的协议类型。
-b <FTP relay host>: 使用FTP bounce scan扫描方式
-p <port ranges>: 扫描指定的端口实例: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9(其中T代表TCP协议、U代表UDP协议、S代表SCTP协议)-F: Fast mode – 快速模式,仅扫描TOP 100的端口
-r: 不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机顺序方式扫描,以让nmap的扫 描不易被对方防火墙检测到)。
--top-ports <number>:扫描开放概率最高的number个端口(nmap的作者曾经做过大规模地互联网扫描,  以此统计出网络上各种端口可能开放的概率。以此排列出最有可能开放端口的列表,具体可以参见文件:        nmap-services。默认情况下,nmap会扫描最有可能的1000个TCP端口)
--port-ratio <ratio>: 扫描指定频率以上的端口。与上述--top-ports类似,这里以概率作为参数,   让概率大于--port-ratio的端口才被扫描。显然参数必须在在0到1之间,具体范围概率情况可以查看      nmap-services文件。

版本侦测

版本侦测,用于确定目标主机开放端口上运行的具体的应用程序及版本信息。

Nmap提供的版本侦测具有如下的优点:

  • 高速。并行地进行套接字操作,实现一组高效的探测匹配定义语法。
  • 尽可能地确定应用名字与版本名字。
  • 支持TCP/UDP协议,支持文本格式与二进制格式。
  • 支持多种平台服务的侦测,包括Linux/Windows/Mac OS/FreeBSD等系统。
  • 如果检测到SSL,会调用openSSL继续侦测运行在SSL上的具体协议(如HTTPS/POP3S/IMAPS)。
  • 如果检测到SunRPC服务,那么会调用brute-force RPC grinder进一步确定RPC程序编号、名字、版本号。
  • 支持完整的IPv6功能,包括TCP/UDP,基于TCP的SSL。
  • 通用平台枚举功能(CPE)
  • 广泛的应用程序数据库(nmap-services-probes)。目前Nmap可以识别几千种服务的签名,包含了180多种不同的协议。

原理

版本侦测主要分为以下几个步骤:

  1. 首先检查open与open|filtered状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。
  2. 如果是TCP端口,尝试建立TCP连接。尝试等待片刻(通常6秒或更多,具体时间可以查询文件nmap-services-probes中Probe TCP NULL q||对应的totalwaitms)。通常在等待时间内,会接收到目标机发送的“WelcomeBanner”信息。nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进行对比。查找对应应用程序的名字与版本信息。
  3. 如果通过“Welcome Banner”无法确定应用程序版本,那么nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将probe得到回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。
  4. 如果是UDP端口,那么直接使用nmap-services-probes中探测包进行探测匹配。根据结果对比分析出UDP应用服务类型。
  5. 如果探测到应用程序是SSL,那么调用openSSL进一步的侦查运行在SSL之上的具体的应用类型。
  6. 如果探测到应用程序是SunRPC,那么调用brute-force RPC grinder进一步探测具体服务。

用法

-sV: 指定让Nmap进行版本侦测
--version-intensity <level>: 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准   确,但是运行时间会比较长。
--version-light: 指定使用轻量侦测方式 (intensity 2)
--version-all: 尝试使用所有的probes进行侦测 (intensity 9)
--version-trace: 显示出详细的版本侦测过程信息。

OS侦测

Nmap使用TCP/IP协议栈指纹来识别不同的操作系统和设备。在RFC规范中,有些地方对TCP/IP的实现并没有强制规定,由此不同的TCP/IP方案中可能都有自己的特定方式。Nmap主要是根据这些细节上的差异来判断操作系统的类型的。

具体实现方式如下:

  1. Nmap内部包含了2600多已知系统的指纹特征(在文件nmap-os-db文件中)。将此指纹数据库作为进行指纹对比的样本库。
  2. 分别挑选一个open和closed的端口,向其发送经过精心设计的TCP/UDP/ICMP数据包,根据返回的数据包生成一份系统指纹。
  3. 将探测生成的指纹与nmap-os-db中指纹进行对比,查找匹配的系统。如果无法匹配,以概率形式列举出可能的系统。
nmap -O ip

Nmap进阶用法

防火墙/IDS规避

防火墙与IDS规避为用于绕开防火墙与IDS(入侵检测系统)的检测与屏蔽,以便能够更加详细地发现目标主机的状况。

Nmap提供了多种规避技巧,通常可以从两个方面考虑规避方式:数据包的变换(Packet Change)与时序变换(Timing Change)。

规避原理

  • 分片

    将可疑的探测包进行分片处理(例如将TCP包拆分成多个IP包发送过去),某些简单的防火墙为了加快处理速度可能不会进行重组检查,以此避开其检查。

  • ip诱骗

    在进行扫描时,将真实IP地址和其他主机的IP地址(其他主机需要在线,否则目标主机将回复大量数据包到不存在的主机,从而实质构成了拒绝服务攻击)混合使用,以此让目标主机的防火墙或IDS追踪检查大量的不同IP地址的数据包,降低其追查到自身的概率。注意,某些高级的IDS系统通过统计分析仍然可以追踪出扫描者真实IP地址。

  • ip伪装

    顾名思义,IP伪装即将自己发送的数据包中的IP地址伪装成其他主机的地址,从而目标机认为是其他主机在与之通信。需要注意,如果希望接收到目标主机的回复包,那么伪装的IP需要位于统一局域网内。另外,如果既希望隐蔽自己的IP地址,又希望收到目标主机的回复包,那么可以尝试使用idle scan或匿名代理(如TOR)等网络技术。

  • 指定源端口

    某些目标主机只允许来自特定端口的数据包通过防火墙。例如FTP服务器配置为:允许源端口为21号的TCP包通过防火墙与FTP服务端通信,但是源端口为其他端口的数据包被屏蔽。所以,在此类情况下,可以指定Nmap将发送的数据包的源端口都设置特定的端口。

  • 扫描延时

    某些防火墙针对发送过于频繁的数据包会进行严格的侦查,而且某些系统限制错误报文产生的频率(例如,Solaris 系统通常会限制每秒钟只能产生一个ICMP消息回复给UDP扫描),所以,定制该情况下发包的频率和发包延时可以降低目标主机的审查强度、节省网络带宽。

  • 其它技术

    Nmap还提供多种规避技巧,比如指定使用某个网络接口来发送数据包、指定发送包的最小长度、指定发包的MTU、指定TTL、指定伪装的MAC地址、使用错误检查和(badchecksum)。

    更多信息http://nmap.org/book/man-bypass-firewalls-ids.html

规避用法

-f; --mtu <val>: 指定使用分片、指定数据包的MTU.
-D <decoy1,decoy2[,ME],...>: 用一组IP地址掩盖真实地址,其中ME填入自己的IP地址。
-S <IP_Address>: 伪装成其他IP地址
-e <iface>: 使用特定的网络接口
-g/--source-port <portnum>: 使用指定源端口
--data-length <num>: 填充随机数据让数据包长度达到Num。
--ip-options <options>: 使用指定的IP选项来发送数据包。
--ttl <val>: 设置time-to-live时间。
--spoof-mac <mac address/prefix/vendor name>: 伪装MAC地址
--badsum: 使用错误的checksum来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或IDS/IPS)。

示例:

nmap -v -F -Pn -D ip,ME -e etho -g 3355 192.168.1.1

-F表示快速扫描100个端口;-Pn表示不进行Ping扫描;-D表示使用IP诱骗方式掩盖自己真实IP(其中ME表示自己IP);-e eth0表示使用eth0网卡发送该数据包;-g 3355表示自己的源端口使用3355;192.168.1.1是被扫描的目标IP地址。

NSE脚本引擎

SE脚本引擎(Nmap Scripting Engine)是Nmap最强大最灵活的功能之一,允许用户自己编写脚本来执行自动化的操作或者扩展Nmap的功能。

NSE使用Lua脚本语言,并且默认提供了丰富的脚本库,目前已经包含14个类别的350多个脚本。

NSE的设计初衷主要考虑以下几个方面:

  • 网络发现(Network Discovery)
  • 更加复杂的版本侦测(例如skype软件)
  • 漏洞侦测(Vulnerability Detection)
  • 后门侦测(Backdoor Detection)
  • 漏洞利用(Vulnerability Exploitation)

nmap的脚本主要可以分为

  • Auth:负责处理鉴权证书(绕过鉴权)的脚本
  • Broadcast:在局域网内探查更多服务去开启情况,如DHCP/DNS等
  • Brute:针对常见的应用提供暴力破解方式,如HTTP/HTTPS
  • Default:使用-sC或-A选项扫描时默认的脚本,提供基本的脚本扫描能力
  • Discovery:对网络进行更多的信息搜集,如SMB枚举,SNMP查询等
  • Dos:用于进行拒绝服务攻击
  • Exploit:利用已知的漏洞入侵系统
  • External:利用第三方的数据库或资源 。如,进行whois解析
  • Fuzzer:模糊测试脚本,发送异常的包到目标机,探测出潜在漏洞
  • Intrusive:入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
  • Malware:探测目标是否感染了病毒,开启后门等
  • Safe:与Intrusive相反,属于安全性脚本
  • Version:负责增强服务与版本扫描功能的脚本
  • Vuln:负责检查目标机是否有常见漏洞,如MS08-067

用法

-sC: 等价于 --script=default,使用默认类别的脚本进行扫描。--script=<Lua scripts>: <Lua scripts>使用某个或某类脚本进行扫描,支持通配符描述--script-args=<n1=v1,[n2=v2,...]>: 为脚本提供默认参数--script-args-file=filename: 使用文件来为脚本提供参数--script-trace: 显示脚本执行过程中发送与接收的数据--script-updatedb: 更新脚本数据库--script-help=<Lua scripts>: 显示脚本的帮助信息,其中<Luascripts>部分可以逗号分隔的文件或脚本类别。

实例

nmap -script smb-vuln-ms17-010  192.168.10.34     #可以探测该主机是否存在ms17_010漏洞
nmap --max-parallelism 800 --script http-slowloris scanme.nmap.org  #可以探测该主机是否存在http拒绝服务攻击漏洞
nmap -script http-iis-short-name-brute 192.168.10.34  #探测是否存在IIS短文件名漏洞
nmap -script mysql-empty-password 192.168.10.34       #验证mysql匿名访问
nmap -p 443 -script ssl-ccs-injection 192.168.10.34   #验证是否存在openssl CCS注入漏洞
--script=http-waf-detect            #验证主机是否存在WAF
--script=http-waf-fingerprint       #验证主机是否存在WAF
nmap --script-brute 192.168.1.1     #nmap可对数据库、SMB、SNMP等进行简单密码的暴力破解
nmap --script-vuln  192.168.1.1     #扫描是否有常见漏洞

常用命令小结

nmap -sn 10.95.10.100/24(10.96.10.100-200)
nmap -Pn ip
nmap -sS ip
nmap -sS -sU -p 1-65535 ip
nmap -sV ip
nmap -T4 -A -V ip
nmap -O ip
nmap --script-vuln ip

Nmap命令原理详解

Nmap参数详解

渗透测试工具篇——Nmap相关推荐

  1. 渗透测试工具篇——sqlmap

    目录 简介 基本使用 全部参数说明 简单使用 注入流程 sqlmap使用技巧 修改最大线程数 sqlmap速度优化 指定位置注入 检测waf 执行操作系统命令(--os-shell/--os-cmd) ...

  2. linux 渗透工具_适用于Linux的十大最佳渗透测试工具

    linux 渗透工具 This article covers some of the best penetration testing tools for Linux Cybersecurity is ...

  3. 渗透测试 ( 5 ) --- 扫描之王 nmap、渗透测试工具实战技巧合集

    Nmap 官方文档 ( 中文文档是 Nmap 版本4.50,英文文档是最新的 ): 英文文档:https://nmap.org/book/man.html 中文文档:https://nmap.org/ ...

  4. 渗透测试-地基篇-美杜莎Medusa(十二)

    ** 渗透测试-地基篇-美杜莎Medusa(十二) ** 作者:大余 时间:2020-11-27 简介: 渗透测试-地基篇: 该篇章目的是重新牢固地基,加强每日训练操作的笔记,在记录地基笔记中会有很多 ...

  5. 最好用的17个渗透测试工具

    本文讲的是 最好用的17个渗透测试工具, 渗透测试,是专业安全人员为找出系统中的漏洞而进行的操作.当然,是在恶意黑客找到这些漏洞之前.而这些业内安全专家各自钟爱的工具各种各样,一些工具是公开免费的,另 ...

  6. 最新最好的八款渗透测试工具

    本文介绍的渗透测试工具包括:Metasploit.Nessus安全漏洞扫描器.Nmap.Burp Suite.OWASP ZAP.SQLmap.Kali Linux和Jawfish(Evan Saez ...

  7. 自动化渗透测试工具开发实践

    0x00 From重剑无锋:https://github.com/TideSec/Papers 0x01 前言 为了提高安全服务项目的检测效率.规范性.全面性,Tide安全团队结合在渗透测试行业的经验 ...

  8. 暗渡陈仓:用低消耗设备进行破解和渗透测试1.2.2 渗透测试工具集

    1.2.2 渗透测试工具集 Deck包含大量的渗透测试工具.设计理念是每个可能会用到的工具都应该包含进来,以确保在使用时无须下载额外的软件包.在渗透测试行动中给攻击机安装新的软件包很困难,轻则要费很大 ...

  9. 自动渗透测试工具集APT2

    自动渗透测试工具集APT2 APT2是Kali Linux新增的一款自动渗透测试工具集.它可以进行NMAP扫描,也可以直接读取Nexpose.Nessus和NMAP的扫描结果,然后自动进行渗透测试.在 ...

最新文章

  1. 基于级联FFT的广义互相关算法在声源定位中的应用
  2. 手机基站定位(安卓手机定位源码)
  3. 【OpenGL】十一、OpenGL 绘制多个点 ( 绘制单个点 | 绘制多个点 )
  4. 如何在IDEA中使用git
  5. python 多继承的问题
  6. C语言试题三十四之求除1到m之内(含m)能北7或11整除的所有整数放在数组a中,通过n返回这些数的个数。
  7. COJ1196(Staginner 去爬山)
  8. Java 面试题(3)—— JVM
  9. layui中日期格式化方式
  10. java 百度网盘上传_使用pcs api往免费的百度网盘上传下载文件的方法
  11. #define offsetof(TYPE, MEMBER) ((size_t) ((TYPE *)0)-MEMBER)
  12. 安装faac编译问题
  13. USB HID学习:一点开发记录
  14. 云服务器的带宽是如何计算的?
  15. 2012.4.16总结(四)
  16. 导入 theano 失败。“cannot import name gof”
  17. PHP 模拟库存出库商品
  18. PS 抠图如何使用通道法处理头发
  19. spring boot + websocket 简单实现斗鱼弹幕功能
  20. 商丘服务器维修,商丘联想服务器维修网点

热门文章

  1. 基于阿尔法开发板构建卡启动固件
  2. 信用卡数字识别—opencv
  3. w10打游戏老是弹出计算机,w10电脑打游戏时总是打出字怎么办
  4. 千兆车载以太网TSN(时间敏感网络)网络测试?TSN Box为您焕新
  5. 30分钟带你精通Git使用
  6. 牛客小白月赛6 J.洋灰三角
  7. 微信扫一扫点击下载App弹出引导页引导在外部浏览器中打开
  8. wordpress下载过慢或无法下载微云链接快速下载
  9. [LiteratureReview]ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras
  10. 使用 Unicode 编码