7.kali主动信息收集

渗透第七章

Posted by Sprint#51264 on October 3, 2021

引言

根据苑房弘老师讲的安全牛KALI渗透过程总结

FANGHONG.YUAN@163.COM

主动信息收集

  • 原因

    通过被动信息收集能了解到公司大概的信息,而且大多信息都是”过时”的信息,不够准确不够真实,所以要用主动信息收集的方式来使信息更准确

  • 概念

    与目标系统交互通信,不可避免地留下访问痕迹

    为了降低被发现的可能性,我们需要使用受控的第三方电脑进行探测:代理-肉鸡

    • 方法

      或者使用噪声迷惑目标,淹没真实的探测流量(发送大量的垃圾流量,伪造大量虚假ip访问目标系统)

    • 扫描

      发送不同的探测,根据返回结果判断目标状态

信息收集-发现

  • 目的

    识别活主机,潜在被攻击目标

    输出一个IP地址列表

    2,3,4层发现

    • 层次

      主要指OSI七层模型

发现–二层发现(链路层ARP)

  • 内网发现

  • 优点

    扫描速度快、可靠

  • 缺点

    不可以路由,不可以发现路由之外的主机

二层发现—ARPPING(工具)

  • 概述

    不支持ping一个网段,只能单个,但是可以用脚本实现

  • 参数

    man arping查看详细解释

  • 流程

  • arping x.x.x.x#不停地发起ping arping x.x.x.x -c x#发送x个包到指定地址 arping 192.168.1.1 -d#发现重复IP的MAC地址,发现ARP欺骗行为,一个IP地址有两个响应包

    arping 1.1.1.1 -c 1|grep"bytes from"|cut -d" " -f 5|cut -d"(" -f 2|cut -d")" -f 1|ping一个包,匹配bytes from字段,然后我们只需要ip地址,所以使用分割命令,分别进行取第五列、第二列、第一列最终得到IP地址

  • 脚本

      #!/bin/bash
      interface=$1
      prefix=$(ifconfig $interface | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 |cut -d '.' -f 1-3)
      for addr in $(seq 1 254);do
    
          arping -c 1 $prefix.$addr |grep"bytes from"|cut -d" " -f 5|cut -d"(" -f 2|cut -d")" -f 1 >> addr.txt
    
      done
    
    
      file=$i 
      for addr in $(cat $file);do
          arping -c l $addr|grep "bytes from"|cut -d " " -f 5 |cut -d "(" -f 2 | cut -d ")" -f 1
      done 
    
    
    

二层发现—NMAP(工具简介)

  • 简介

    可以实现整个地址段的扫描。并且有很多强大的功能,甚至可以通过结合脚本实现漏洞扫描功能

  • 参数

    -sn #Ping Scan只做主机发现 -iL xx.txt -sn #通过文件导入要扫描的段

二层发现—Netdiscover(工具)

  • 简介

    专用于二层发现的工具,可用于无线和交换网络环境,并且用于主动和被动探测

  • 原理

    • 主动:

      发送arp包,判断响应

    • 被动:

      保持侦听模式,混杂网卡模式,记录听到的arp包

  • 用法

    netdiscover -i eth0 -r 192.168.1.0/24 netdiscover -l iplissst.txt#读列表 netdiscover -p #开启侦听模式

二层发现—Scapy(强大工具)

  • 简介

    • 可以作为python库文件被调用
    • 也可以直接作为工具使用
    • 抓包、分析、创建、修改、注入网络流量
  • 用法

      apt-get install python-gnuplot
      scapy#进入Scapy程序接口
      ARP().display()
      arp=ARP()       #创建一个新名字
      arp.display()
      arp.pdst="192.168.1.1"  #赋值
      sr1(arp)        #发送包
      answer=sr1(arp) #变量赋值
      answer.display()
    
  • 脚本

    
    

发现–三层发现(TCP/IP)

  • 优点

    • 可路由
    • 速度比较快
  • 缺点

    • 速度比二层慢
    • 经常被边界防火墙过滤
  • IP、ICMP协议

三层发现—Ping(命令)

  • 概述

  • 参数

    -c#指定ping包个数

  • 注意

    traceroute返回离请求主机比较近的接口的IP地址 ping -R 返回离请求主机比较远,离被请求主机较近的路由接口的IP地址

