Wireshark使用技巧

2023-11-07

前言

Wireshark是一款图形界面的网络嗅探器,支持多种平台,是网络流量分析的利器。它的创始人是Gerald Combs,前身是Ethereal,作为开源项目经过众多开发者的完善它已经成为使用量最大的安全工具之一。最近刚把《Wireshark网络分析就是这么简单》看完,写的很有意思,把一些心得和技巧分享一下,部分内容也也源自个人总结。本文所使用的Wireshark是2.4.0版,可以到官网下载:

https://www.wireshark.org/

一、网络分析

0×00:只抓包头

在进行网络分析时往往只需要知道两个节点是不是能够联通,具体的传输信息并不重要,所以抓包的时候可以设置只抓包头,这样就大大减少了数据包的大小,有利于数据分析。

设置方法:Capture(捕获)–>Options(选项)–>Snaplen(Snap长度)。

将这个值设置200以下就可以抓到所有网络层次的头信息了。

Wireshark469.png

另外也可以直接点击任务栏里的快捷键,快速设置

Wireshark494.png


0×01:只抓必要的包

我们可以设置抓包的filter,只抓一些感兴趣的包。

设置方法:Capture(捕获)–>Options(选项)–>Capture Filter(捕获过滤器)

Wireshark591.png

在输入框里输入规则,然后点击开始即可,比如输入

dst host 220.181.111.188(捕获目标主机为220.181.111.188的数据包)

220.181.111.188是ping www.baidu.com的ip地址,不同地理位置ping的ip可能不一样,然后浏览器访问百度就可以看到我们想要的捕获结果。

Wireshark754.png


0×02:过滤

使用过滤规则进行数据包筛选是Wireshark最强大的功能之一,比如如果知道问题发生的具体协议就可以以协议名称过滤。使用协议过滤时要注意协议之间的依赖性,比如NFS共享挂载失败,问题可能发生在挂载所用的mount协议,也可能发生在mount之前的portmap协议。

Wireshark898.png

然后就是IP+端口的方式,一个比较简单的方法就是可以在感兴趣的数据包上右键然后点击“追踪流”,就可以看到与这对ip和端口的全部通信。

Wireshark967.png

也可以在相应的包上右键–>Apply as Filter(作为过滤器应用)–>Selected(选中),Wireshark就可以自动生成相应的过滤规则。这里给出一些常用的规则。

过滤IP:

IP源地址:ip.src ==192.168.1.1

IP目的地址:ip.dst== 192.168.1.1

IP地址(包括源和目的):ip.addr== 192.168.1.1

过滤端口:

TCP端口:tcp.port==80

TCP目的端口:tcp.dstport == 80

TCP源端口:tcp.srcport == 80

UDP端口:udp.port eq 15000

TCP 1-80之间的端口:tcp.port >= 1 and tcp.port <= 80

过滤协议:

http、tcp、udp、arp、icmp、http、smtp、ftp、dns 等。

过滤MAC地址:

源MAC地址:eth.src==A0:00:00:04:C5:84

目的MAC地址:eth.dst==A0:00:00:04:C5:84

MAC地址(包括源和目的):eth.addr==A0:00:00:04:C5:84

过滤包长度:

整个UDP数据包:udp.length==20

TCP数据包中的IP数据包:tcp.len>=20

Wireshark4954.png

整个IP数据包:ip.len==20

整个数据包:frame.len==20

HTTP模式过滤:

请求方法为GET:http.request.method==“GET”

请求方法为POST:http.request.method==“POST”

指定URI:http.request.uri==“/img/logo-edu.gif”

请求或相应中包含特定内容:http contains “FLAG”

0×03:自动分析

Wireshark有强大的统计分析功能,可以帮助分析人员快速统计出一些基本信息。比如点击Analyze(分析)–>Expert InfoComposite(专家信息),就可以看到数据包的中的一些不同级别的信息统计,包含重传次数、链接建立次数、网络错误等,在分析网络性能时这个功能很有作用。

Wireshark1891.png

