流量分析-Wireshark -操作手册(不能说最全,只能说更全)
     
    
     
      
       基于各种比赛做的总解
      
     
    
     
      
       基于协议过滤⼿法
      
     
     ?
     
      
       常用筛选命令方法 常⽤快捷键
      
     
     ?
     
      
       数据包筛选 等等
      
     
    
     
      流量分析
     
     
      
       简介
      
     
    
     
      
       ⽹络流量分析是指捕捉⽹络中流动的数据包,并通过查看包内部数据以及进⾏相关的协议、流量分析、统计等来发现⽹络运⾏过程中出现的问题。
      
     
    
     
      
       在CTF比赛中,以及各种技能大赛对于流量包的分析取证是一种十分重要的题型。通常这类题目都是会提供一个包含流量数据的pcap文件,参赛选手通过该文件筛选和过滤其中无关的流量信息,根据关键流量信息找出flag或者相关线索。
      
     
    
     
      
       pcap流量包的分析通常都是通过图形化的网络嗅探器——wireshark进行的,这款嗅探器经过众多开发者的不断完善,现在已经成为使用最为广泛的安全工具之一。接下来,小路我来为大家讲解这款工具的基本使用。
      
     
    
     
      站在⽹络技术⼈员的
     
     
      
       ⻆度
      
     
     
      上:
     
    
- 
 通过捕捉路由器的流量,进⽽发现⽹络瘫痪的原因
 
- 
 通过捕捉局域⽹的流量,进⽽分析流量波动的原因
 
- 
 …
 
     
      ⽽站在
     
     
      
       空间安全攻防的
      
     
     
      ⻆度上来看:
     
    
- 
 技术⼈员能够分析攻击者的流量,从⽽推断出攻击者的攻击路径,并进⾏朔源
 
- 
 通过流量分析,研究攻击者的漏洞利⽤⼿法,进⽽修补漏洞
 
- 
 更有⼤神直接通过数据包反向推0day
 
- 
 …
 
     
      ⼯欲善其事必先利其器-
     
     
      Wireshark
     
    
     
      Wireshark
     
    
     
      ⼀般流量我们都需要通过⼀定的⼿法去过滤,减少⽆⽤流量的⼲扰,从⽽更精确的去分析下⾯,我们先带领⼤家讲讲Wireshark 的UI 然后说说Wireshark ⼯具的常⽤流量过滤语法
     
    
     
      ⼯具简介
     
    
     
      
       我们要探索与介绍的点如下:
      
     
    
- 
 
 Wireshark 主界⾯简介
 
 
- 
 
 如何在Wireshark 中查看数据包
 
 
- 
 
 如何在Wireshark 中捕获数据包
 
 
- 
 
 如何在Wireshark 中执⾏跟踪分析
 
 
- 
 
 如何在Wireshark 中过滤数据包
 
 
- 
 
 and more …
 
 
     
      第⼀次捕获数据包
     
    
- 
 打开Wireshark。
 
- 
 从主下拉菜单中选择Capture,然后是Interface。这时你应该可以看到⼀个对话框,⾥⾯列出了你可以⽤来捕获数据包的各种设备,以及它们的IP 地址。
 
- 
 选择你想要使⽤的设备,如图下图所⽰,然后单击Start,或者直接单击欢迎画⾯中InterfaceList下的某⼀个设备。随后数据就会在窗⼝中呈现出来
 
 
      - 
选择本地 
 
 出⽹的⽹卡
 
 ,即可捕获本地传输的数据包
 
      
     
      报错解决⼿法
     
    
     
      有时可能会遇到报错,如下,解决⼿法如下:
     
    
please turn off promiscuous mode for this device 
译⽂:[错误:未能将硬件过滤器设置为混杂模式- 请为此设备关闭混杂模式] 
     
      使⽤Wireshark抓包的时候,报出如下错误:
     
    
    1 The capture session could not be initiated on interface
    '\Device\NPF_Loopback' (Error opening adapter: The system cannot find the path specified. (3)).关闭混杂模式即可,步骤如下:
 
       
      将勾勾去掉即可
 
      
     
      常⽤快捷键
     
     ?
    
| 
           | 
           | 
| ctrl+m | 标记数据包 | 
| ctrl+shift+N | 跳到标记处 | 
     
      基于协议过滤⼿法
     
     ?
    
     
      直接键⼊协议名称即可
     
    
| 
           | 
           | 