三层发现—Scapy(工具)

  • eg

    sr1(IP(dst=’192.168.1.1’)/ICMP())

三层发现—Nmap(工具)

  • 特征

    nmap除了icmp包还会发DNS包尝试解析域名查记录

三层发现—fping(工具)

  • 使用

    • fping 1.1.1.1 -c 1 • fping -g 1.1.1.1 1.1.1.2 • fping -g 1.1.1.0/24 • fping -f iplist.txt

三层发现—Hping(工具)

  • 特点

    能够发送几乎任意TCP/IP 功能强大但是每次只能扫描一个目标

  • 用法

    hping3 1.1.1.1 –icmp -c 2 for addr in $(seq 1 254); do hping3 1.1.1.$addr –icmp -c 1 » handle.txt & done

发现–四层发现()

  • 还是停留在检查IP是否在线功能,并没有进行端口识别的功能

  • 优点

    • 可路由且结果可靠
    • 不太可能被防火墙过滤
    • 甚至可以发现所有端口都被过滤的主机
  • 缺点

    • 基于状态过滤的防火墙可能过滤扫描
    • 全端口扫描速度慢
  • TCP

    • 未经请求的ACK会得到RST包回应(目标在线)
    • SYN————SYN/ACK、RST
  • UDP

    • ICMP端口不可达、一去不复返

四层发现—nmap(工具)

  • 用法

    • nmap 1.1.1.1-254 -PU53 -sn#UDP扫描,sn只主机发现不端口扫描
    • nmap 1.1.1.1-254 -PA80 -sn
    • nmap -iL xxx.txt -PA80 -sn
  • tips

    • 扫描方法

      -PU扫描两遍判断是否在线 -PA发送ACK包检测RST包检测是否在线

四层发现—hping(工具)

  • 用法

    • hping3 –udp 1.1.1.1 -c 1 ```s for addr in $(seq 1 254); do hping3 –udp 1.1.1.$addr -c 1 » r.txt; done

    grep Unreachable r.txt | cut -d “ “ -f 5 | cut -d “=” -f 2 ```

    • ./udp_hping.sh 1.1.1.0
    • hping3 1.1.1.1 -c 1 (TCP)
    • Hping3 1.1.1.1
    • ./TCP_hping.sh
    • Flag 0 —— ACK̵RST
  • 特点

    • 判断方法

      所有的标志位都是0,发送的包是FLAG 0,如果对应机器发送ACK,RST的话就判断是在线的

信息收集-端口扫描

  • 概述

    通过前一发现阶段已经找到活动主机,现在就针对活动主机进行进一步的更具体的端口扫描

  • 目的

    • 发现端口对应网络服务及应用端程序
    • 找到服务端程序的漏洞通过端口攻入
    • 发现开放的端口
    • 更具体的攻击面

端口扫描–UDP端口扫描

  • 方法

    向目标ID端口发送一个包,如果返回端口不可达证明端口没开

    因为是活着的主机,所以端口只有两种状态(开着、关闭)

    开放的端口会有回馈

  • 特点

    • 准确性高
    • 耗时巨大(其实TCP耗时更大)

UDP端口扫描—Scapy

  • 用法

      #!/usr/bin/python
      import logging
      logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
      from scapy.all import *
      import time
      import sys
    
      if len(sys.argv)!=4:
          print "Usage - ./udp scan.py [Target-IP] [First Port] [Last port]"
          sys.exit()
    
      ip=sys.argv[1]
      start=int(sys.argv[2])
      end=int(sys.argv[3])
    
      for port i range(start,end)
          a=sr1(IP(dst=ip)/UDP(dport=dport),timeout=5,verbose=0)
          time.sleep(1)#等待包发送完成
          if a ==None:
              print port#没收到响应证明开着
          else:
              pass#响应了代表不可达(发送了端口不可达消息),就pass掉
    
    
  • 示例

      chmod u+x syn_scan.py
      ./ udp_scan.py 192.168.1.1 1 100#扫描从1-100端口  
    

UDP端口扫描—Nmap

  • 简介

    Nmap默认扫描1000个端口 原理还是基于ICMP host-unreach信息(端口不可达)

  • 用法

      nmap 1.1.1.1 -sU -p 53
      nmap -iL iplist.txt -sU -p 1-200 #指定地址范围、端口范围
      nmap 1.1.1.1 -p-#一横杠代表所有端口
    