单击Statistics(统计)–>TCPStream Graph(TCP流图形),可以生成一些统计图表,比如下图表示171到192的数据传输过程,水平线表示短暂的停止过程。

Wireshark1983.png

此外还可以统计分层信息、网络会话列表、网络端点列表、ip地址统计列表、应用层数据包信息等。

0×04:搜索

按“Ctrl+F”Wireshark也可以进行关键字搜索,选择“分组详情”后才可以搜索数据包中的内容,这样的搜索可以在CTF中也许会有意外收获。

Wireshark2112.png

二、CTF

下面每一种对应的操作都会给出一到几个CTF题目的例子,帮助大家快速上手。

0×00:搜索

题目文件:key.pcapng——https://pan.baidu.com/s/1kVyyCbt

题目描述:flag被盗,赶紧溯源!

题目题解:

首先可以只将这个数据包当做文本文件打开,比如用一些notepad++编辑器,然后直接搜索

Wireshark2258.png

正经的做法就是用Wireshark自带的搜索功能找尝试查找一些关键词(比如key、flag、shell、pass等),往往直接搜索就能有意外收获。

Wireshark2334.png

然后跟进可疑的数据包

Wireshark2347.png

根据数据包特征,很明显看出这是一个菜刀连接一句话木马的数据包,然后往下找,即可看到读取的flag

Wireshark2398.png

0×01:文件提取

题目文件: caidao.pcapng——https://pan.baidu.com/s/1kVyyCbt

题目描述:有人偷偷下载了文件!

题目题解:

根据题意可能数据包中存在文件传输,尝试直接导出,选择File(文件)–>Export Objexts(导出对象),然后可以看到一些协议,比如选中http就可以看到通过http传输的一些文件,在右下角有导出按钮,可生生成相应的文件。但是本题中无法用此方法直接看到被下载的文件,因为有些文件是直接通过tcp或udp协议传输的,http协议只能看到的访问的链接,但不会看到传输的内容(比如你去访问放一个链接download.php?file=test.rar,通过上述导出对象的方式看不出来下载的文件的内容的),如下如所示。

Wireshark2718.png

这个时候就需要找到那个执行下载的数据包,找到数据传输的部分再导出,比如下面这个数据包

Wireshark2763.png

大概是一个菜刀下载的过程,在最后一个包可以看到下载的文件,直接右键点击“导出分组字节流”,然后保存为.tar.gz文件

Wireshark2825.pngWireshark5299.png

本题中最后还要使用16进制编辑器去除开头和结尾的X@Y字符,这个是菜刀的特征符号,不是文件内容。

Wireshark2876.png

再或者一个简单的方法,右键“显示分组字节流”,去除前后各三个字节在解压缩

Wireshark2915.png

再复杂一点就是多个包的数据提取了,一个较大的文件其传输过程可能要经过多个数据包,比如下面这道题目。

题目文件:misc_fly.p.capng—— https://pan.baidu.com/s/1kVyyCbt

题目描述:抓到一只苍蝇!

题目题解:

首先用HTTP条件过滤一下

Wireshark3025.png

右键第一个包,追踪流

Wireshark3038.png

可以看到一些基本信息,首先这是一个POST数据包,发送了一些文件相关信息,包括名称(fly.rar)和大小(525701)等。接下来应该就是文件实际上传的数据包,将过滤条件改为

http.request.method==”POST”

Wireshark3157.png

从数据包的结构上看应该就是第二至第六个数据包是数据传输的过程。点开第二个可以看到MediaType的长度为131436=

Wireshark3220.png

第二到第五个都是一样的长度,第六个为1777,应该是剩余的最后一部分数据。但是131436*4+1777=527521!=525701,再看下第一个数据包

Wireshark3300.png

都知道rar文件头应该是Rar,但是选中的数据部分前面却多出了很多,简单计算一下一共多出了364,且364*5+525701=527521。所以多出的也许是某种校验数据,在导出的时候将其忽略。

Wireshark3399.png

