zoukankan      html  css  js  c++  java
  • Nmap原理-01选项介绍

    Nmap原理-01选项介绍

    1.Nmap原理图

      Nmap包含四项基本功能:主机发现/端口扫描/版本探测/操作系统探测。这四项功能之间存在大致的依赖关系,比如图片中的先后关系,除此之外,Nmap还提供规避防火墙的技巧以及NSE库。下面对这四类Nmap选项进行介绍,主要介绍每个选项有什么作用,如想了解原理,可以阅读本文附录的参考文献。

    2. 主机发现

    例子:
      nmap –sn –PE –PS80,135 –PU53 scanme.nmap.org
        使用wireshark可以查看,nmap在运行上述语句的时候到底发送了哪些包。
      n
    map –sn 192.168.1.100-120
        通过ARP包询问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: 追踪每个路由节点。

    3.端口扫描

    例子:
      nmap –sS –sU –T4 --top-ports 300 192.168.1.100
        
    参数-sS表示使用TCP SYN方式扫描TCP端口;

        -sU表示扫描UDP端口;
        -T4表示时间级别配置4级,总共6个级别,级别越高扫描速度越快,但也容易被WAF和IDS检测,推荐使用T4级别;
        --top-ports 300表示扫描最有可能开放的300个端口(TCP和UDP分别有300个端口)
    相关选项:
      -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: 快速模式,仅扫描TOP 100的端口
      --top-ports <number>:扫描开放概率最高的number个端口;具体可以参见文件:nmap-services。默认情况下,nmap会扫描最有可能的1000个TCP端口
      --port-ratio <ratio>: 扫描指定频率以上的端口。

    4.版本探测

    版本探测选项较少,但是有很大的用处,下面的文章将会介绍版本探测的具体内容,包括nmap-services-probe文件等。

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

    5.操作系统探测

    -O: 指定Nmap进行OS侦测。  
    --osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)。  
    --osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统。

    一般在使用是会结合-O -V。
    使用这两个选项可以造成下面的输出:
      Device type:设备类型
    所有的指纹被分为高层的设备类型,router, printer, firewall、general purpose
    “Device Type: router|firewall”
      Running:运行的什么系统
    它显示操作系统家族以及操作系统型号,多个操作系统用逗号分隔,型号用‘|’分隔
      OS CPE
    以cpe:/o:开头
      OS details
    如果不确切,名字会变成Aggressive OS guesses
      Uptime guess:
      Network Distance:
      TCP Sequence Prediction:
      IP ID Sequence Generation:
    -sV和-O同时使用,如果输出的操作系统信息一致,那么可信度更高;如果不一致还要进一步调查。
    使用-A选项可以将二者结合起来。


    6.其他选项

    1.规避防火墙
    例子:
      
    nmap -v -F -Pn -D192.168.1.100,192.168.1.102,ME -e eth0 -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地址。
        更好的方式-D选项中嵌入RND随机数,这样更具有迷惑性。
        可以从Wireshark中看到数据包的流动情况:对于每个探测包,Nmap都使用-D选项指定的IP地址发送不同的数据包,
        从而达到扰乱对方防火墙/IDS检查的目的(更好的方式-D选项中嵌入RND随机数,这样更具有迷惑性)。
        
    当探测到80端口时候,目标主机向我们回复了SYN/ACK包回来(当然也向其他诱骗的IP回复SYN/ACK包,我们无法接收到),证明80端口是开放的。
    相关选项:   
    -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)
    2.使用NSE脚本
    例子:
      Nmap –sV –p 80 –v –script default,http* 192.168.1.1
    相关选项:
      -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>部分可以逗号分隔的文件或脚本类别。
    3.检测防火墙
      nmap -p 80,443 --script=http-waf-detect 192.168.150.143
      nmap -p 80,443 --script=http-waf-detect www.jianshu.com
      nmap -p 80,443 --script=http-waf-fingerprint idea.lanyus.com
      正常与不正常的输出样式:    
          PORT   STATE SERVICE
          80/tcp  open  http

          443/tcp open  https
          PORT   STATE SERVICE
          80/tcp  open  http

            | http-waf-detect: IDS/IPS/WAF detected:
            |_www.jianshu.com:80/?p4yl04d3=<script>alert(document.cookie)</script>
          443/tcp open  https
      除了Nmap有检测防火墙功能之外,wafw00f工具也可以实现防火墙检测。
    4.文件读入列表
      -iL <inputfilename> (从列表中输入)
      -iR <hostnum> (随机选择目标)
      --exclude <host1[,host2][,host3],...> (排除主机/网络)
      --excludefile <excludefile> (排除文件中的列表) 

    7.参考资料

      官网:www.nmap.org

      安全工具排名:http://sectools.org/

      https://github.com/erasin/notes/blob/master/linux/safe/nmap.md

      https://nmap.org/man/zh/man-host-discovery.html

  • 相关阅读:
    CF G. Running Competition (NTT, 思维)
    ABC 177 F
    牛客练习赛68 D.牛牛的粉丝 (期望DP,矩阵快速幂)
    CF E
    HDU 6761 Minimum Index (字符串--Lyndon分解)
    D. GameGame (思维、博弈)
    P2533 最小圆覆盖
    P4049 [JSOI2007]合金
    P2510 [HAOI2008]下落的圆盘
    P3205 [HNOI2010]合唱队
  • 原文地址:https://www.cnblogs.com/liun1994/p/6978285.html
Copyright © 2011-2022 走看看