zoukankan      html  css  js  c++  java
  • 那些年,我们一起用过的nmap

    简要

    nmap是我们最熟悉但同时又比较陌生的工具,为什么这样说呢?熟悉是因为我们都知道它是一个端口扫描工具,陌生是因为我们对它的功能了解还较为局限。实际上nmap的功能极为强大,接下来,让我们一起走进nmap之旅。

    nmap初相识

    记得我当时用nmap的时候常常就那么几个命令,最开始的时候甚至还不知道加什么选项,其实nmap是一块存在于我们身边的宝藏,等待有心人去发现它。

    nmap主要功能有以下几种:

    • 主机发现
    • 端口扫描
    • 服务和版本探测
    • 操作系统探测
    • 防火墙/IDS躲避和欺骗
    • 漏洞探测
    • 数据库探测
    • 输出结果

    接下来我将带领大家一起开启nmap奇妙之旅,打开nmap不为常人所知道的一面

    nmap初探险

    主机发现

    任何时候,一次渗透测试都要从信息收集开始,而主机存活与否的探测又是重中之重。nmap主机发现支持多种扫描方式。

    • -sP(ping扫描):

      ping扫描可以说是最常见的一种主机发现探测方式。但是现在的服务器基本都开启了防ping,所以基本的ping扫描对于主机发现来说效果不如以前,但仍是一个最直接的方法。

    • -P0(无ping):

      nmap默认情况时只对存活的主机进行更高强度的探测,如端口探测,服务探测等。但如果使用了这个选项,那么nmap就会对自己设定的目标每个主机进行高强度探测,无论它存活与否

    • -PS(TCP SYN Ping):

      这个方式发送的是一个SYN标志位为空的TEP报文。那么nmap是如何根据返回结果来判断主机是否存活呢?由于再UNIX系统的主机上,只有root用户能发送和接收原始的TCP报文,所以实际过程中nmap会为每个主机建立一个connect()请求,如果返回成功或者返回一个ECONNREFUSED失败,则改主机被判定为存在。如果连接超时了,那么则判定改主机不在线。关于SYN包发送和接收的整个过程这里不再详述。

    • -PA(TCP ACK Ping):

      这个和上个选项类似,只不过这个选项设置的是TCP报文的ACK位。如果主机正在运行,并且收到了一个ACK,那么就会返回一个RST,进而就能判断主机存在。当SYN被防火墙阻挡时,可用这个选项,当然两个一起用效果更佳

    • -PU(UDP Ping):

      UDP扫描,原理就是发送一个空的UDP报文到目标的指定端口,默认是31338,如果目标机器的端口是关闭的,那么就能马上得到一个ICMP端口无法到达的回应报文,这样就可以判定主机存在。当然也存在误判的情况,比如TTL超时或者网络的确不可达,这个时候就没有回应了,那么也被识别为主机存在。大部分开放端口对这样一个UDP报文不进行回应。

    • -PE;-PP;-PM(ICMP Ping Types):

      -PE是ICMP回声请求ping查询,-PP是时间戳ping查询,-PM是地址掩码ping查询

    • -PR(ARP Ping):

      内网中最常用的一扫描,原理想必不用再详细阐述了

    • -n

      禁止DNS反向解析

    • -R

      反向解析域名

    • -system-dns

      只用系统域名解析器

    • -6

      扫描IPv6地址

    • -PY(SCTP INIT Ping扫描):

      向目标主机发送INIT包,通过响应包判断主机是否存活。

    端口扫描

    • -sS(TCP SYN扫描):

      又叫做半开放式扫描,不建立一个完全的TCP连接。它发送一个SYN报文,然后等待响应。SYN/ACK表示端口在开放,而 RST (复位)表示没有关闭。如果数次重发后仍没响应, 该端口就被标记为被过滤。如果收到ICMP不可到达错误 (类型3,代码1,2,3,9,10,或者13),该端口也被标记为被过滤。

    • -sT(TCP connect()扫描):

      默认TCP扫描,即建立TCP连接,但是这种方式通常会在目标主机上留下日志,容易被发现。

    • -sU(UDP扫描):

      虽然很多端口都是运行的TCP服务,但是也有很多端口在运行着UDP服务。但是UDP扫描比较慢,有的系统限制一秒钟一个报文,倘若扫描65535个端口,岂不要上天。因为常用的UDP服务基本就那几个,比较普遍,所以指定端口扫描即可。

    • -sN;-sF;-sX(隐蔽扫描):

      -sN是Null扫描,通过发送常规TCP报文对计算机进行探测

      -sF是FIN扫描,比如有些防火墙会组织SYN数据包,那么这个时候我们就可用尝试使用FIN扫描

      -sX是Xmas扫描,设置FIN,PSH,URG标志位

      对于判定的原理这三个扫描是相同的,当收到一个RST,则认为该端口是关闭的,若没有响应,则意味着该端口是开放或者被过滤了。

    • -sA(TCP ACK扫描):

      这个扫描不能确定端口开放状态,一般是用来跟防火墙玩的,用来判断防火墙是有状态还是无状态,哪些端口是被过滤的。

    • -sW(TCP窗口扫描):

      通过检查返回的RST报文的TCP窗口域来实现扫描。开放端口用正数来表示窗口大小,而关闭窗口则为0.

    • -sM(TCP Maimon扫描):

      据RFC 793 (TCP),无论端口开放或者关闭,都应该对这样的探测响应RST报文。 然而,如果端口开放,许多基于BSD的系统只是丢弃该探测报文。

    • -scanflags(定制的TCP扫描):

      如果你发现了更好的标志位,或者通过包某个信息能更好的判断端口情况,你便可以使用该选项,定制符合自己情况的TCP扫描

    • -sI

      这是一种一段隐蔽的扫描方式,如果你向扫描足够隐蔽不被发现,那么可以用这种扫描方式,具体实现原理,可查看此文章

    • -sO(IP协议扫描):

      自己指定协议来进行扫描

    服务和版本探测

    • -sV(版本探测)
    • --allports(全端口探测)
    • --version-intensity(设置扫描强度,0为最低强度,9为最高强度)
    • --version-light(打开轻量级模式)
    • -version-all(尝试每个探测)
    • --version-trace(打印出详细扫描过程调试信息)
    • -sR(RPC扫描)

    操作系统探测

    • -O(启用操作系统检测):

      可配合-A同时启用版本检测

    • --osscan-limit(针对指定的目标进行操作系统检测)

    • --osscan-guess; --fuzzy(推测操作系统检测结果)

    防火墙/IDS躲避和欺骗

    • -f(报文分段); --mtu(使用指定的MTU)

      使用小的IP包分段来进行扫描,从而躲避IDS及其他工具

    • -D(使用诱饵隐蔽扫描,在进行版本检测或TCP连接扫描时诱饵无效)

      例如:nmap 127.0.0.1,127.0.0.2,127.0.0.3

    • -S(源地址欺骗)

    • -e(使用指定的接口)

    • --source-port ; -g(源端口欺骗)

    • --data-length(发送报文时 附加随机数据)

    • --ttl(设置IP time-to-live域)

    • --randomize-hosts(对目标主机的顺序随机排列)

    • --spoof-mac(MAC地址欺骗)

    输出结果

    • -oN(标准输出)

      将标准输出直接写入指定 的文件

    • -oX(XML输出)

    • -oS(ScRipT KIdd|3 oUTpuT)

    • -oG(Grep输出)

      曾经网鼎杯有一道CTF题目就是利用这个选项将后门写入,然后连接后门取得flag

    • -oA(输出至所有格式)

    nmap再探险

    上述都是nmap的一些基本选项和使用方式,下面才是平常我们所忽略的nmap的高级功能。

    漏洞探测

    • --script=vuln

    • smb相关脚本

      后台打印机服务漏洞
      nmap --script smb-security-mode.nse -p 445 192.168.74.133
      
      系统漏洞扫描
      nmap --script smb-check-vulns.nse -p 445 192.168.74.133
      
    • http相关脚本

      xss检测
      nmap --script http-stored-xss.nse www.example.com
      
      HTTP头信息检测
      nmap -p 80 --script=http-headers www.example.com
      
      web目录结构爬取
      nmap -p 80 --script=http-sitemap-generator www.example.com
      
      弱口令爆破
      http-wordpress-brute
      http-joomla-brute
      
    • ssl相关脚本

      枚举ssl密钥
      nmap -p 443 --script=ssl-enum-ciphers www.example.com
      
    • ssh相关脚本

      ssh服务密钥信息探测
      nmap -p 22 --script ssh-hostkey --script-args ssh_hostkey=full www.example.com
      

    数据库探测

    • mysql数据库

      列举mysql数据库
      nmap -p 3306 --script mysql-database --script-args mysqluser=root,mysqlpass www.example.com
      
      列举mysql变量
      nmap -p 3306 --script=mysql-variables ww.example.com
      
      mysql弱口令爆破(可使用userdb=xx/xx.txt passdb=xx/xx.txt指定字典爆破)
      nmap --script=mysql-brute www.example
      
      mysql安全配置审计
      nmap -p 3306 --script mysql-audit --script-args "mysql-audit.username='root',mysql-audit.password='',mysql-audit.filename='nselib/data/mysql-cis.audit'" www.example.com
      
    • oracle数据库

      爆破orcal密码
      nmap --script oracle-brute -p 1521 --script-args oracle-brute.sid=test www.example.com
      
    • mssql数据库

      mssql空密码
      nmap -p 1433 --script ms-sql-brute --script-args userdb=username.txt,passdb=password.txt www.example.com
      

    总结

    其实nmap的使用远远不止文章所属这点,nmap的强大之处在于我们能够将自己的工具和编写的脚本或者字典与nmap相结合,从而极大的发挥出nmap功能。

  • 相关阅读:
    linux 解压tgz 文件指令
    shell 脚本没有执行权限 报错 bash: ./myshell.sh: Permission denied
    linux 启动solr 报错 Your Max Processes Limit is currently 31202. It should be set to 65000 to avoid operational disruption.
    远程查询批量导入数据
    修改 MZTreeView 赋权节点父节点选中子节点自动选中的问题
    关于乱码的问题解决记录
    我的网站优化之路
    对设计及重构的一点反思
    我的五年岁月
    奔三的路上
  • 原文地址:https://www.cnblogs.com/Jleixin/p/14300047.html
Copyright © 2011-2022 走看看