流量分析-Wireshark -操作手册(不能说最全,只能说更全)
流量分析-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)).
关闭混杂模式即可,步骤如下:
将勾勾去掉即可
常⽤快捷键👍
keyboard | explan |
ctrl+m | 标记数据包 |
ctrl+shift+N | 跳到标记处 |
基于协议过滤⼿法👍
直接键⼊协议名称即可
filter | code |
http | 过滤出http 协议数据包 |
arp | 过滤出arp 协议数据包 |
mysql | 过滤出mysql 数据库查询与响应的数据包 |
tcp | 过滤出tcp 协议的数据包 |
nbns | 该协议记录了对应IP 的计算机名称 |
icmp | 过滤出icmp(ping) 协议数据包 |
icmp 协议数据包
关于 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 协议,望抛砖引⽟
filter code | explan |
&& | and 逻辑 |
|| | or 逻辑 |
== | 等于 |
!= | 不等于 |
ip.src eq | 过滤出为该源IP 的数据包 |
ip.dst eq | 过滤出为该⽬的IP 的数据包 |
tcp.port eq | 过滤出特定端⼝的TCP 数据包 |
udp.port eq | 过滤出特定端⼝的UDP 数据包 |
eth.src eq | 过滤出特定源MAC 的数据包 |
eth.dst eq | 过滤出特定⽬的MAC 的数据包 |
http.request.method == "" | 过滤出特定HTTP ⽅法的数据包 |
http.request.uri =="" | 过滤出为特定请求的URL ⽬录数据包 |
http contains “” | 模糊查询,类似全局搜索 |
http.response.code == | 过滤出相关HTTP 数据包中的对应响应码数据包 |
http.request.full_uri matches "/webmail/index.php*" | 以HTTP 协议为基础 URI(URL)的正则表达模式匹配 (可以看到其中有⼀个通配符 * ) |
mysql contains “” | 基于MySQL 协议的模糊查询 |
icmp.type eq 5 | 过滤icmp 协议类型为 5 的数据包 |
基于持续会话
主题可能没法解释这个⼿法,我们看⼀道题⽬
使⽤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。