| http | 过滤出http 协议数据包 | 
| arp | 过滤出arp 协议数据包 | 
| mysql | 过滤出mysql 数据库查询与响应的数据包 | 
| tcp | 过滤出tcp 协议的数据包 | 
| nbns | 该协议记录了对应IP 的计算机名称 | 
| icmp | 过滤出icmp(ping) 协议数据包 | 
     
      icmp 协议数据包
     
    
     
      有时流量分析的题⽬会考到协议本质上去,这⾥对 icmp 做⼀个补充,因为的确遇到过
     
    
     根据实战题⽬去学习效率会更好,
     
      ⼀个例⼦
     
     ,注意:
     
      “报⽂重定向的数量”
     
    
     
      使⽤Wireshark 分析capture.pcapng 数据包⽂件,这些数据中有⾮常多的ICMP 报⽂,这报⽂中有⼤量的⾮正常ICMP 报⽂,找出类型为重定向的所有报⽂,将”报⽂重定向的数量”作Flag 值提交。flag 格式:flag{重定向数量}
     
    
     
      
       
        过滤⼿法:icmp.type eq 5
       
      
     
    
     
      知识补充
     
    
     
      
       每⼀个包都是通过数据链路层DLC 协议,IP 协议和ICMP 协议共三层协议的封装。DLC 协议的⽬的和源地址是MAC 地址,IP 协议的⽬的和源地址是IP 地址,这层主要负责将上层收到的信息发送出去,⽽ICMP 协议主要是Type和Code来识别,“
      
     
     
      
       Type:8,Code:0
      
     
     
      
       ” 表⽰报⽂类型为诊断报⽂的请求测试包,“
      
     
     
      
       Type:0,Code:0
      
     
     
      
       ” 表⽰报⽂类型为诊断报⽂类型请正常的包。ICMP 提供多种类型的消息为源端节点提供⽹络额故障信息反馈,报⽂类型可归纳如下:
      
     
    
- 
 
 诊断报⽂(类型:8,代码0;类型:0 代码:0);
 
 
- 
 
 ⽬的不可达报⽂(类型:3,代码0-15);
 
 
- 
 
 重定向报⽂(类型:5,代码:0–4);
 
 
- 
 
 超时报⽂(类型:11,代码:0–1);
 
 
- 
 
 信息报⽂(类型:12–18)。
 
 
 
      
     
      重定向数量是57
     
    
     
      基于协议的衍⽣-常⽤过滤语法
     
    
这⾥我们列举常⽤的过滤⼿法,举例HTTP 协议,望抛砖引⽟
| 
           | 
           | 
| 
           | 
           | 
| 
           | 
           | 
| 
           | 
           | 
| 
           | 
           | 
| 
           | 
           | 
| 
           | 
           | 
| 
           | 
           | 
| 
           | 
           | 
| 
           | 
           | 
| 
           | 
           | 
| 
           | 
           | 
| 
           | 
           | 
| 
           | 
           | 
| 
           | 
           | 
| 
           
           | 
           | 
| 
           | 
           | 
| 
           | 
           | 
     
      基于持续会话
     
    
     
      主题可能没法解释这个⼿法,我们看⼀道题⽬
     
    
     
      
       使⽤Wireshark 分析capture.pcapng 数据流量包,ftp 服务器已经传输⽂件结束,将建⽴FTP 服务器的数据连接的次数作为Flag 值提交。flag 格式: flag {连接次数}
      
     
    
     
      关键要求是,将建⽴FTP 服务器的数据连接的次数组为Flag 提交。还是⼀样我们来到FTP 过滤然后我们可以通过Wireshark 只直观的判断,该FTP 数据连接到断开的情况,也就是⼀个持续会话的开始到结束,wireshark 会我们⽤⼀条曲折线描述
     
    
 
      因此分析到,只1 次
所以flag{1}
     
      识别数据包数量
     
    
     
      Wireshark ⾃带功能会统计当前数据包的数量,过滤后根据过滤语句过滤后的数据包,统计数据包数量
     
    
     
      ⼀个题⽬例⼦会更好理解⼀些
     
    
     
      使⽤ Wireshark 分析 capture.pcapng 数据流量包,找出数据包当中所有 HTTP 状态码为 404的报⽂,将这些报⽂的数量作为 Flag 值提交。flag 格式: flag {报⽂数量}
     
    
     
      
       过滤语法:
      
     
     
      
       http.response.code == 404
      
     
    
 
      
     追踪流⼿法 ?
    
追踪流⼿法不管是在⽐赛中,还是在实际应急响应进⾏流量分析时都⾮常好⽤,可
以具体显⽰⼀个数据包的内容以及传输数据,简单的使⽤如下
这⾥追踪 MySQL 的传输流量,我们可以更清楚的看到 Hacker 在攻击 MySQL 数据库时的路径
 
       
      
     统计
     
      –
     
     端点⼿法 ?
    
     
      
       该⼿法适⽤于对 数据包内 IP 进⾏可视化统计,分析该数据包内的 IP 占⽐
      
     
    
常⽤于题型如下:
- 
 分析 Hacker 的 IP 地址
 
- 
 …
 
 
      
     
      
       根据 IP 发包数量,可猜测恶意攻击者 IP,这⾥推测:
      
     
     
      
       10.3.3.101
      
     
     
      
       为恶意攻击者 IP
      
     
    
     
      
       当然为确保百分百正确,我们可以使⽤该 IP 去进⾏语句过滤,看看是否符合⼀个恶意攻击特征
      
     
    
     
      
       
        ip.src eq 10.3.3.101 and mysql contains “pass”
       
      
     
    
     
      
       过滤后,直接追踪流,查看详细的数据流量,可以发现⼀个 MD5 值,我想正常运维⼀般不会这样⼲
      
     
    
 
      虽然这样确认有点⻢虎,但若在真实环境下,确认⼿法有很多,除了可以根据 IP 过滤是否存在恶意⾏
