网络安全(三)-- 网络嗅探及协议分析技术

  • 目标
    • 了解网络嗅探的基本含义
    • 了解tcpdump工具的基本用法
    • 掌握tcpdump工具抓包保存到文件的方法
    • 熟悉wireshark工具的基本用法
    • 掌握借助wireshark抓包工具分析简单网络协议的方法

6.1. 概述

网络嗅探是一种常用的数据收集、分析的方法:

黑客常通过网络嗅探获取主机或网络的控制权,安全人员亦使用网络嗅探进行信息泄露和攻击行为分析。

嗅探所得数据,可以是用户的账号和密码,也可以是一些商用机密数据。

常用的工具包括tcpdump(命令行)、wireshark(图形界面)

6.2. Tcpdump嗅探器

tcpdump是一个用于捕获网络报文,并输出报文内容的工具。

tcpdump 是一款功能强大的命令行嗅探(抓包)工具。

Tcpdump项目官网, 该项目除提供tcpdump工具外,还提供了一个用于网络流量捕获的c/c++库(可移植), 可用于网络协议分析领域的二次开发。

tcpdump在windows的版本叫WinDUMP,

6.2.1. 牛刀小试

  • 基本用法
itcast@itcast $ sudo tcpdump  -i wlp2s0

-i wlp2s0 , -i选项用来指定网络接口设备,wlp2s0 为我网络设备名称,你的电脑可能为eth0

-v-vv, 选项用来显示更详细(繁琐)的输出

tcpdump的总的输出格式:系统时间 协议 源主机.端口 > 目标主机.端口 数据包参数

  • 典型用法

    tcpdump作为命令行抓包神器, 一般抓包保存,借助wireshark图形化协议分析工具进行分析网络包。

    -w filename , 用于指定保存的文件

itcast@itcast $ sudo tcpdump  -i wlp2s0   -w wlp2s0_2018.pcap
tcpdump: listening on wlp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes

添加 -v, 会显示抓取到的包数量,如下

itcast@itcast $ sudo tcpdump  -i wlp2s0  -v -w wlp2s0_2018.pcap
tcpdump: listening on wlp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes
Got 15
  • 帮助信息

    man信息

itcast@itcast $ man tcpdump

-h 选项,显示帮助信息

