Capture Package 抓包

常用测试软件

  • wireshark: 常用图形化抓包软件
  • charles: MasOS上常用的抓包软件
  • tcpdump: Linux命令行常用抓包软件
  • tshark: Wireshark网络分析工具的命令行版本,用于分析捕获的网络数据包。Kali默认安装.

Wireshark抓https明文包

1.在系统配置环境变量 SSLKEYLOGFILE,比如设置 SSLKEYLOGFILE=C:\Users\xxxx.ssh\keys.log (Chrome会自行创建改文件,如果没有就手动创建,该文件存储ssl握手时的pre-master信息)。 2.打开Wireshark,编辑 -> 首选项(Ctrl+Shift+P)-> Protocols -> TLS,在 (Pre)-Master-Secret log filename中,填入上面设置的路径C:\Users\xxxx\.ssh\keys.log,重启Wireshark。 3.重新启动浏览器,使用Chrome或者Firefox,这两种浏览器会去查找环境变量SSLKEYLOGFILE,并将SSL的KEY写入文件当中去。 4.启动Wireshark的监听,用浏览器访问https服务,可发现Wireshark抓到的不再只是加密的TLS包,也有明文的https的请求信息(过滤ssl,点击HTTP中的Hypertext Transfer Protocol可以看到解密后的明文内容)。

为什么默认设置的Wireshark无法解密HTTPS数据

先了解https通信中client和server基本交互流程

tls_process

  • SSL Encrypted Alert消息,因为是加密的内容,所以单从 Wireshark 看不出警报的内容。
  • 但因为警报消息经常只是客户端用来提示服务端 SSL 传输结束,所以有时它只是 SSL 传输结束的一个信号。
  • 发出了 Encrypted Alert后客户端数据传输完毕,准备进入四次挥手断开 TCP 连接。
密钥交换算法

密钥交换算法目前常用的有RSA和Diffie-Hellman。
对于密钥交换使用RSA算法,pre-master-secret由客户端生成,并使用公钥加密传输给服务器。
对于密钥交换使用Diffie-Hellman算法,pre-master-secret则通过在Key Exchange阶段交换的信息,由各自计算出pre-master-secret。所以pre-master-secret没有存到硬盘,也没有在网络上传输,wireshark就无法获取session key,也就无法解密应用数据。那我们是否可以反向计算出pre-master-secret呢?理论上可以,但是非常困难。
对Diffie-Hellman算法感兴趣的可以参考https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

解决方法

通过下面几种方法来使wireshark能解密https数据包。
1. 中间人攻击;
2. 设置web服务器使用RSA作为交换密钥算法;
3. 如果是用chrome,firefox,可以设置导出pre-master-secret log,然后wireshark设置pre-master-secret log路径,这样就可以解密了。

P.S. 1和3在渗透测试过程中比较常用

Wireshark最常用的2种过滤器

  • 捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。

  • 显示过滤器(DisplayFilters):在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。

Wireshark过滤常用语法

tcp.payload contains "ping"  过滤tcp协议payload中包含字符串ping的包

pfcp    显示pfcp封包。支持的协议可以直接检索,比如resp

snmp || dns || icmp    显示SNMP或DNS或ICMP封包。 注意是或。

ip.addr == 10.1.2.1   显示源目IP为10.1.2.1的封包。

ip.src != 10.1.2.3 and ip.dst != 10.4.5.6    显示 源IP不等于10.1.2.3 且 目的IP不等于10.4.5.6 的封包

ip.src != 10.1.2.3 or ip.dst != 10.4.5.6    显示 源IP不等于10.1.2.3 或 目的IP不等于10.4.5.6 的封包

ip.src == 10.230.0.0/16    显示来自10.230网段的封包。

http.request.method == "POST"    显示POST请求方式的HTTP封包。

http.request.uri contains "abc"    显示HTTP请求URI中包含字符串"abc"的封包。

http.request.uri matches ".gif$"    显示HTTP请求URI中含有".gif"字符串,且以.gif结尾(4个字节)的封包 (备注:$是正则表达式中的结尾表示符)

http.host == "test.com"     显示请求的域名为test.com的http封包。

tcp.flags.syn == 0×02    显示包含TCP SYN标志的封包。

tcp.port == 25    显示源或目的端口号为25的TCP封包。

udp.dstport == 6666   显示目的端口号为6666的UDP封包。

# ftp filter

ftp.response.arg contains "MikroTik"    显示ftp响应中包含关键字 "MikroTik"的封包
ftp.response.code == 220                显示ftp响应码为220的数据包

# ssl filter
ip.addr == 192.168.1.9 && ssl           显示源目IP为192.168.1.9,且是使用SSL或TLS协议的数据包       

Wireshark显示源目端口

图形化设置,打开Wireshark图形化界面。

编辑 -> 首选项(Ctrl+Shift+P)-> 外观 -> 列,没有的话新增红框中的字段,勾选后点确定,保存设置。

显示源目端口

scapy解包时Wireshark报错 Wireshark is installed, but cannot read manuf

ref: https://github.com/secdev/scapy/issues/4280

报错信息:windows WARNING: Wireshark is installed, but cannot read manuf !

解决方法1:

I believe the manuf file is also no longer provided on Windows. You can manually install it with something like curl https://www.wireshark.org/download/automated/data/manuf -o 'C:\Program Files\Wireshark\manuf' to suppress the message WARNING: Wireshark is installed, but cannot read manuf !.

解决方法2:cmd执行也可以

Related wireshark forum comment suggests to download the file (as suggested by @wjholden), or to create it with tshark -G manuf.

You can do in terminal

PS> cd "C:\Program Files\Wireshark"
PS> tshark -G manuf > manuf

tshark从流量还原文件

从指定的PCAP文件中提取HTTP对象,并只分析TCP数据包。提取的HTTP对象将被保存在当前工作目录下的result子目录中。

tshark -r "{file_save_path}" --export-objects http,{export_dir} -Y "tcp"

e.g.
tshark -r "/tmp/download/x.pcap" --export-objects http,./result -Y "tcp"

# 参数解释

-r "/tmp/download/x.pcap"

这部分指定要分析的PCAP文件的路径和文件名。这是一个已捕获的网络数据包文件,tshark将从中读取数据包进行分析。

--export-objects http,./result

http,./result:表示要导出的对象类型和导出的目录。
http表示导出HTTP对象,./result表示将导出的对象保存在当前工作目录下的result子目录中。

-Y "tcp" 

表示只选择TCP数据包进行分析。

REF