本系列文章来自《高度安全环境下的高级渗透测试》一书学习笔记。

一、Nmap

Nmap 可以用来扫描一个网络、监控服务、帮助列出网络主机等。Nmap能够提供操作类型、开放端口等信息。Nmap脚本引擎可以扩展Nmap的功能。
之前文章简单介绍过其使用:
http://blog.csdn.net/xundh/article/details/46642357

1. NMap家族

  • ZenMap
  • Neat:基于netcat,扩展了很多功能
  • Ncrack:用来测试已部署的认证系统和密码强度,支持常用协议
  • Ndiff:可用于网络基线测量,对比Nmap扫描结果之间的差别
  • Nping:允许将自己构造的数据包整合在扫描过程中,并能够对原始的数据包进行操控

2. 语法

nmap - {type(s)} -{opt(s)} {target}

3. 常用选项

主机发现

选项 作用
-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 追踪每个路由节点。

端口扫描

选项 作用
-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 定制TCP包的flags
-sI 指定使用idle scan方式来扫描目标主机(前提需要找到合适的zombie host)
-sY/sZ 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况
-sO 使用IP protocol 扫描确定目标机支持的协议类型
-b <FTP relay host> 使用FTP bounce scan扫描方式
-p 扫描指定的端口 实例: -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个端口;具体可以参见文件:nmap-services。默认情况下,nmap会扫描最有可能的1000个TCP端口
–port-ratio 扫描指定频率以上的端口。

版本探测

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

操作系统探测

选项 作用
-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选项可以将二者结合起来。

4. 其它选项

规避防火墙

选项 作用
-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 -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端口是开放的。

使用NSE脚本

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

检测防火墙
示例:

  nmap -p 80,443 --script=http-waf-detect 192.168.150.143nmap -p 80,443 --script=http-waf-detect www.jianshu.comnmap -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=
      443/tcp open https

文件读入列表

选项 作用
-iL <inputfilename> (从列表中输入)
-iR <hostnum> (随机选择目标)
–exclude <host1[,host2][,host3],…> (排除主机/网络)
–excludefile <excludefile> (排除文件中的列表)

5. 常用扫描

常规扫描

nmap -A 192.168.1.10

常规扫描,可以返回端口、操作系统等信息。易于被察觉。

保持隐藏

-T(0~5) 控制扫描速度
--max-hostgroup 可将扫描的主机数量限制在一次一个
--max-retries 在渗透测试中,可能不需要修改这个选项,除非对网络的稳定性非常了解。如果情况非常紧急并且不在乎扫描过程中可能错过一个包含潜在漏洞的主机,可以将这个选项值设置为0
--max-parallelism 10: 一次仅允许10个探测请求。使用这个选项控制一次探测的数量。
--scan-delay : 允许在两个探测之间的停顿

示例:

nmap -P0 -n -sS --max_hostgroup 1 --max_retries 0 --max_parallelism 10 192.168.50.0/24

子网192.168.50.X上有哪些主机在线。

SYN扫描

nmap -sS -T5 192.168.50.10

NULL扫描

nmap -sN -T5 192.168.50.10 

没看出来这个扫描有什么作用
ACK扫描

nmap -sA -T5 192.168.50.10

6. 让僵尸扫描

转嫁责任,会使用空闲扫描(idle scan),让一个僵尸主机承担扫描任务。
使用空闲扫描 -sI 时,必须找一台TCP Sequence Prediction成功率高的僵尸主机,该主机必须尽可能的空闲。业界经常推荐的网络打印机是很好的僵尸主机,因为它们不存在恒定的网络流量,而且预测它们的TCP序列难度很低。
找可能的僵尸主机

nmap -v -O -Pn -n 192.168.50.10

该命令获得TCP序列预测率(详细、操作系统检测、无ping、无域名解析)
要关注这里:

TCP Sequence Prediction: Difficulty=259(Good luck!)
预测的难度越高,一台主机用作僵尸主机的可能性就越小。还有,连续生成ID可能帮助我们增加扫描的成功率。

空闲扫描原理
1. 向僵尸主机发送SYN/ACK数据包,从而得到带有分片ID(IPID)的RST报文
2. 发送使用僵尸主机IP地址的伪造数据包给目标主机
3. 如果目标端口关闭,将会给僵尸主机响应RST报文。如果目标端口开放,目标主机将向僵尸主机响应SYN/ACK报文,僵尸主机发现这个非常的连接响应,因此向目标主机发送RST报文,这时IPID号开始增长。
4. 通过向僵尸主机发送另一个SYN/ACK以退出上述循环并检查僵尸主机RST报文中的IPID是否每次增长2,同时目标主机的RST每次增长1.
5. 重复以上步骤直到检测完主机的所有端口。

扫描命令

nmap -p 23,53,80,1780,5000 -Pn -sI 192.168.1.88 192.168.1.111

使用-p启动对已知TCP端口的扫描
-Pn强调不使用ping
-sI 启动空闲扫描,
192.168.1.88作为僵尸主机,
192.168.1.111 是目标主机。

使用wireshark抓包时可以看到192.168.1.88和192.168.1.111之间有一些奇怪的活动。

7. 规避IDS规则

以后再看。

8. 使用诱饵