每个包都做同样的操作即可得出5个文件,再将这个文件按顺序拼接即可。拼接的话可以使用16进制编辑器手动拼接,也可以使用linux下cat命令,比如“cat 1 2 3 4 5 > fly.rar”。这道题还设置了伪加密,需要修改加密位,将0×84位置改为0×80即可。

Wireshark3535.png

解压出来后是一个exe可执行文件,里面隐藏了一个png图片,是个二维码,扫描即可得到flag。

Wireshark3585.png

Flag:flag{m1Sc_oxO2_Fly}


0×02:信息提取

题目文件: sqlmap.pcap——https://pan.baidu.com/s/1kVyyCbt

题目描述:

Wireshark3653.png

题目题解:

数据包记录的是sqlmap获取flag的过程,使用http && http contains”flag”过滤一下

Wireshark3719.png

可以看出这是一个布尔盲注的过程,一位一位的读取flag,然后用二分法不断判断其ascii码的范围并最终确定这一位的值。第806个包是读取flag第一位的数据包

Wireshark3801.png

将其payload解码一下是这样的,判断其ascii码是否大于64

id=1 AND ORD(MID((SELECTIFNULL(CAST(`value` AS CHAR),0×20) FROM isg.flags ORDER BY `value` LIMIT0,1),1,1))>64

然后一直到836个包判断第一位ascii码值大于72,然后开始从高到低递减,判断其ascii码不大于73,则第一位的ascii码值是73,对应的字符为I。以此类推,其flag为ISG{BLind_SQl_InJEcTi0N_DeTEcTEd}。本题需要一定的耐心和SQL注入基础。但是这么做可能有些繁琐,其实pcap数据包可以直接用文本编辑器打开,就可以看到其中的http请求

Wireshark4138.png

所以可以使用字符串搜索的方式直接去查找其中的语句,然后判断flag,首先将原数据包中的http请求导出来,另存为sqli.pcap

Wireshark4206.png

导出后的文件为: sqli.pcap——https://pan.baidu.com/s/1kVyyCbt

再使用如下的Python脚本一键读取即可

Wireshark4258.png

ISG{BLind_SQl_InJEcTi0N_DeTEcTEd}

三、Tshark

Tshark是命令行版的Wireshark,相对于Wireshark它有更好地灵活性,结合脚本程序可以发挥巨大的威力,在安装Wireshark的时候就默认安装了Tshark。

Wireshark4389.png

如下是运行-h参数,具体的参数解释可以参考官方文档

https://www.wireshark.org/docs/man-pages/tshark.html

Wireshark4470.png

比如kali下的一个简单的使用示例(windows不知为何无法获取网卡)

Wireshark4509.png

-s 512:只抓取前512个字节

-i eth0:监听eth0网卡

Tshark的-z参数可以进行各种信息的统计,比如下面这条命令,统计每一秒钟里由ip为的192.168.228.128主机发出的http请求的次数

tshark -zio,stat,1.00,http&&ip.src==192.168.228.128

程序在监听的时候会不断输出拦截的数据信息

Wireshark4694.png

最后终止的时候则会给出一个报表

Wireshark4712.png

这些统计信息都可以直接写入报告或直接导入excel进行下一步处理。

四、使用Python进行数据包分析

Python本身也可以解析数据包,它可以向Wireshark一样将pcap数据包分层解析,然后进行数据处理,这里需要安装scapy模块,如果安装不成功可以在kali2.0里尝试运行。网络模型大家应该有所了解,按不同的标准有七层和五层的分法,Wireshark就是按不同层次解析数据。同理scapy也是如此,下面这段代码打开上文提到的sqlmap.pcap数据包后是这样的

Wireshark4952.png

Wireshark4954.png