itcast@itcast $ sudo tcpdump -h
tcpdump version 4.9.2
libpcap version 1.8.1
OpenSSL 1.0.2l  25 May 2017
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
        [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
        [ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
        [ -Q in|out|inout ]
        [ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
        [ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
        [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
        [ -Z user ] [ expression ]

6.2.2. 高级过滤技巧

tcpdump作为一个命令行工具,可以包含过滤表达式( filter expression),满足表达式的报文将会被捕获。 如没有给过滤表达式,则网络上所有的信息包将会被捕获。

  • 捕获特定主机的网络包(src, dst)host
itcast@itcast $ sudo tcpdump -i wlp2s0 host 61.135.169.121

host 61.135.169.121 获取源ip或者目标ip为61.135.169.121的网络数据包

  • 捕获特定源IP的网络包 src
itcast@itcast $ sudo tcpdump -i wlp2s0 src 61.135.169.121
11:32:09.605183 IP 61.135.169.121.https > localhost.46000: Flags [.], ack 518, win 808, length 0
。。。
  • 捕获特定目标IP的网络包 dst
itcast@itcast $ sudo tcpdump -i wlp2s0 dst  61.135.169.121 

11:33:31.977839 IP localhost.46010 > 61.135.169.121.https: Flags [.], ack 3076821759, win 237, length 0
11:33:31.977858 IP localhost.46004 > 61.135.169.121.https: Flags [.], ack 4115011400, win 237, length 0
。。。
  • 捕获特定端口的网络包 port
itcast@itcast $ sudo tcpdump -i wlp2s0 port 80
  • 捕获特定协议的网络包 tcp/arp/udp/...
itcast@itcast $ sudo tcpdump -i wlp2s0  host 172.16.28.100 and tcp
itcast@itcast $ sudo tcpdump -i wlp2s0  arp
  • 帮助信息
itcast@itcast $ man pcap-filter

补充: 三种逻辑运算: 取非运算( ‘not ' or '! ‘)、 与运算(’and’ or,’&&')、 或运算(’or’ or ‘||’)

6.2.3. 附录

Panda.Guo@2018-04-27 16:15:09 $ man tcpdump
-A 以ASCII格式打印出所有分组,并将链路层的头最小化。
-c 在收到指定的数量的分组后,tcpdump就会停止。
-C 在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size 中指定的大小。
    如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。
    参数 file_size 的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。

-d 将匹配信息包的代码以人们能够理解的汇编格式给出。
-dd 将匹配信息包的代码以c语言程序段的格式给出。
-ddd 将匹配信息包的代码以十进制的形式给出。
-D 打印出系统中所有可以用tcpdump截包的网络接口。
-e 在输出行打印出数据链路层的头部信息。
-E 用spi@ipaddr algo:secret解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组。
-f 将外部的Internet地址以数字的形式打印出来。
-F 从指定的文件中读取表达式,忽略命令行中给出的表达式。
-i 指定监听的网络接口。
-l 使标准输出变为缓冲行形式,可以把数据导出到文件。
-L 列出网络接口的已知数据链路。
-m 从文件module中导入SMI MIB模块定义。该参数可以被使用多次,以导入多个MIB模块。
-M 如果tcp报文中存在TCP-MD5选项,则需要用secret作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385)。
-b 在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。
-n 不把网络地址转换成名字。
-nn 不进行端口名称的转换。
-N 不输出主机名中的域名部分。例如,‘nic.ddn.mil‘只输出’nic‘。
-t 在输出的每一行不打印时间戳。
-O 不运行分组分组匹配(packet-matching)代码优化程序。
-P 不将网络接口设置成混杂模式。
-q 快速输出。只输出较少的协议信息。
-r 从指定的文件中读取包(这些包一般通过-w选项产生)。
-S 将tcp的序列号以绝对值形式输出,而不是相对值。
-s 从每个分组中读取最开始的snaplen个字节,而不是默认的68个字节。
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc远程过程调用)和snmp(简单网络管理协议;)。
-t 不在每一行中输出时间戳。
-tt 在每一行中输出非格式化的时间戳。
-ttt 输出本行和前面一行之间的时间差。
-tttt 在每一行中输出由date处理的默认格式的时间戳。
-u 输出未解码的NFS句柄。
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。
-vv 输出详细的报文信息。
-w 直接将分组写入文件中,而不是不分析并打印出来。

6.3. Wireshark 网络协议分析工具

Wireshark(前身Ethereal)是一个网络报文分析工具。 网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。 2006年6月,因为商标的问题,Ethereal更名为Wireshark。

wireshark 官网

6.3.1. 基本用法

按照国际惯例,从最基本的程序启动说起。

开启抓包

启动wireshark程序后, 在在接口列表中选择接口名称(见下图中标识1),然后点击“开始捕获分组”(见下图标识2)在此接口上抓包。 本例选取enp8s0, 具体因电脑网卡不同而异, 关于enp8s0的含义,后续我写一篇网文做一正式说明。

报文捕获窗口

选取接口名称并点击开始捕获之后,就可以看到实时接收的报文。Wireshark会捕捉系统发送和接收的每一个报文。如果抓取的接口是无线并且选项选取的是混合模式,那么也会看到网络上其他报文。

接下来再界面我们可以看到wireshark抓到的实时数据包。我们对数据包的各个字段进行解释。

  • No:代表数据包标号。
  • Time:在软件启动的多长时间内抓到。
  • Source:来源ip。
  • Destination: 目的ip。
  • Protocol:协议。
  • Length:数据包长度。
  • info:数据包信息。

在上面wireshark抓包窗口中,可以简单分割成三个小窗口,上部窗口每一行对应一个网络报文,点击某一行可以在下面两个窗口看到更多信息。中间窗口描述的是报文里面每一层的详细信息。底 部窗口以十六进制和ASCII码的方式列出报文内容。

停止抓包

在抓包过程中,我们随时可以点击图标停止或启动。来停止或者启动抓取数据包。 

在上图中,标识2的地方, 为停止抓取数据包, 标识3的地方,为再次启动抓取数据包。

6.3.2. 报文过滤及分析

报文过滤,是wireshark出彩的地方,也是网络协议的分析的重要工作步骤

在下图方框中,输入相应的源ip、目的ip、协议等等表达式,点击箭头部分,在窗口中即可显示过滤后的数据包。

  • 典型IP地址过滤表达式

    • ip.src==172.16.28.102 : 指定源IP
    • ip.dst==192.168.0.111 : 指定目标IP
    • ip.addr == 192.0.2.1 : 指定IP,(不区分源和目标IP)
    • ip.src==192.168.43.167 and ip.dst==223.166.152.109 : 指定源ip 并且目标IP
    • ip.src==192.168.43.167 or ip.dst==223.166.152.109 : 指定源ip 或者目标IP
  • 典型端口过滤表达式

    • tcp.port ==52304
    • tcp.dstport==30
    • tcp.srcport==52304
    • udp.....
  • 典型网络协议过滤表达式

    • telnet
    • tcp
    • udp
    • 。。。。

6.3.3. 网络嗅探实战

  • 目标: 通过抓取telnet网络报文, 分析并获取用户登录口令

    telnet 登录典型命令telnet 目标主机ip -l 用户名 , 在Password后输入口令,

itcast@itcast $ telnet 127.0.0.1 -l itcast
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Password: 
---> 输入口令

Last login: Thu Sep  6 18:19:01 CST 2018 from localhost on pts/1
。。。。。。
  • 补充

    安装telnet和telnetd服务

itcast@itcast $ sudo apt-get install telnet telnetd

6.3.4. 补充: 普通用户抓包配置

  • 添加wireshark用户组。
Panda.Guo@2018-04-27 10:08:46 $  groupadd wireshark
Panda.Guo@2018-04-27 10:07:30 $ sudo cat /etc/group | grep "wireshark"
wireshark:x:128
  • 添加当前用户(我的为panda,具体根据情况决定)到wireshark组
Panda.Guo@2018-04-27 10:12:23 $ sudo usermod -aG wireshark panda
Panda.Guo@2018-04-27 10:13:05 $ sudo cat /etc/group | grep "wireshark"
wireshark:x:128:panda
  • 将dumpcap更改为wireshark用户组
Panda.Guo@2018-04-27 10:16:08 $ ls -l /usr/bin/dumpcap 
-rwxr-xr-- 1 root root  96464 Jan 23 01:03 /usr/bin/dumpcap
Panda.Guo@2018-04-27 10:15:00 $ sudo chmod  root:wireshark /usr/bin/dumpcap
Panda.Guo@2018-04-27 10:16:23 $ ls -l /usr/bin/dumpcap 
-rwxr-xr-- 1 root wireshark 96464 Jan 23 01:03 /usr/bin/dumpcap
  • 设置 setuid (root), 使普通用户执行具备root用户权限,或者添加能力

方法一:setuid root

Panda.Guo@2018-04-27 10:19:16 $ sudo chmod 4754 /usr/bin/dumpcap
Panda.Guo@2018-04-27 10:19:34ls -l /usr/bin/dumpcap 
-rwsr-xr-- 1 root wireshark 96464 Jan 23 01:03 /usr/bin/dumpcap

方法二:添加能力

Panda.Guo@2018-04-27 10:20:39 $ sudo setcap  "cap_net_admin,cap_net_raw+eip" /usr/bin/dumpcap
Panda.Guo@2018-04-27 10:21:28sudo getcap /usr/bin/dumpcap 
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

6.4. 知识拓展

  • 网络嗅探的工作原理

    所有网络接口都有一个硬件地址(MAC),用于区别其他网络设备。

    在正常情况下,一个合法的网络接口应该只能响应属于自己的网络数据。

    然而,当将本地网卡设置成混杂状态时,它将对所有网络数据进行响应。

    由于嗅探器工作于网络环境的底层(链路层),它能够拦截所有在网络上传送的数据,再通过相应的软件工具,就可以实时分析这些数据的内容。

  • 交换网络

    在共享网络中,把网卡设为混杂模式就可以监听所有的网络数据包,但是在交换网络中,情况就发生了变化。

    以太网分为共享式以太网和交换式以太网:

    共享式以太网通常以集线器作为网络设备,交换式以太网通常使用交换机作为网络连接设备。

    共享式以太网中数据帧以广播方式传送到每个以太网端口,网内每台主机的网卡能接收到网内的所有数据帧。因此只要把网卡设置成为混杂模式就可以获取到这本地网卡的所有数据帧。

    最典型的交换网络使用交换机连接,在交换机中可以设为一个端口一个MAC地址,形成一个端口对应一个MAC地址对。这样当网络数据包到达端口时,而不是转发给所有的端口,只是转发MAC对应的端口。这样,其他端口的通讯不受干扰,所以其他端口上的主机就无法接收到网络上的数据包了。

Tips:从网络嗅探角度看,交换机连接网络,比hub连接网络要安全。

  • 数据包在局域网内的传输方式

    众所周知,数据包在互联网上的传播是根据IP地址进行寻址的,但是完整的过程并非如此。数据包通过IP地址可以达到的最远的地点就是目标主机所在的子网,而在该子网内的寻址却是使用物理地址的,即MAC地址。

    数据包被传送到目标主机所在的子网时,如果该子网为共享式网络(由集线器连接),数据包将被广播方式传播出去,这意味着该子网内的所有主机都可以接收到该数据包。当主机接收到数据包后通常会先检查其目的MAC地址,如果目的MAC地址不是自己,那么就是丢弃,只有目的MAC地址为自己的数据包才会将其交付给上一层处理。

    Sniffer将网卡设置为混杂模式,这样就可以接收到所有的数据包了,达到了嗅探了目的。

    (如果为交换网络,则根据MAC地址转发到相应主机,当MAC地址为FFFFFFFFFF...全1时广播)。

    上述内容待确认。

  • 设置网卡混杂模式

    网卡当前是否是混杂模式, 关键通过ifconfig命令,查看flags项中,是否有PROMISC.

#设置混杂模式(其中enp8s0为你的网络接口名称,视具体而定)
itcast@itcast $ sudo ifconfig enp8s0 promisc
itcast@itcast $ sudo ifconfig enp8s0 
enp8s0: flags=4355<UP,BROADCAST,PROMISC,MULTICAST>  mtu 1500
        ether e0:db:55:f0:07:d0  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 16  

#取消混杂模式
itcast@itcast $ sudo ifconfig enp8s0 -promisc
itcast@itcast $ sudo ifconfig enp8s0 
enp8s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether e0:db:55:f0:07:d0  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 16  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/221318.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索C++14新特性:更强大、更高效的编程

探索C14新特性&#xff1a;更强大、更高效的编程 C14并没有太大的改动&#xff0c;就连官方说明中也指出&#xff0c;C14相对于C11来说是一个比较小的改动&#xff0c;但是在很大程度上完善了C11&#xff0c;所以可以说C14就是在C11标准上的查漏补缺。 C14在2014年8月18日正式…

软磁材料市场分析:我国产量约18万吨

软磁材料&#xff0c;指的是当磁化发生在Hc不大于1000A/m&#xff0c;这样的材料称为软磁体。典型的软磁材料&#xff0c;可以用最小的外磁场实现最大的磁化强度。软磁材料(soft magnetic material)具有低矫顽力和高磁导率的磁性材料。 主要应用于风电、电子、计算机、通信、医…

IT外包服务融合云计算:企业信息化发展的新阶段

IT外包服务和云计算是企业在发展过程中重点关注的对象&#xff0c;它们在不同的方面为企业的信息化建设提供有力的支持。而两者的融合与发展更是为企业带来了巨大的机遇和挑战。 IT外包服务与云计算的融合为企业带来的机遇 首先&#xff0c;IT外包服务与云计算的融合使企业能够…

AI助力智慧农业,基于YOLOv5全系列模型【n/s/m/l/x】开发构建不同参数量级农田场景下庄稼作物、杂草智能检测识别系统

紧接前文&#xff0c;本文是农田场景下庄稼作物、杂草检测识别的第二篇文章&#xff0c;前文是基于YOLOv3这一网络模型实现的目标检测&#xff0c;v3相对来说比较早期的网络模型了&#xff0c;本文是基于最为经典的YOLOv5来开发不同参数量级的检测端模型。 首先看下实例效果&a…

数字与数学高频问题

关卡名 数字与数学高频问题 我会了✔️ 内容 1.掌握数组实现加法的方法 ✔️ 2.掌握高精度计算的实现方法 ✔️ 3.掌握幂运算的技巧 ✔️ 1. 数组实现加法专题 数字加法&#xff0c;小学生都会的问题&#xff0c;但是如果让你用数组来表示一个数&#xff0c;如何实现加法…

百面嵌入式专栏(岗位分析)海康高级linux开发工程师分析

文章目录 一、岗位的介绍二、刨析2.1、掌握调试工具2.2、块设备相关知识 三、简历建议 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; &#x1f4e2;本篇我们将对海康高级linux开发工程师岗位进行分析 。 一、岗位的介绍 地点&#xff1a;上…

JS箭头函数

箭头函数 1. 基本语法 // // 一般函数const fn function() {console.log(123);}// 箭头函数const fn () > {console.log(123);}fn()const fn (x) > {console.log(x);}fn(1)// 只有一个形参的时候可以省略小括号const fn x > {console.log(x);}fn(1)// 只有一行代…

学习springcloud时遇到java: 找不到符号 符号: 方法 getPname()

学习springcloud时异常-java: 找不到符号 符号: 方法 getPname() 学习springcloud时&#xff0c;遇到获取实体类属性值时出现异常。 项目目前分为两个子模块&#xff0c;一个是实体类模块&#xff0c;另一个是应用层。 在查询数据后&#xff0c;打印pname属性时报错&#xff…

FIR IP 学习记录

工具&#xff1a; matlab filterdesigner 工具箱 vivado FIR IP核 实现&#xff1a; 1.matlab设计与测试 先用matlab设计目标滤波器&#xff0c;得到滤波器的抽头系数。 如图&#xff0c;根据需求选择 低通/高通/带通/带阻。 由于vivado用的是FIR IP核&#xff0c;所以设…

C++ 结构体详解

目录 结构体声明 结构体自引用 匿名结构体类型 结构体变量的定义与初始化 匿名结构体的定义与初始化 内存对齐 结构体传参 结构体声明 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 struct tag {member - list;//成员 };…

自定义构建jdk镜像

&#xff08;1&#xff09;准备jdk压缩包、创建Dockerfile文件 jdk压缩包、Dockerfile文件在同一目录&#xff0c;如下 Dockerfile文件内容如下 # 指定基础镜像 FROM centos:latest # 作者和电子邮件 MAINTAINER vinegar93 "vinegar93163.com" # 指定工作目录 WORK…

el-date-picker时间控制范围为过去时间不可选

<el-date-picker :picker-options"startPickerOptions()" value-format"yyyy-MM-dd HH:mm:ss" v-model"form.applyFixPlan" type"datetime" placeholder"选择日期时间"> </el-date-picker> 在method中定义star…

数据库管理-第123期 Oracle相关两个参数(202301205)

数据库管理-第123期 Oracle相关两个参数&#xff08;202301205&#xff09; 最近在群聊中看到俩和Oracle数据库相关的俩参数&#xff0c;一个是Oracle数据库本身的&#xff0c;一个是来自于Weblogic的&#xff0c;挺有趣的&#xff0c;本期研究一下。&#xff08;本期涉及参数…

记录一次浏览器报错Whitelabel Error Page

后端打包prod的时候错误打包成了dev,部署到服务器上导致访问静态资源的时候全部报这个错.

【CentOS】配置 Apache 服务

yum install httpd -y# 查看是否安装成功 httpd -v # 出现版本号表示成功# 启动服务 systemctl start httpd# 查看状态 systemctl status httpd # running 即可成功 ● httpd.service - The Apache HTTP ServerLoaded: loaded (/usr/lib/systemd/system/httpd.service; disable…

人才招聘信息网的设计与实现

摘 要 随着经济的高速发展&#xff0c;人才的流动也越来越频繁&#xff0c;怎样才能用最少的精力和时间来招聘人才的企业要求相一致&#xff0c;也让应聘人参加应聘是企业和个人都关心的问题。 本网站采用基于广域网的B/S结构平台&#xff0c;比C/S有更强的适用范围&#xff0…

漏洞复现--万户ezoffice wpsservlet任意文件上传

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

Linux基本指令(2.0)

周边知识&#xff1a; 1.Linux中&#xff0c; 一切皆文件 构建大文件 输入如下shell命令 i1; while [ $i -le 10000]; do echo "hello Linux $i"; let i; done 此时大文件已经创建在big.txt 此时我们发现cat查看无法查看开始内容 我们使用more 当占满一屏之后就不…

[adbd] adb添加密码登录SHELL

项目中设备为Linux&#xff0c;使用ADB进行调试&#xff0c;为了安全需要在adb shell时进行密码认证。 在此记录一下&#xff0c;防止遗忘~~~ 修改 system/core/adb/services.c 文件的登录shell为 /bin/login 这样就可以使用linux自带的认证服务 如果想强制指定某个用户进行登…

快手数仓面试题附答案

题目 1 讲一下你门公司的大数据项目架构&#xff1f;2 你在工作中都负责哪一部分3 spark提交一个程序的整体执行流程4 spark常用算子列几个&#xff0c;6到8个吧5 transformation跟action算子的区别6 map和flatmap算子的区别7 自定义udf&#xff0c;udtf&#xff0c;udaf讲一下…