nmap -D192.168.75.10,192.168.75.11,192.168.75.1,ME -p 80,21,22,25,443 -Pn 192.168.75.2

-D 实施一次诱饵扫描 后面是诱饵主机列表
-Pn 不使用ping
-p 端口范围

在目标主机的网络防火墙上,将会看到多台主机的连接记录。

9. 添加常用的Nmap脚本

Nmap的脚本在:

cd /usr/local/share/nmap/scripts
ls -lah

查看脚本帮助:

nmap --script-help banner.nse

在数据库中添加新脚本
1. 将script.nse脚本添加到其它的Nmap NSE脚本目录下
2. 通过下面命令更新数据库绑定的脚本:

nmap -script-updatedb

参考资料:
http://www.cnblogs.com/liun1994/p/6978285.html

BackTrack5 学习笔记5 扫描 Nmap相关推荐

  1. BackTrack5 学习笔记2 常用工具

    本系列文章来自<高度安全环境下的高级渗透测试>一书学习笔记. libreoffice 从官网下载.deb包安装 MagicTree 按Ctrl+N 在Tree View里选择127.0.1 ...

  2. 【安全牛学习笔记】扫描工具-Nikto

    ╋━━━━━━━╋ ┃实验环境      ┃ ┃Metasploitable┃ ┃    Dvwa      ┃ ╋━━━━━━━╋ Username admin password password ...

  3. OpenCV学习笔记之扫描图像

    一. 图像在内存中存储方式 图像矩阵的大小取决于我们所用的颜色模型,确切地说,取决于所用通道数.如果是灰度图像,矩阵就会像这样: 而对多通道图像来说,矩阵中的列会包含多个子列,其子列个数与通道数相等. ...

  4. OPENCV学习笔记2-5_扫描图像并访问相邻像素

    To illustrate this recipe, we will apply a processing function that sharpens an image(锐化图像的处理函数). Th ...

  5. BackTrack5 学习笔记三

    离线攻击MSF 1.        制造离线攻击脚本 先创建一个反向连接TCP客户端(相当于木马),然后把这个.exe文件通过垃圾邮件发送给别人./pentest/exploits/framework ...

  6. ifconfig没有命令 kali_kali学习笔记之——端口扫描工具

    之前的kali学习笔记分别介绍了kali的网卡问题和隐藏ssid的扫描 蟪蛄语春秋:kali学习笔记之--wi read():Network is down问题​zhuanlan.zhihu.com ...

  7. 【安全牛学习笔记】 端口扫描

    端口扫描 ╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋ ┃隐蔽端口扫描                                                    ┃ ...

  8. Zemax学习笔记(12)- 扫描系统实例

    Zemax学习笔记(12)- 扫描系统实例 1. 概述 2.设计过程 2.1 先设计一个单透镜代替整个扫描镜头组. 2.2 添加反射镜 2.3 多重结构下的扫描角度设置 3. 总结 1. 概述 在成像 ...

  9. ESP32学习笔记(27)——BLE GAP主机端扫描

    一.背景 1.1 低功耗蓝牙(BLE)协议栈 链路层(LL) 控制设备的射频状态,有五个设备状态:待机.广播.扫描.初始化和连接. 广播 为广播数据包,而 扫描 则是监听广播. GAP通信中角色,中心 ...

最新文章

  1. Redhat下的yum更改为Centos的免费yum源
  2. OS_CORE.C(11)
  3. 我参与阿里巴巴 ASoC-Seata 的一些感悟
  4. opera在我的博客发不了帖子,郁闷
  5. 从零开始学电脑办公_电脑办公从零开始
  6. 在护卫神上部署javaWeb项目,已经测试通过
  7. Entity Framework 6 Recipes 2nd Edition(13-2)译 - 用实体键获取一个单独的实体
  8. Android屏幕计算正方形,Android Camera 正方形预览(二)
  9. 【王道操作系统笔记】操作系统的运行机制和体系结构
  10. 第二章 tcp/ip
  11. 谨以此送给所有单身的MM
  12. ASP.NET自定义控件示例:ASP.NET Custom control with designer integration
  13. mysql 格式化_在线SQL代码格式化
  14. matlab画图实例_自定义函数
  15. 人工神经网络分析方法,神经网络数据分析步骤
  16. 微信小程序android和IOS拨打电话区别
  17. Android Studio 高德获取经纬度,定位
  18. xpath.extract() 的使用
  19. linux文件设置显示行号
  20. 【msvcp140.dll怎么下载】吃鸡msvcp140.dll丢失的解决方法

热门文章

  1. 云服务器搭建好,出现 拒绝了我们的连接请求。
  2. maven安装测试报JAVA_HOME路径安装错误
  3. 增删改查操作下锁的相关情况_查询时的锁分析
  4. ormlite android jar,android使用orm框架ormlite在控制台打印log日志信息
  5. php把buffer转化为图片_长微博生成(将html转化为图片)原理浅析
  6. 安装Ubuntu Linux操作系统
  7. JVM内存回收机制及回收器-一目了然
  8. SQL Server 非对称秘钥管理
  9. [雪峰磁针石博客]软件测试专家工具包1web测试
  10. 中国教育模式的颠覆者--兄弟会