scapy主要是分为Ethernet、IP、TCP、Raw这四层,每一层都有每一层的关键字,可以利用键值对的方式直接读取相应的内容。其实Python适合处理大量数据包的情况,比如需要从100个数据包中查找某个特征,使用Wireshark一个一个打开就不现实,可以写脚本批量处理。这里给出一个示例代码,其作用是将/root/pcap文件夹里的数据包全部读取一遍,查找其中存在长度为32的字符串的数据包,并将其写入到另一个文件夹中。(Python对pcapng格式的数据包处

Wireshark5215.png

Wireshark5217.png

测试数据包如下,是我们上文提到的几个数据包及两个测试数据包

20160813-084957.pcap/20160813-083457.pcap——https://pan.baidu.com/s/1kVyyCbt

Wireshark5288.png

然后执行代码运行

Wireshark5299.png

在result文件夹里可以看到20160813-084957.pcap中存在符合条件的字符串,并且生成了对应的txt文件。同理,我们可以改变查找的规则,在大量数据包中查找我们想要的信息。

Wireshark5395.png

五、合天相关课程推荐

这里推荐一下和本文相关的合天实验,可以进一步学习,巩固加强。

wireshark使用:

http://www.hetianlab.com/cour.do?w=1&c=C172.19.104.182015012915332000001

wireshark之显示过滤:

http://www.hetianlab.com/expc.do?ec=ECID172.19.104.182015012315255900001

wireshark之文件还原:

http://www.hetianlab.com/expc.do?ec=ECID172.19.104.182014122315591000001


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Wireshark使用技巧 的相关文章

  • openssl AES加密、解密示例代码

    openssl AES加密 解密 关于加密解密后长度的说明 AES 高级加密标准 是一种对称加密算法 它使用相同的密钥进行加密和解密操作 无论是加密还是解密 输入和输出的字节数保持一致 AES算法操作的数据以字节为单位 输入数据被分成16字
  • TensorFlow是什么

    TensorFlow是一个开源的深度学习框架 由Google开发 用于构建和训练神经网络 它提供了一种简单而灵活的方法来构建各种类型的机器学习模型 包括卷积神经网络 循环神经网络 深度神经网络等 TensorFlow使用图和张量的概念来描述
  • Mysql免安装版的root密码是多少

    免安装版的Mysql在初始化后root是没有密码的 1 下载免安装版Mysql 下载链接 MySQL Download MySQL Community Server 下载后解压 里面的目录是这样的 2 添加配置文件和系统环境 在系统变量中添

随机推荐

  • redis bitmap实现签到(包含工具类)

    很多应用比如签到送积分 签到领取奖励 签到 1 天送 10 积分 连续签到 2 天送 20 积分 3 天送 30 积分 4 天以上均送 50 积分等 如果连续签到中断 则重置计数 每月初重置计数 显示用户某个月的签到次数 在日历控件上展示用
  • Spring 基础--第一个spring项目及IOC

    一 第一个spring项目 1 导入Jar包
  • 准备写本书

    立个flag 写本书 关于数字IC物理设计 为了避免半途而废 本人在此立下flag 今天起 两年为期 写一本关于数字IC物理设计的书 初步想法 利用公众号专辑功能 先从小章节写起 然后汇聚成册 请大家监督 本来年初就想写 但是迟迟没下定决心
  • 服务器被爬虫恶意攻击怎么办?

    在有预算的情况可以采购第三方服务防火墙 没钱就使用开源的WAF进行防护 WAF防火墙的基本防护原理 WAF Web 应用防火墙 可以使用多种技术来防止恶意爬虫攻击 例如 1 黑名单 WAF 可以使用黑名单技术来过滤恶意爬虫的请求 黑名单中包
  • 【机器学习】TF-IDF以及TfidfVectorizer

    TF IDF定义 TF IDF 全称为 词频一逆文档频率 TF 某一给定词语在该文档中出现的频率 T F w 词语 w
  • common-lang包中一些工具类的使用说明

    一 common lang包常用的类有 1 StringUtils类 该类主要提供对字符串的操作 对null是安全的 主要提供了字符串查找 替换 分割 去空白 去掉非法字符等等操作 2 ObjectUtils类 主要是对null进行安全处理
  • vs网站 服务器变量,了解下变量赋值 (值 vs 引用)

    理解 JavaScript 如何给变量赋值可以帮助我们减少一些不必要的 bug 如果你不理解这一点 可能很容易地编写被无意中更改值的代码 JavaScript 总是按照值来给变量赋值 这一部分非常重要 当指定的值是 JavaScript 的
  • Qt的信号和槽是如何工作的

    用Qt做过开发的朋友 不知道是否曾为下面这些问题疑惑过 我们知道Qt是基于C 的 Qt写的代码最终还是要由C 编译器来编译 但是我们的Qt代码中有很多C 里没有的关键字 比如slots signals Q OBJECT等 为什么C 编译器会
  • mpvue页面卸载数据不清空

    mpvue有个坑页面卸载了 在小程序层面上是销毁了 但是vue层面页面的实例还在 为了实现再次进入清除数据的效果 可以试一下这个折中的办法 在onload里面清除一下实例中的数据 onLoad e Object assign this th
  • Leaflet使用wfs的示例

    Leaflet是一个开源的Web地图库 可以用来在网站上显示地图 可以使用Leaflet的功能扩展 Leaflet WFS 来在Leaflet地图中使用WFS Web Feature Service 功能 以下是使用Leaflet和Leaf
  • java是值传递还是引用传递

    文章目录 1 前言 2 java是值传递还是引用传递 1 前言 java是值传递 值传递是指在调用方法时将实际参数拷贝一份传递到方法中 这样在方法中如果对参数进行修改 将不会影响到实际参数 当传的是基本类型时 传的是值的拷贝 对拷贝变量的修
  • 内存溢出(out of memory)和内存泄露(memory leak)的区别和检测工具方法

    内存溢出 out of memory 是指程序在申请内存时 没有足够的内存空间供其使用 出现out of memory 比如申请了一个integer 但给它存了long才能存下的数 那就是内存溢出 内存泄露 memory leak 是指程序
  • 如何快速使用上C++11

    最近的几个项目都是用C 11写的 越用越觉得强大 很多的新特征也希望Java能整合进去就好了 打算改天有空也写个C 11的使用心得 无奈C 太博大精深 还有好几个很赞的功能还没掌握 现在试着在本机Ubuntu上使用C 11 找了好几种方法
  • 喜讯

    近日 中国信息通信研究院 以下简称 中国信通院 主办的首届 SecGo云和软件安全大会 成功举办 会上重磅揭晓了 安全守卫者计划 零信任 优秀案例征集活动结果 深圳市智安网络有限公司与大庆油田信息技术公司联合申报的零信任项目 凭借为企业提供
  • row_number() over partition by 分组聚合

    row number over partition by 分组聚合 分组聚合 就是先分组再排序 可以的话顺手标个排名 如果不想分组也可以排名 如果不想分组同时再去重排名也可以 ROW NUMBER OVER PARTITION BY col
  • Vue获得指定id的html,vue.js怎么删除指定id的数据

    本文环境 windows7 vue2 9 6 该方法适用于所有品牌的电脑 vue js删除指定id数据的方法 注意click需要传入当前的id值deletes function id this http delete http jsonpl
  • 认识sass

    一 认识sass SASS Syntactically Awesome Stylesheet 是一个CSS预处理器 有助于减少CSS的重复 节省时间 它是更稳定和强大的CSS扩展语言 描述文档的样式干净和结构 扩展了 CSS3 增加了规则
  • Java面向对象基础

    面向对象 学习内容 l 面向对象思想 l 类与对象及其使用 l 对象的内存图 l 成员变量和局部变量的区别 l 匿名对象 l 封装 private l this关键字 l 构造方法 l static关键字 l 继承 l 多态 l 抽象类 l
  • AVR单片机最小系统 基本硬件线路与分析

    AVR单片机最小系统 基本硬件线路与分析 AVR仿真器 AVR编程器 二合一 AVR JTAG与ISP 二合一V2 5 经典推荐 298 00元 富士通 MB90092 DEMO OSD视频字符叠加开发板 380 00元 国产 AVR JT
  • Wireshark使用技巧

    前言 Wireshark是一款图形界面的网络嗅探器 支持多种平台 是网络流量分析的利器 它的创始人是Gerald Combs 前身是Ethereal 作为开源项目经过众多开发者的完善它已经成为使用量最大的安全工具之一 最近刚把 Wiresh