为,还有很多其他⽅法,这⾥不⼀⼀举例。
     统计
     
      –
     
     协议分级⼿法 ?
    
     
      
       若题⽬给的数据包过多,我们可以进⾏协议统计,避免我们在⼀个⽆⽤的数据包中
      
     
    
     
      
       浪费时间
      
     
    
     
      
       ⽐如:请分析 Hacker 在 MySQL 数据库中找到的账⼾密码,这⾥我们就可以直接统计该数据包,是否
      
     
    
     
      
       存在 MySQL 流量,若不存在,则直接放弃该数据包,查看并统计其他数据包流量
      
     
    
 
       
      
     统计
     
      -HTTP
     
     请求 ?
    
     
      
       统计 HTTP 请求可以直接分析 HTTP 数据包请求的 URL 路径
      
     
    
 
       
      
     扫描器类型
    
- 
❤awvs:acunetix 
- 
❤netsparker:netsparker 
- 
❤appscan:Appscan 
- 
❤nessus:nessus 
- 
❤sqlmap:sqlmap 
- 
既然要找扫描器 就以上的几种 常用的扫描器也就这几个:awvs,appscan,nessus 
     
      Tcpdump
     
    
     使用tcpdump抓取网络数据包,是
     
      运维工作绕不开
     
     的坎,这里会先简单介绍一下基本的操作,接着会经由规则部分拓展一下,毕竟我们很多时候在搜索的时候,会找到各种各样的表达式,但却不知道这个是怎么来的,里面到底代表着什么含义(因为比赛中基本不使用,所以简单说一下)
    
     
      tcpdump命令格式及使用
     
    
     
      tcpdump采用命令行方式,它的命令格式为:
     
    
     
      tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ][ -i 网络接口 ] [ -r 文件名] [ -s snaplen ][ -T 类型 ] [ -w 文件名 ] [表达式 ]
     
    
-a        将网络地址和广播地址转帖变成名字;
-d       将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd      将匹配信息包的代码以c语言程序段的格式给出;
-ddd      将匹配信息包的代码以十进制的形式给出;
-e       在输出行打印出数据链路层的头部信息;
-f       将外部的Internet地址以数字的形式打印出来;
-l        使标准输出变为缓冲行形式;
-n        不把网络地址转帖换成名字;
-t        在输出的每一行不打印时间戳;
-v        输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv       输出详细的报文信息;
-c        在收到指定的包的数目后,tcpdump就会停止;
-F        从指定的文件中读取表达式,忽略其它的表达式;
-i       指定监听的网络接口;
-r       从指定的文件中读取包(这些包一般通过-w选项产生);
-w       直接将包写入文件中,并不分析和打印出来;
-T       将监听到的包直接解释为指定的类型的报文,常见的类型有rpc(远程过程调用)和snmp(简单网络管理协议;)- 
 
 tcpdump -i eth0
 
 
- 
 
 tcpdump -c -i eth0
 
 
- 
 
 tcpdump -A -i eth0
 
 
- 
 
 tcpdump -w 0001.pcap -i eth0
 
 
- 
 
 tcpdump -r 0001.pcap
 
 
- 
 
 tcpdump -n -i eth0
 
 
- 
 
 tcpdump -i eth0 port 22
 
 
- 
 
 tcpdump -i eth0 -src 172.21.10.X
 
 
- 
 
 tcpdump -i eth0 -dst 172.21.10.X
 
 
- 
 表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。
 
- 
 在表达式中一般如下几种类型的关键字:
 
- 
 第一种是类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.
 
- 
 第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2, dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。
 
- 
 第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是”ether”的别 名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包 的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。
 