端口扫描–TCP端口扫描

  • 简介

    • 基于连接的协议扫描
    • 连接例子:三次握手
    • 隐蔽扫描:大流量连接会触发安全机制

      不建立完整连接->不产生应用层访问日志、只在网络层有迹象可循

    • 僵尸扫描:使用python脚本nmap实现,几乎不产生直接会话,就可以判断,极其隐蔽,但是前提苛刻,不适用于所有情况

    • 全连接:完成三次握手

    • 所有的TCP扫描都是基于三次握手的变化来判断目标端口的状态

TCP端口扫描—隐蔽扫描

  • 不建立完整连接

    SYN扫描:SYN-SYN/ACK-RST

    应用层无迹象,但是网络层有流量

Scapy实现

  • 演示
```s
scapy>>
a=sr1(IP(dst="192.168.197.142")/TCP(flags="S"),timeout=1,verbose=0)#向目标主机发送一个SYN包并赋值给1

#一共返回三个包,第一个是SYN,第二个是收到的SYN/ACK,第三个是操作系统不知道scapy发送包收到一个没来由的包,自动发送RST包

```
  • 脚本

      #!/usr/bin/python
      import logging
      logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
      from scapy.all import *
      import time
      import sys
    
      if len(sys.argv)!=4:
          print "Usage - ./udp scan.py [Target-IP] [First Port] [Last port]"
          print "Example - ./syn_scan.py 10.0.0.5 1 100"
          print "Example will TCP SYN scan ports 1 through 100 on 10.0.0.5"
          sys.exit()
    
      ip=sys.argv[1]
      start=int(sys.argv[2])
      end=int(sys.argv[3])
    
      for port in range(start,end):
          a=sr1(IP(dst=ip)/TCP(dport=port),timeout=1,verbose=0)
          if a== None:
              pass
          else:
              if int(a[TCP].flags)==18:#ACK+SYN符号位(查看数据包中符号位Flags 0 2 4 8 16就可以知道)二进制等于18,就是返回SYN+ACK
                  print port
              else:
                  pass
    
    

    chmod u+x syn_scan.py

    遇到的小问题

    • from scapy.all import *报错,重新用pip或者pip3导入一下scapy
    • Defaulting to user installation because normal site-packages is not writeable
      [参见](https://blog.csdn.net/sandalphon4869/article/details/107693774)
    
      pip install xxx
      pip3 install xxx
        
      改成⬇
    
      python -m pip install xxx
      python3 -m pip install xxx
    

nmap 实现

  • 用法
```s
namp -sS 1.1.1.1 -p 80,21,25,110,443
nmap -sS 1.1.1.1 -p 1-65535 --open
nmap -sS 1.1.1.1 -p- --open
nmap -sS -iL iplist.txt -p 80,21,22,23
#-sS就是SYN扫描
```

hping 实现

  • 用法

      hping3 1.1.1.1 --scan 80 -S
      hping3 1.1.1.1 --scan 80,21,25,443 -S
      hping3 1.1.1.1 --scan 0-65535 -S
      hping3 -c 10 -S --spoof 1.1.1.2 -p ++1 1.1.1.3#地址欺骗,每次端口号每次加一,扫描十个端口
    
    

TCP端口扫描—僵尸扫描

  • 极度隐蔽

  • 实施条件苛刻

    • 源地址伪造

      扫描发起方和被扫描方的地址必须是可以伪造的 (现在互联网环境源地址伪造很难)

    • 必须要有僵尸机

      僵尸机:在互联网中闲置,IPID必须是递增的,不可以是随机IPID, (就是说接收到IP包之后回应的时候IPID的值是递增的,不是随便给一个值)

      IPID:流量包中IP头中的ID字段(Identification)

    • 必须足够闲置

      有一点ARP等低层的数据可以,但是不能有其他连接导致IPID发生改变

  • 实现过程

    目标端口开放

    • 发一个SYN/ACK给僵尸机,僵尸机返回一个RST包(IPID=X)
    • 扫描者向一个服务器发送一个SYN包(IP.SRC=Zombie)
    • 僵尸机收到服务器返回的一个SYN/ACK
    • 僵尸机返回服务器一个RST(IPID=X+1)#因为这是闲置僵尸机收到的第二个包

    • 扫描者再向僵尸机发送一个SYN/ACK,僵尸机返回RST包(IPID=X+2)

    • 此时就可以做出判断,对应端口是开放的,因为这是僵尸机返回的第三个包

    目标端口不开放

    • 伪造IP发送SYN之后,服务器返回僵尸机一个RST包
    • 僵尸机收到RST无动作
    • 这时候如果攻击者再向僵尸机发送一个SYN/ACK,僵尸机返回的RST就会是(IPID=X+1)
  • 实现脚本

    Scapy实现

      #Scapy--zombie.py
      i=IP()
      t=TCP()
      rz=(i/t)#僵尸机包
      rt=(i/t)#服务器包
      rz[IP].dst=IPz#僵尸机地址
      rz[TCP].dport=445
      rz[TCP].flags="SA"#将返回RST
      rt[IP].src=IPz#地址伪造
      rt[IP].dst=IPt
      rt[TCP].flags="S"#将向僵尸机发SA,僵尸机返回RST
      rt[TCP].dport=22
      az1=sr1(rz) && at=sr1(rt) && az2=sr1(rz)
      az1.display() | az2.display()
    
      #!/usr/bin/pythonn
      import logging
      logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
      from scapy.all import *
    
      def ipid(zombie):
          replay1=sr1(IP(dst=zombie)/TCP(flags="SA"),timeout=2,verbose=0)
          send(IP(dst=zombie)/TCP(flags="SA"),verbose=0)
          replay2=sr1(IP(dt=zombie)/TCP(flags="SA"),timeout=2,verbose=0)
          if replay2[IP].id==(replay1[IP].id+2):
              print "IPID sequence is incremental and target appears to be idle.ZOMBIE LOCATED"
              response=raw_input("Do you want to use this zombie to perfore a scan?(Y or N):")
              if response=="Y":
                  target=raw_input("Enterr the IP address of the target system:")
                  zombiescan(target.zombie)
          else:
              print "Either the IPID sequence is not incremental or the target is not idle.NOT A GOOD ZOMBIE"
        
      def zombiescan(target,zombie):
          print "\nScanning target"+target+"with  zombie"+zombie
          print"\n---------openn ports on target--------\n"
          for port in range(1,100):
              try:
                  start_val=sr1(IP(dst=zombie)/TCP(flags="SA",dport=port),timeout=2,verbose=0)
                  send(IP(src=zombie,dst=target)/TCP(flags="S",dport=port),verbose=0)
                  end_val=sr1(IP(dst=zombie)/TCP(flags="SA",dport=port),timeout=2,verbose=0)
                  if end_val[IP].id==(start_val[IP].id+2):
                      print port
              except:
                  pass
    
      print "------Zombie Scan Suite-------\n"
      print"1- Identify Zomie Host\n"
      print"2- Perform Zombie Scan\n"
      ans=raw_input("Select an Option(1 or 2):")
      if ans =="1":
          zomie=raw_input("Enter IP address to test IPID sequence:")
          ipid(zombie)
      else:
          if ans=="2":
              zombie=raw_input("Enter IP address for zombie system:")
              target=raw_input("Enter IP address for scan target:")
              zombiescan(target,zombie) 
    

nmap 实现

  • 发现僵尸机

    nmap -p445 192.168.197.142 --script=ipidseq.nse#nmap里面有很多脚本可以用

  • 扫描目标

    nmap 192.168.197.142 -sI 192.168.197.132 -Pn -p 0-100

TCP端口扫描—全连接端口扫描

  • 简介

    • 非常规扫描方式,只是在特殊情才会使用,因为不隐蔽

    • Syn扫描不需要 raw packages
    • 但是实现有一个小问题,内核认为syn/ack是异常包,会直接发RST终止,导致连接不能建立。

Scapy实现

  • 脚本
```python
#!/usr/bin/python
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
import time
import sys


SYN=IP(dst="192.168.197.142")/TCP(dport=25,flags="S")

print "--SENT--"
SYN.display()

print "\n\n--RECIVED--"
response=sr1(SYN,timeout=1,verbose=0)
response.display()

if int(response[TCP].flags)==18:
    print"\n\n--SENT--"
    A=IP(dst=192.168.197.142)/TCP(dport=25,flags="A",ack=(response[TCP].seq+1))
    A.display()
    print"\n\n--RECIVED--"
    response2=sr1(A,timeout=1,verbose=0)
    response2.display()
else
    print"SYN-ACK not returned"

```
  • 解决问题方法

    • iptables

      iptables在内核之前,所有的包经过iptables检测,所以我们现在设置让其对收到指定IP发送的包后对发出的RST包进行DROP

      iptables -A OUTPUT -p tcp --tcp- flags RST RST -d 192.168.197.142 -j DROP iptables -L查看规则

namp 实现

  • 简介

    -sT就是TCP全连接方式 比隐蔽方式慢于SYN扫描

  • 用法

      nmap -sT 1.1.1.1 -p 80
      nmap -sT 1.1.1.1 -p 80 
      nmap -sT 1.1.1.1 -p 80,21,25 
      nmap -sT 1.1.1.1 -p 80-2000
      nmap -sT -iL iplist.txt -p 80 
      #默认1000个常用端口
    

    其他方法实现

  • dmitry

    • 简介

      -h 功能简单,但使用简便,参数很少 默认150个最常用端口

    • 用法

      dmitry -p 192.168.197.142 dmitry -p 192.168.197.142 -o output

  • nc

    • 简介

      nc -z实现扫描功能

    • 用法

      nc -nv -w 1 -z 192.168.197.142 1-100

        #-v表示详细内容
        #-n表示后面跟数字,不做域名解析
        #-w表示超时1s pass
        #端口号
      
        for x in $(seq 20 30); do nc -nv -w 1 -z 1.1.1.1 $x;done|grep open
      
        for x in $(seq 1 254); do nc -nv -w 1 -z 1.1.1.$x 80; done
      
      

信息收集-服务扫描

  • 简介

    • 识别开放端口上运行的应用

      之前的发现技术可以扫描到有哪些主机活跃,开放了哪些端口,但是不能通过端口号识别其后开放的应用,因为应用可以开放在不同平常的端口

    • 识别目标操作系统

      操作系统的漏洞

  • 方向

    • banner捕获

      但是banner很可能是伪造的用来迷惑攻击者的,通常有改banner的要求

    • 服务识别

      通过应用指纹信息识别

    • 操作系统识别
    • SNMP

      SNMP服务配置不当

    • 防火墙识别

      识别边界防火墙,有利于绕过

服务扫描–BANNER捕获

  • BANNER信息

    • 软件开发商

      apache、microsoft

    • 软件名称
    • 服务类型
    • 版本号

      直接发现已知漏洞和弱点

    • 连接建立之后直接获取banner
    • 另类服务识别方法

      特征行为和响应字段 不同的响应可用于识别底层操作系统

  • SNMP

    • 简单网络管理协议
    • community string

      默认密码、默认认证信息

    • 信息查询或者重新配置

      知道可读可写密码之后就可以查交换机配置,有写权限可以对交换机配置进行修改

  • 识别和绕过防火墙筛选

banner捕获—nc

  • nc

      nc -nv 192.168.197.142 25#连接对应端口获取信息,连接成功就会显示
      nc -nv 192.168.197.142 80
    

banner捕获—python

  • python

    python socket ```python import socket bangrab=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#TCP连接 bangrab.connect(“192.168.197.142”,21) bangrab.recv(4096)#接收数据大小 bangrab.close() exit() #如果BANNER不允许抓取,recv函数无返回将挂起

      >python脚本2
      ```python
      #!/usr/bin/python
      import socket
      import select
      import sys
    
      if len(sys.argv)!=4:
          print"Usage - ./banner_grab.py [target IP] [First port] [Last port]"
          sys.exit()
    
      ip=sys.argv[1]
      start=int(sys.argv[2])
      end=int(sys.argv[3])
    
      for port in range(start,end):
          try:
              bangrab=socket.socket(socket.AF_INET,socket.SOCKET_STREAM)
              bangrab.connect(ip.port)
              ready=select.select([bangrab],[],[],1)
              if ready[0]:#表示没有被挂起
                  print "TCP Port"+str(port)+"-"bangrab.recv(4096)
                  bangrab.close()
          except:
              pass
    

banner捕获—dimitry

  • dmitry

    dimitry -p 192.168.197.142 dimitry -pb 192.168.197.142

banner捕获—nmap

  • nmap

    nmap -sT 192.168.197.142 -p 22 --script=banner.nse

banner捕获—amap

  • 简介

    专门开发用来发现服务的工具,-B参数就是用banner方式发现

  • amap

      amap -B 192.168.197.142 21
      amap -B 192.168.197.142 1-65535
      amap -B 192.168.197.142 1-65535 |grep on#寻找开放的
    
    

服务扫描–服务识别

  • 简介

    用banner信息抓取能力有限,并且不准确

服务识别—工具

———–nmap————-

  • 原理
根据*特征*进行分析,根据相应特征signature
  • 实现

      nmap 192.168.197.142 -p 1-100 -sV
    

———–nc—————

  • 实现

      nc -nv 192.168.197.142 80
    

———-amap———–

  • 实现

      amap 192.168.197.142 80
      amap 192.168.197.142 20-30
      amap 192.168.197.142 20-30 -q
      amap 192.168.197.142 20-30 -qb
    

信息收集-操作系统识别

  • 简介

    操作系统识别技术种类繁多,要采用多种技术产品组合

    识别操作系统有利于直接使用操作系统漏洞攻击

  • TTL起始值

    windows:128(65-128) linux/unix:64(1-64) 某些Unix:255

  • 被动操作系统识别

    向被扫者发包,抓包结合特征分析 基于网络监听

操作系统识别—工具

  • python

      from scapy.all import *
      win="win.ip"
      linu="linux.ip"
      aw=sr1(IP(dst=win)/ICMP())
      al=sr1(IP(dst=linu)/ICMP())
      if al[IP].ttl<=64:
          print "host is linux"
      else:
          print "host is linux"
    
    
  • nmap

      nmap 192.168.197.142 -O#OS识别
    
  • xprobe2

      xprobe 192.168.197.142
    

    但是xprobe结果有误差,不精准

  • p0f被动式扫描

部署在网络出口处,持续监听

* 结合ARP地址欺骗识别全网OS

信息收集-SNMP扫描

  • 简介

    UDP端口 161(被管理端)(服务端) 162(客户端)

    SNMP–简单网络管理协议,当网络初具规模,使用人工方法检测耗时耗力,所以采用SNMP对网络进行统一管理,通过SNMP可以监控交换机、服务器、了解网络情况、网络通信情况

    经常被错误配置

    有一串community特征字符,相当于密码public / private / manager

    明文传输

  • MIB Tree

    SNMP Management Information Base(MIB)

    被检测内容都有自己的编号,通过编号查找对应运行情况

    有必须遵守的MIB库,也有厂家自己加的MIB库

SNMP扫描—工具

  • onesixtyone(161)

    名字用的就是其端口161

    • 用法

        onesixtyone 1.1.1.1 public 
        onesixtyone -c dict.txt -i hosts -o my.log -w 100
      
    • tips

      dpkg -L onsixtyone#查看软件包内容

  • snmpwalk

    • 更加全面

    • 用法

        snmpwalk 192.168.197.142 -c public -v 2c 1.1.1.1 1.3.6.1.4.1.77.1.2.25#-v是版本 1 2c 3
        如果知道具体OID就输入上面查当前系统账号
      
        查出来的结果开头都是各项信息的OID
      
  • snmpcheck

    • 简介

      可读性更好

    • 用法

        snmpcheck -t 192.168.197.142
        snmpcheck -t 192.168.197.142 -c private -v 2 
        snmpcheck -t 192.168.197.142 -w#检测可写权限
      

信息收集-SMB扫描

  • 简介

    Server Message Block协议(服务信息块)

    • 是微软历史上出现安全问题最多的最最常用的协议

    • 该服务默认开放

    • 实现文件共享

    • 空会话未身份认证访问(SMB1)

      无需账号密码直接登录,获取SID

SMB扫描–工具

  • nmap

    https://www.cnblogs.com/demonxian3/p/8528050.html smb-vuln-check.nse已经被取消换成了六个不同种类的漏洞验证脚本,如果不确定执行哪一个可以使用smb-vuln-*.nse

      nmap -v -p139,445 192.168.60.1-20 
      nmap 192.168.60.4 -p139,445 --script=smb-os-discovery.nse
      nmap -v -p139,445 --script=smb-check-vulns --scripart-gs=unsafe=1 1.1.1.1#向脚本传输参数,可能会造成破坏,但是更加精准
    
    • 脚本介绍

      脚本里面都有脚本内容的说明与解释,如果不知道脚本作用以及如何使用,可以直接打开脚本查看其内容

  • nbtscan

      nbtscan -r 192.168.197.0/24
    
    • 优点

      能扫到另外网段的机器,防火墙过滤不严格能跨网段扫描,正常的arp到路由会被丢弃

  • enum4linux

      enum4linux -a 192.168.197.142
    
    • 特点

      不支持大网段扫描,但是对单个机器进行扫描非常精准

信息收集-SMTP扫描

  • 简介

    主要用来发现目标系统的邮箱账号,对邮件服务器发现账号

    账号用途主要就是社会工程学

    一旦邮件服务器被攻陷,将被利用给其他人发送大量的垃圾邮件钓鱼邮件

  • 使用

    VRFY root

      nmap smtp.163.com -p25 --script=smtp-enum-users.nse --script-args=smtp-enumusers.methods={VRFY}#对25端口检测    查root账户
    
      nmap smtp.163.com -p25 --script=smtp-open-relay.nse#一旦打开openrelay服务,将被利用给其他人发送大量的垃圾邮件钓鱼邮件
    
      smtp-user-enum -M VRFY -U users.txt -t 10.0.0.1#指定对应的账号进行查找
    
  • 脚本

      #!/usr/bin/python
    
      import socket
      import sys
    
      if len(sys.argv)!=2:
          print"Usage:smtp.py <username>"
          sys.exit(0)
    
      s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
      connect=s.connect(('开放25的目标机器',25))
      banner=s.recv(1024)
      print banner+"aaaaaa"
      s.send('VRFY'+sys.argv[1]+'\r\n')
      result=s.recv(1024)
      print result
      s.close()
    
    

信息收集-防火墙识别

  • 简介

    网络边界一般都有防火墙,要对防火墙进行识别其过滤端口,防火墙只允许向外连接不允许向内连接

  • 四种防火墙规则

      Send Response Type
    1 SYN NO Filtered
      ACK RST Filtered
    2 SYN SYN+ACK/SYN+RST Filtered
      ACK NO Filtered
    3 SYN SYN+ACK/SYN+RST Unfiltered/Open
      ACK RST Unfiltered/Open
    4 SYN NO CLOSED
      ACK NO CLOSED
  • 识别

    nmap -sA 192.168.197.142#发syn ack

信息收集-负载均衡识别

  • 简介

    • 广域网负载均衡

      DNS,一个域名对应多个IP

    • HTTP-Loadbalacing(服务器负载均衡)

      Nginx
      Apache

  • 工具

    lbd(load balace detect)#负载均衡检测

      lbd www.baidu.com
    

信息收集-WAF识别

  • WEB应用防火墙

    主要是防护WEB层攻击

  • 工具

    wafw00f

      wafw00f -l#查看能识别的WAF
      wafw00f http://www.microsoft.com
    

    nmap

      nmap www.microsoft.com --script=http-waf-detect.nse
    
    

NMAP详解

目标发现

  • -iL

    把所有目标地址存成一个文件,然后使用这个文本进行目标确定扫描

  • -iR

    无需指定目标,nmap会根据参数后跟的主机数随机扫描主机

      nmap -iR 100 -p 22#随即扫100个地址的22端口
    
  • –exclude

    一个段中的一些ip地址不想扫,用这个参数排除

      namp 192.168.197.0/24 --exclude 192.168.197.1-100#扫除了地址为1-100的该网段地址
    
  • –excludefile

    把要排除的地址写一个文件,然后直接–excludefile xxx.txt排除

主机发现

  • -sL

    不做扫描,只是列出地址段,让你检查是否是这些目标

  • -sn

    不做端口扫描

  • -Pn

    有些目标机器会丢包或者拒绝,默认扫描可能视为down,这个参数会将所有该扫的都扫,最后判断是否是目标

  • -PS/PA/PU/PY[portlist]

    PS/PA—TCP SYN/ACK PU—UDP PY—SCTP

  • -PE/PP/PM

    ICMP timestamp 时间戳 netmask 查子网掩码

  • -PO

    IP 协议ping扫描

  • -n/-R

    不做DNS解析/做反向解析

  • –dns-servers

    扫描的时候调用一个DNS扫描目标,因为目标网站可能有智能DNS,加这个参数调用其他dns扫描

  • –dns-system

    用本地机器的dns

  • –traceroute

    返回路径上路由

      nmap www.baidu.com --traceroute -p 80
    

端口发现(Scan techniques)

  • -sS/sT/sA/sW/sM

    SYN扫描/完整TCP扫描/ACK扫描/TCP窗口扫描/Maimon 扫描(ACK+Finish:17)

    不同的flag组合扫描

  • -sU

    UDP扫描

  • -sN/sF/sX

    TCP flag标志位全空/flag FIN/Xmas scans

    Xmas(FIN+PUSH+URG)

  • –scanflags

    自定义标志位发送,必须是能知道

  • -sI

    僵尸扫描

  • -sY/sZ

    SCTP协议扫描

  • -sO

    IP扫描

  • -b

    FTP中继扫描

PORT SPECIFICATION AND SCAN ORDER

指定扫描端口

  • -p

    -p U:53 192.168.197.142UDP扫描端口

    -p T:80 192.168.197.142TCP端口扫描

    –exclude 排除某些端口

  • -F

    快速模式,扫少数端口,默认模式100个,快速模式少于1000个

  • -r

    按顺序扫描端口,默认情况是随机扫描的

  • –top-ports [number]

    扫最常用的n个端口

  • –port-ratio

    扫使用率大于ratio的端口

服务侦测

  • -sV

    • –version-intensity <0-9>

      扫描深入程度,数字越大越深,0–light,9–all ports

    • –version-light

      轻量级扫描,相当于上面的2等级

    • –version-all

      相当于9等级

    • –version-trace

      跟踪扫描过程

脚本扫描

  • -sC(相当于–script)

  • –script=

    选择脚本

  • –script-args=<n1=v1,[n2,n3,…]>

    向脚本提供参数

  • –script-args-file=filname

    从一个文件读取NSE脚本参数

  • –script-trace

    显示脚本发送的数据和收到的数据

  • –script-updatedb

    更新脚本库

  • –script-help=

    查看脚本使用方法

      /usr/share/nmap/scripts/#脚本存放目录
    

系统识别

  • -O

    • –osscan-limit

      限制OS检测

    • –osscan-guess

      更进一步猜测是什么操作系统

时间性能和特征

扫描时间过快或者有特征会暴露

  • -T<0-5>

    • –min-hostgroup/max-hostgroup

      最小或者最大扫描并行组,同时扫多少机器

    • –min-parallelism/max-parallelism

      探针?

    • –min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout

      最大,最小,初始rtt时间,每一轮发送的响应时间值(从开始到收到response)

    • –max-retries

      最大探测次数

    • –host-timeout

      目标主机超时时间

    • –scan-delay/–max-scan-delay

      每次探测间隔多少

    • –min-rate

      每秒探测最小多少

    • –max-rate

      每秒探测最大多少

防火墙和IDS躲避与欺骗

  • -f

    • –mtu

      设置最大传输单元

  • -D <decpy1,…>

    伪造源地址,增加噪声地址,混杂数据

      nmap -D 192.168.1.11,192.168.1.12,192.168.1.141 192.168.197.142#用三个地址向142地址发数据包
    
  • -S

    欺骗源地址

      nmap -S 192.168.197.11 -e eth0 192.168.197.142#伪造源地址扫描
    
  • -e

    指定网卡

  • -g/–source-port

    指定发包源端口

      nmap -g 10000 192.168.197.142#用10000端口发包
    
  • –proxies <url1,url2,…>

    支持代理,指定代理服务器,用它进行扫描

  • –data

    通常扫描data无数据,用该参数给数据字段加十六进制内容

    nmap -p 22 192.168.197.142 --data=FFFFFF

  • –data-string

    data加ascii码

  • –data-length

    在数据字段加指定字长的随机内容

  • –ip-options

    自定义数据包头内容

  • –ttl

    设定ttl值

  • –spoof-mac <mac address/prefix/vendor name>

    欺骗mac地址

  • –badsum

    差错校验(checksum)值造成错误的,通过不同设备处理badchecksum方法不同来欺骗防火墙和IDS达到放过目的

杂项

  • -6

    扫IPv6地址

  • -A

    代表OS detection(操作系统识别)、version detection(版本识别)、script scanning、traceroute参数的组合,直接全包含