- 
 除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 ‘not ‘ ‘! ‘, 与运算是’and’,’&&’;或运算 是’or’ ,’||’;这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。
 
     
      (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.2or 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
     
    
     常⻅⿊客⼯具指纹
    
     漏扫⼯具指纹(就是上文说的扫描器)
    
     
      Awvs
     
    
     (
     
      Acunetix Web Vulnerability Scanner
     
     )
    
     
      
       acunetix_wvs_security_test acunetix
      
     
    
     
      
       acunetix_wvs acunetix_test
      
     
    
     
      
       Acunetix-Aspect-Password: Cookie:
      
     
    
     
      
       acunetix_wvs_security_test X-Forwarded-Host:
      
     
    
     
      
       acunetix_wvs_security_test X-Forwarded-For:
      
     
    
     
      
       acunetix_wvs_security_test Host:
      
     
    
     
      
       acunetix_wvs_security_test
      
     
    
     
      Netsparker
     
    
     
      
       X-Scanner: NetsparkerLocation:
      
     
    
     
      
       NetsparkerAccept: netsparker/checkCookie:
      
     
    
     
      
       netsparkerCookie: NETSPARKER
      
     
    
     
      Appscan
     
    
     
      
       Headers Content-Type: Appscan
      
     
    
     
      
       Content-Type: AppScanHeaderAccept: Appscan User-Agent:Appscan
      
     
    
     
      Nessus
     
    
     
      
       x_forwarded_for: nessus
      
     
    
     
      
       referer: nessus
      
     
    
     
      
       host: nessus
      
     
    
     
      zgrab
     
    
     
      
       User-Agent: zgrab <version>
      
     
    
     
      SQL
     
     注⼊⼯具
    
     
      Sqlmap
     
    
注意 version 版本
     
      User-Agent: sqlmap1.2.8#stable
     
    
信息收集⼯具
     
      Nmap
     
    
     
      
       User-Agent: Mozilla/5.0 (compatible; Nmap Scripting Engine;
      
     
     
      https://nmap.org/book/nse.html)
     
    
     常用筛选命令方法
    
     
      根据IP地址进行筛选:
     
    
     
      命令汇总:
     
    
     
      ip.addr==192.168.1.122 //根据IP地址筛选,包括源ip或者目的IP
     
    
     
      ip.src==192.168.1.122 //根据源IP地址筛选
     
    
     
      ip.dst==192.168.1.122 //根据目的IP地址筛选
     
    
- 
根据IP地址进行筛选
 
     
      使用命令:
     
     
      
       ip.addr== 10.255.0.1
      
     
    
     
      
       命令解说:筛选出IP地址是
      
     
     
      
       10.255.0.1
      
     
     
      
       的数据包,包括源IP地址或者目的IP地址使用的是
      
     
     
      
       10.255.0.1
      
     
     
      
       的全部数据包。
      
     
    
 
      
     
      2.根据源IP地址筛选
     
    
     
      使用命令:
     
     
      
       ip.src==10.255.0.1
      
     
    
     
      
       命令解说:筛选出
      
     
     
      
       源IP地址
      
     
     
      
       是
      
     
     
      
       10.255.0.1
      
     
     
      
       的数据包
      
     
    
 
      
     
      3.根据目的IP地址筛选
     
    
     
      使用命令:
     
     
      
       ip.dst==10.255.0.1
      
     
    
     
      
       命令解说:筛选出
      
     
     
      
       目的地址
      
     
     
      
       是
      
     
     
      
       10.255.0.1
      
     
     
      
       的数据包
      
     
     。
    
 
      
     根据MAC地址进行筛选
    
     命令汇总:
    
     
      eth
     
     
      
       .addr
      
     
     
      ==20:dc:e6:f3:78:cc
     
    
     
      eth
     
     
      
       .src
      
     
     
      ==20:dc:e6:f3:78:cc
     
    
     
      eth
     
     
      
       .dst
      
     
     
      ==20:dc:e6:f3:78:cc
     
    
     1.根据MAC地址进行筛选
    
     
      使用命令:
     
     
      
       eth.addr==20:dc:e6:f3:78:cc
      
     
    
     
      命令解说:筛选出MAC地址是
     
     
      
       20:dc:e6:f3:78:cc
      
     
     
      的数据包,包括源MAC地址或者目的MAC地址使用的是
     
     
      
       20:dc:e6:f3:78:cc
      
     
     
      的全部数据包。
     
    
 
      
     
      2.根据源MAC地址筛选
     
    
     
      使用命令:
     
     
      
       eth.src==20:dc:e6:f3:78:cc
      
     
    
     
      命令解说:筛选出
     
     
      
       源MAC
      
     
     
      地址是
     
     
      
       20:dc:e6:f3:78:cc
      
     
     
      的数据包
     
    
     
      3.根据目的MAC地址筛选
     
    
     
      使用命令:
     
     
      
       eth.dst==20:dc:e6:f3:78:cc
      
     
    
     
      命令解说:筛选出
     
     
      
       目的MAC
      
     
     
      地址是
     
     
      
       20:dc:e6:f3:78:cc
      
     
     
      的数据包
     
    
     端口过滤
    
     
      
       如过滤80端口,在Filter中输入,
      
     
     
      
       tcp.port==80
      
     
     
      
       ,这条规则是把
      
     
     
      
       源端口和目的端口
      
     
     
      
       为80的都过滤出来。
      
     
    
     
      
       使用
      
     
     
      
       tcp.dstport==80
      
     
     
      
       只过滤目的端口为80的,
      
     
     
      
       tcp.srcport==80
      
     
     
      
       只过滤
      
     
     
      
       源端口
      
     
     
      
       为80的包;
      
     
    
     命令汇总:
    
     
      
       tcp.port==80
      
     
     
      
       //根据
      
     
     
      
       TCP端口
      
     
     
      
       筛选数据包,包括
      
     
     
      
       源端口或者目的端口
      
     
    
     
      
       tcp.dstport==80
      
     
     
      
       //筛选
      
     
     
      
       tcp协议
      
     
     
      
       的
      
     
     
      
       目标端口
      
     
     
      
       为
      
     
     
      
       80
      
     
     
      
       的流量包
      
     
    
     
      
       tcp.srcport==80
      
     
     
      
       //筛选
      
     
     
      
       tcp协议
      
     
     
      
       的
      
     
     
      
       源端口
      
     
     
      
       为
      
     
     
      
       80
      
     
     
      
       的流量包
      
     
    
     
      
       udp.port==4010
      
     
     
      
       //根据
      
     
     
      
       UDP端口
      
     
     
      
       筛选数据包,包括
      
     
     
      
       源端口或者目的端口
      
     
    
     
      
       udp.srcport==4010
      
     
     
      
       //筛选
      
     
     
      
       UDP协议
      
     
     
      
       的
      
     
     
      
       目标端口
      
     
     
      
       为
      
     
     
      
       4010
      
     
     
      
       的流量包
      
     
    
     
      
       udp.dstport==4010
      
     
     
      
       //筛选
      
     
     
      
       UDP协议
      
     
     
      
       的
      
     
     
      
       源端口
      
     
     
      
       为
      
     
     
      
       4010
      
     
     
      
       的流量包
      
     
    
     
      1.筛选TCP端口
     
    
     
      使用命令:
     
     
      
       tcp.port==80
      
     
    
     
      命令解说:筛选出TCP端口是80通信的数据包,包括源端口使用TCP 80或者目的端口使用tcp 80端口的数据包
     
    
 
      
     
      2.筛选目的端口数据包
     
    
     
      使用命令:
     
     
      
       tcp.dstport==80
      
     
    
     
      命令解说:筛选出目的端口使用的是TCP 80通信的数据包
     
    
 
      
     3.
     
      筛选源端口数据包
     
    
     
      使用命令:
     
     
      
       tcp.srcport==80
      
     
    
     
      命令解说:筛选出源端口是采用tcp 80端口的数据包。
     
    
     通讯协议进行筛选
    
根据通讯协议进行筛选数据包,例如http协议、ftp协议等等。常用协议有下:
     
      
       udp
      
     
    
     
      
       tcp
      
     
    
     
      
       arp
      
     
    
     
      
       icmp
      
     
    
     
      
       smtp
      
     
    
     
      
       pop
      
     
    
     
      
       dns
      
     
    
     
      
       ip
      
     
    
     
      
       ssl
      
     
    
     
      
       http
      
     
    
     
      
       ftp
      
     
    
     
      
       telnet
      
     
    
     
      
       ssh
      
     
    
     
      
       rdp
      
     
    
     
      
       rip
      
     
    
     
      
       ospf
      
     
    
这里就拿http举例了
     
      http请求筛选
     
    
     
      1.筛选出http协议数据包
     
    
协议筛选相对来说比较简单,直接在过滤窗口(filter)输入协议即可。例如筛选出http协议的数据如下图:
 
      
     
      2.筛选出http的GET数据包
     
    
     
      使用命令:
     
     
      
       http.request.method==GET
      
     
    
     
      命令解说:筛选出http协议采用get方式的数据包。注意
     
     
      
       GET一定要写成大写
      
     
     
      ,否则筛选不出来的。
     
    
 
      
     3.筛选出http的POST数据包
    
     
      使用命令:
     
     
      
       http.request.method==POST
      
     
    
     
      命令解说:筛选出采用http协议的post方式的数据包,注意
     
     
      
       POST参数一定要写成大写
      
     
     
      的,否则筛选不出来数据。
     
    
 
      
     4.筛选HTTP请求的指定URL
    
     
      指定URI:
     
     
      
       http.request.uri==“/img/logo-edu.gif
      
     
     
      ”
     
    
     
      筛选HTTP请求的URL为/img/logo-edu.gif的流量包
     
    
     5.筛选HTTP内容为/FLAG的流量包
    
     
      请求或相应中包含特定内容:
     
     
      
       http contains “FLAG”
      
     
     
     
    
     
      筛选HTTP内容为/FLAG的流量包
     
    
     
      包长度筛选:
     
    
     
      udp.length ==20 筛选长度为20的udp流量包
     
    
     
      tcp.len >=20 筛选长度大于20的tcp流量包
     
    
     
      ip.len ==20 筛选长度为20的IP流量包
     
    
     
      frame.len ==20 筛选长度为20的整个流量包
     
    
     逻辑表达式筛选
    
     逻辑表达式汇总:
    
     
      
       || //逻辑或
      
     
    
     
      
       && //逻辑与
      
     
    
     
      
       ! //逻辑非
      
     
    
     
      1.逻辑
     
     
      
       与
      
     
     
      筛选方法
     
    
     
      使用命令:
     
     
      
       ip.src==192.168.1.122
      
     
     
      
       &&
      
     
     
      
       ip.dst==121.114.244.119
      
     
    
     
      命令解说:筛选出源ip地址是192.168.1.122并且目的地址是121.114.244.119的数据包。在使用的时候也可以用括号进行包含区分,上面的命令也可以等价于以下命令
     
    
     
      
       (ip.src==192.168.1.122)
      
     
     
      
       &&
      
     
     
      
       (ip.dst==121.114.244.119)
      
     
    
 
      
     
      2.逻辑
     
     
      
       或
      
     
     
      筛选
     
    
     
      使用命令:
     
     
      
       ip.src==192.168.1.122
      
     
     
      
       ||
      
     
     
      
       ip.src==182.254.110.91
      
     
    
     
      命令解说:筛选出
     
     
      
       源IP地址是
      
     
     
      
       192.168.1.122
      
     
     
      
       或者源ip地址是
      
     
     
      
       182.254.110.91
      
     
     
      的数据
     
    
 
      
     
      3.逻辑
     
     
      
       非
      
     
     
      筛选
     
    
     
      使用命令:
     
     
      
       !
      
     
     
      
       (ip.addr==192.168.1.122)
      
     
    
     
      命令解说:筛选出
     
     
      
       不是
      
     
     
      
       192.168.1.122
      
     
     
      的数据包。
     
    
 
      
     
      数据包搜索:
     
    
     
      在wireshark界面按
     
     
      
       “Ctrl+F”
      
     
     
      ,可以进行关键字搜索:
     
    
 
      
     
      Wireshark的搜索功能支持正则表达式、字符串、十六进制等方式进行搜索,通常情况下直接使用字符串方式进行搜索。
     
    
 
      
     
      搜索栏的左边下拉,有分组列表、分组详情、分组字节流三个选项,分别对应wireshark界面的三个部分,搜索时选择不同的选项以指定搜索区域:
     
    
 
      
     分组列表:
    
 
      
     分组详情:
    
 
      
     分组字节流:
    
 
      
     
      数据包还原
     
    
     
      在wireshark中,存在一个
     
     
      
       交追踪流
      
     
     
      的功能,可以将HTTP或TCP流量
     
     
      
       集合在一起并还原成原始数据
      
     
     
      ,具体操作方式如下:
     
    
     
      选中想要还原的流量包,右键选中,选择追踪流– TCP流/UPD流/SSL流/HTTP流。
     
    
 
      可在弹出的窗口中看到被还原的流量信息:
 
      
     
      数据提取
     
    
     
      Wireshark支持提取通过
     
     
      
       http传输(上传/下载)
      
     
     
      的文件内容,方法如下:
     
    
     
      选中http文件传输流量包,在分组详情中找到
     
     
      
       data或者Line-based text data:text/html
      
     
     
      层,鼠标右键点击 – 选中 导出分组字节流。
     
    
 
      如果是菜刀下载文件的流量,需要删除分组字节流前开头和结尾的X@Y字符,否则下载的文件会出错。鼠标右键点击 – 选中 显示分组字节…
 
      在弹出的窗口中设置开始和结束的字节(原字节数开头加3,结尾减3)
 
      最后点击save as按钮导出。
     例题讲解:
    
安恒八月赛流量分析 (详细的解题过程和思路(mailtwo.pcap,mailtwo1.pcap,vpnone.pcap,vpntwo.pcap,mailtone.pcap,mailtwo.pcap)
 
       
      
     
      题目背景
     
    
某公司内网网络被黑客渗透,简单了解,黑客首先攻击了一台web服务器,破解了后台的账户密码,随之利用破解的账号密码登陆了mail系统,然后获取了vpn的申请方式,然后登陆了vpn,在内网pwn掉了一台打印机,请根据提供的流量包回答下面有关问题
     
      关卡列表
     
    
1 某公司内网网络被黑客渗透,请分析流量,给出黑客使用的扫描器
2 某公司内网网络被黑客渗透,请分析流量,得到黑客扫描到的登陆后台是(相对路径即可)
3 某公司内网网络被黑客渗透,请分析流量,得到黑客使用了什么账号密码登陆了web后台(形式:username/password)
4 某公司内网网络被黑客渗透,请分析流量,得到黑客上传的webshell文件名是,内容是什么,提交webshell内容的base编码
5 某公司内网网络被黑客渗透,请分析流量,黑客在robots.txt中找到的flag是什么
6 某公司内网网络被黑客渗透,请分析流量,黑客找到的数据库密码是多少
7 某公司内网网络被黑客渗透,请分析流量,黑客在数据库中找到的hash_code是什么
     8 某公司内网网络被黑客渗透,请分析流量,黑客破解了账号
     
      ijnu@test.com
     
     得到的密码是什么
    
9 某公司内网网络被黑客渗透,请分析流量,被黑客攻击的web服务器,网卡配置是是什么,提交网卡内网ip
10 某公司内网网络被黑客渗透,请分析流量,黑客使用了什么账号登陆了mail系统(形式: username/password)
11某公司内网网络被黑客渗透,请分析流量,黑客获得的vpn的ip是多少
     
      解析过程及知识点
     
    
     
      1.请分析流量,给出黑客使用的扫描器
     
    
     
      扫描器类型
     
    
     ❤
     
      
       awvs:
      
     
     
      acunetix
     
    
     ❤
     
      
       netsparker:
      
     
     
      netsparker
     
    
     ❤
     
      
       appscan:
      
     
     
      Appscan
     
    
     ❤
     
      
       nessus:
      
     
     
      nessus
     
    
     ❤
     
      
       sqlmap
      
     
     
      :sqlmap
     
    
     
      既然要找扫描器 就以上的几种 常用的扫描器也就这几个:
     
     
      
       awvs,appscan,nessus
      
     
    
     
      第一步肯定先打开webone.pcap了 我们先按照协议类型排序一下
     
    
     
      先过滤一下http
     
    
 
       
      编辑
发现有acunetix的痕迹
acunetix就是扫描器awvs的特征
为了验证猜想
我们再使用
     
      http contains “wvs” 或者 http contains acunetix 过滤一下
     
    
 
      
     
      证实了黑客使用的扫描器就是awvs
     
    
     
      2 .请分析流量,得到黑客扫描到的登陆后台是(相对路径即可)
     
    
常见后台地址
❤admin
❤manager
❤login
❤system
     我们可以尝试去直接直接过滤地址
     
      
       http contains “admin”
      
     
    
 
      
     我们就会发现 登陆的尝试字段
     
      
       admin/login.php?rec=login
      
     
    
     
      其次
     
     我们可以从登录后台的方法去判断
    
登录后台的方法无非就两种 post和get
因为get的方法不安全 在提交url的时候会有问题
所以第一步,我们基本可以确定登录后台的方法百分之99就是POST方法
     这里我们使用
     
      http.request.method==”POST”
     
     POST大写
    
 
      
     我们依然可看到他的
     
      
       登录地址是admin
      
     
    
如果还不确定
     所以我们
     
      下一步
     
     就是去追踪tcp流 我们只要看到
     
      302重定向,就表示登录成功了
     
    
     
      对有rec=login的流量进行追踪
     
    
 
       
      这样也可以确定他的登录地址
     
      3.请分析流量,得到黑客使用了什么账号密码登陆了web后台(形式:username/password)
     
    
因为我们不可能一个一个的去追踪tcp流
根据上一个题的结果
 
      我们可以清楚的知道
黑客的ip是192.168.94.59,rec=login
知道地址我们就可以直接这样过滤
     
      http.request.method==”post” && http contains “rec=login” && ip.src==19.168.94.59
     
    
根据以往的经验 直接去查看最后一个包
 
       
       
       
      
     
      4 .请分析流量,得到黑客上传的webshell文件名是,内容是什么,提交webshell内容的base编码
     
    
上传文件嘛 post 源地址 还有协议http
所以我们可以先使用这句话过滤
     
      http.request.method==”post” && ip.src==192.168.94.59 && http
     
    
 
      
     
      你们要是仔细观察就会发现这里是有问题的,
     
    
     
      一般来说 一个正常的网站,images下放的是图片
     
    
     
      但这里放了一个
     
     
      
       a.php
      
     
     
      很让人怀疑是一句话木马
     
    
     
      所以怀疑这里大概率是有问题了,我们对其中一个
     
     
      
       进行tcp追踪
      
     
    
 
      看一下这就很明显了
     
      
       一句话木马的特征,1234为传递值 eval是一句话木马的函数 base64加密过的内容
      
     
    
 
      
     把
     
      
       
        base64的内容破译
       
      
     
     出来很容易知道就是
     
      
       一句话木马
      
     
    
     再过滤一下
     
      
       tcp contains “<?php @eval”
      
     
    
将得到内容了
 
      
     
      
       (当然你如果判断了是一句木马的话,因为他包括eval函数 所以最开始可以直接使用下面这句话去过滤
      
     
    
     
      
       http contains “eval” and http.request.method==”post”
      
     
     
      
       )
      
     
    
     
      5.请分析流量,黑客在robots.txt中找到的flag是什么
     
    
他既然想既然想找到robots.txt内的flag是什么
那我们直接去过滤这个文件就行了 命令如下
     
      
       http contains “robots.txt”
      
     
    
 
      然后对其 追踪tcp流
 
      得到flag
     
      6.请分析流量,黑客找到的数据库密码是多少
     
    
     这里思路其实就很明确了 (
     
      数据库密码就涉及到三个关键字
     
     ,分别是
     
      
       mysql、database、password)
      
     
    
要找密码就代表数据库已经登录成功了 那个http的响应码一定是200 并且一般会包含database
     逐一查看
     
      
       响应码为200
      
     
     的数据包,即可找到数据库密码
    
     
      
       http.response.code == 200 && http contains “database”
      
     
    
 
      
     
      直接追踪tcp流
     
    
 
      得到密码
在这里补充一点
     
      
       (Robots是站点与spider沟通的重要渠道,站点通过robots文件声明本网站中不想被搜索引擎收录的部分或者指定搜索引擎只收录特定的部分。搜索引擎使用spider程序自动访问互联网上的网页并获取网页信息。spider在访问一个网站时,会首先会检查该网站的根域下是否有一个叫做 robots.txt的纯文本文件,这个文件用于指定spider在您网站上的抓取范围。您可以在您的网站中创建一个robots.txt,在文件中声明 该网站中不想被搜索引擎收录的部分或者指定搜索引擎只收录特定的部分。)
      
     
    
     
      7.请分析流量,黑客在数据库中找到的hash_code是什么
     
    
     
      打开webtwo.pcap(不想麻烦可以在最开始把两个流量包合在一起)
     
    
     
      这道题也是思路清楚的
     
    
     
      直接
     
     
      
       过滤关键字hash_code
      
     
     
      就行因为上一个题我们已经知道数据库IP了
     
    
 
      所以我们使用下面的语句
     
      
       http contains “hash_code” && ip.src == 10.3.3.101
      
     
    
 
       
      对其tcp流追踪
 
      
     
      8.请分析流量,黑客破解了账号
     
     
      ijnu@test.com
     
     
      得到的密码是什么
     
    
先直接过滤账号
     
      tcp contains “
     
     
      
       ijnu@test.com
      
     
     
      ”
     
    
 
      tcp流追踪 或者看mysql协议
 
      
Md5解码
 
      
     结果
     
      
       edc123@#
      
     
    
     
      9.请分析流量,被黑客攻击的web服务器,网卡配置是是什么,提交网卡内网ip
     
    
     
      我们再打开webone
     
    
     
      网卡问题 无非就那几个
     
     
      
       eth0 eth1 ens33 lo
      
     
     等等
    
所以我们直接进行关键字搜索
     
      
       tcp contains “eth0”
      
     
    
 
      追踪tcp流
 
      
     我们可以知道,
     
      
       外网ip是192.168.32.189,而内网ip是10.3.3.100
      
     
    
     
      10.请分析流量,黑客使用了什么账号登陆了mail系统(形式: username/password)
     
    
使用到环境是mailtwo.pcap和mailtwo1.pcap
一开始利用POST和mail过滤了下
     
      
       http.request.method ==POST && http contains “mail”
      
     
    
 
      发现黑客进行大量的登陆尝试,随便看一个 找了一个密码,先看看是什么加密的
 
      
     
      
       不是base64,应该是AES加密,但需要找到加密的密钥,还有偏移量,所以还是得重新过滤在服务器返回的信息中去查找,就先只过滤一下http,随便找一个状态码为200的追踪下TCP流
      
     
    
     
      
       在mailtwo.pcap中过滤http,第三条数据的Cookie中发现了
      
     
     
      
       login_name=wenwenni
      
     
     
      
       字段,并且是action=logout。
      
     
    
 
      
     
      继续向下读取数据,发现下一个mail系统的数据是28号,然后又到了登陆界面的35号数据,在其中发现了密码的加密函数:
     
    
 
      
     取出来发现是AES的CBC加密,填充格式为ZeroPadding,密钥为字符串
     
      1234567812345678
     
     的hash值,偏移量为
     
      1234567812345678
     
    
     
      
       Var key_hash = CryptoJS.MD5(‘1234567812345678’);
      
     
    
     
      
       var key = CryptoJS.enc.Utf8.parse(key_hash);
      
     
    
     
      
       var iv = CryptoJS.enc.Utf8.parse(‘1234567812345678’);
      
     
    
     
      
       form.password.value = CryptoJS.AES.encrypt(form.password.value, key, { iv: iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding});
      
     
    
     在下一次的42号数据请求中,发现登录用户依然为wenwenni,因为这个用户刚刚推出,所以猜测是使用cookie登录的,查看一下返回数据44号中出现
     
      
       {“success”:true}
      
     
     ,代表登陆成功。
    
 
       
       
      既然这样的话,我们使用以下语句过滤一下,
     
      
       (http contains “{\\”success\\”:true}” or http.request.method==”POST”) and ip.addr==192.168.94.59
      
     
    
     
      显示出post请求成功的返回结果,发现是在爆破,并且直到mailtwo.pcap的最后也未爆破成功。于是打开mailtwo1.pcap,用相同的过滤条件试试,发现几条数据,从后往前看,发现No.18152是登陆成功的返回结果,那对应的No.17126则就是正确的加密后的密码。
     
    
 
      
     进行
     
      aes解密
     
     即可得到admin账号的密码
    
 
       
      
     
      11.请分析流量,黑客获得的vpn的ip是多少
     
    
     
      PPTP原理
     
    
     ❤
     
      PPTP客户机使用动态分配的TCP端口号,与PPTP服务器使用的保留TCP端口号123建立控制连接
     
    
     
      (PPTP控制连接携带PPTP呼叫控制盒管理信息,用于维护PPTP隧道)。
     
    
     ❤
     
      客户端与服务器通过控制连接来创建、维护、终止一条隧道。
     
    
     ❤
     
      PPP帧的有效载荷经过加密、压缩或是两者的混合处理。
     
    
     ❤
     
      使用通用路由封装GRE对PPP帧进行封装。
     
    
     ❤
     
      将PPP帧封装进IP数据报文中。通过IP网络如Internet或其他企业准用INTRANET灯发送给PPTP服务器。
     
    
     ❤
     
      服务器接收到PPTP数据包后进行常规处理。
     
    
我们打开vpnone.pcap,发现
 
      vpnone.pcap应该只是在尝试登陆VPN,再来查看下vpntwo.pcap
在统计——>IPV4中发现
 
       
      
     
      10.3.4.96 、10.3.4.55 、10.3.4.3
     
     出现的次数最多
    
先过滤一下SMB,发现
 
      所以10.3.4.96是SMB服务器,排除,再来查询下10.3.4.55
     
      ip.addr==10.3.4.55
     
    
 
      10.3.4.3先PING10.3.4.55
     
      
       总的来说
      
     
    
     
      
       第一个包在尝试登陆vpn,第二个包登陆上了vpn,然后第二个包 从 统计->对话 发现10.3.4.3和10.3.4.96发出的包比较多,而且过滤一下smb发现10.3.4.96是smb服务器,筛选10.3.4.55(另一个流量大点的地址)发现是10.3.4.3先ping它的,基本可以确定10.3.4.3就是黑客的vpn IP
      
      。
     
    
     加油各位( •̀ ω •́ )y 期待与君再相逢 ❤
    
 
