ssldump:强大的SSL/TLS流量分析神器!全参数详细教程!Kali Linux 教程!

简介

SSLDUMP是SSLV3/TLS网络协议分析仪。它标识了TCP 所选网络接口上的连接并尝试解释它们作为SSLV3/TLS流量。当它标识SSLV3/TLS流量时解码记录并以文本形式显示以显示记录。如果 提供适当的键合材料,它也将解密连接并显示应用程序数据流量。也是如此包括JSON输出选项,支持 JA3 和IPv6。 

SSLDUMP基于TCPDUMP,网络监视和数据采集工具。 

安装

Kali Linux 默认已安装好 ssldump 工具了。也可以通过以下命令进行安装

 sudo apt install ssldump

使用

必须以 root 权限去运行该工具。

1. -h

查看帮助文档

ssldump -h

2. 常规使用

ssldump -i eth0

3. -a

打印裸 TCP ACK(用于观察 Nagle 行为)。

ssldump -a

4. -A

打印所有记录字段(默认情况下,ssldump 会选择最有趣的字段)。

ssldump -A -i eth0

5. -d

显示应用程序数据流量。这通常意味着对其进行解密,但是当使用 -d 时,ssldump 还会在 SSL 会话启动之前解码应用程序数据流量。这允许您查看 HTTPS CONNECT 行为以及 SMTP STARTTLS。作为副作用,由于 ssldump 无法判断纯文本是 SSL 连接启动之前的流量还是只是常规 TCP 连接,因此您可以使用 ssldump 嗅探任何 TCP 连接。ssldump 将自动检测 ASCII 数据并将其直接显示在屏幕上。非 ASCII 数据显示为十六进制转储。另请参阅 -X。

ssldump -d -i eth0

6. -e

打印绝对时间戳而不是相对时间戳。

ssldump -e -i eth0

7. -F

指定执行连接池清理的数据包数量(以数据包为单位,默认值:100)。

ssldump -F 100 -i eth0

8. -H

打印完整的 SSL 数据包头。

ssldump -H -i eth0

9. -i interface

使用接口作为嗅探 SSL/TLS 流量的网络接口。

ssldump -i eth0

10. -j

将输出格式切换为 JSON。只有 stdout 受此切换影响。

ssldump -j -i eth0

11. -k keyfile

使用密钥文件作为 SSL 密钥文件的位置(OpenSSL 格式)以前版本的 ssldump 会自动查找 ./server.pem。现在您必须每次都指定密钥文件。

ssldump -i eth0 -k server.key

12. -l sslkeylogfile

使用 sslkeylogfile 作为 SSLKEYLOGFILE 的位置(https://developer.mozilla.org/en-
US/docs/Mozilla/Projects/NSS/Key_Log_Format)。

ssldump -i eth0 -l sslkey.log

13. -n

不要尝试从 IP 地址解析主机名。

ssldump -n -i eth0

14. -N

当 ASN.1 出现时尝试解析它,例如在证书和 DN 中。

ssldump -N -i eth0

15. -p password

使用 password 作为 SSL 密钥文件密码。

ssldump -i eth0 -k keyfile -p password

16. -P

不要将接口置于混杂模式。

ssldump -P -i eth0

17. -q

不要解码单个摘要行以外的任何记录字段。(安静模式)。

ssldump -q -i eth0

18. -r file

文件而不是网络读取数据。旧的 -f 选项仍然有效,但已弃用,可能会在下一个版本中被删除。

ssldump -i eth0 -r file

19. -S [ crypto | d | ht | H ]

指定 ssldump 的 SSL 标志。这些标志包括:

crypto 打印加密信息。

d 打印已解码的字段。

ht 打印握手类型。

H 打印握手类型和突出显示。

ssldump -i eth0 -S crypto 

ssldump -i eth0 -S d

ssldump -i eth0 -S ht 

ssldump -i eth0 -S H

20. -t

指定连接池中引用的非活动连接的 TTL(以秒为单位,默认值:100)。

ssldump -t 100 -i eth0

21. -T

打印 TCP 标头。

ssldump -T -i eth0

22. -v

显示版本和版权信息。

ssldump -v

23. -w outputpcap

使用 outputpcap 作为解密数据包的目标

ssldump -i eth0 -w outputpcap

24. -x

以十六进制打印每个记录,并对其进行解码。

ssldump -x -i eth0

25. -X

使用 -d 选项时,二进制数据将自动打印在两列中,左侧为十六进制转储,右侧为可打印字符。-X 抑制可打印字符的显示,从而使十六进制数据更容易剪切和粘贴到其他程序中。

ssldump -X -i eth0

26. -y

使用 nroff/troff 装饰输出以进行处理。对于普通用户来说用处不大。

ssldump -y -i eth0

表达式

选择 ssldump 将检查哪些数据包。从技术上讲,ssldump 支持 PCAP 和 tcpdump 的完整表达式语法。实际上,此处的描述摘自 tcpdump 手册页。但是,由于 ssldump 需要检查完整的 TCP 流,因此大多数 tcpdump 表达式将选择 ssldump 将忽略的流量混合。这里仅列出不会导致不完整 TCP 流的表达式。

表达式由一个或多个原语组成。原语通常由一个 id(名称或数字)组成,前面是一个或多个限定符。有三种不同类型的限定符:

type        限定符说明 id 名称或数字指的是什么类型。可能的类型是主机网络端口
例如,“host foo”、“net 128.3”、“port 20”。如果没有类型限定符,则假定为 host(主机)

dir           限定符指定到 id 和/或从 id 的特定传输方向。可能的方向是 srcdstsrc dstsrc dst。例如,“src foo”、“dst net 128.3”、“src 或 dst port ftp-data”。如果没有目录限定符,则假定为 src 或 dst。对于“空”链接层(即点对点协议,如 slip),可以使用入站出站限定符来指定所需的方向。

通过使用单词 andornot 来组合原语,可以构建更复杂的过滤器表达式。例如,“host foo and not port ftp and not port ftp-data”。为了节省输入,可以省略相同的限定符列表。例如,“tcp dst port ftp or ftp-data or domain”与“tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain”完全相同。

允许的原语有:

dst host host
如果数据包的 IPv4/v6 目标字段为 host,则为 True,host 可以是地址或名称。

src host host
如果数据包的 IPv4/v6 源字段为 host,则为 True。

host host
如果数据包的 IPv4/v6 源或目标为 host,则为 True。上述任何 host 表达式都可以在前面加上关键字 iparprarpip6,例如:
        ip host host
相当于:
        ether proto \ip and host host
如果 host 是具有多个 IP 地址的名称,则将检查每个地址是否匹配。

ether dst ehost
如果以太网目标地址为 ehost,则为 True。
Ehost 可以是来自 /etc/ethers 的名称,也可以是数字(有关数字格式,请参阅 ethers(3N))。

ether src ehost
如果以太网源地址是 ehost,则为 True。

ether host ehost
如果以太网源或目标地址是 ehost,则为 True。

gateway host
如果数据包使用 host 作为网关,则为 True。即,以太网源或目标地址是 host,但 IP 源和 IP 目标都不是 host
Host 必须是名称,并且必须在 /etc/hosts 和 /etc/ethers 中找到。(等效表达式是

        ether host ehost and not host host

,可以与 host / ehost 的名称或数字一起使用。)此语法目前在启用 IPv6 的配置中不起作用。

dst net net
如果数据包的 IPv4/v6 目标地址具有 net 的网络号,则为 True。Net 可以是来自 /etc/networks 的名称,也可以是网络号(有关详细信息,请参阅 networks(4))。

src net net
如果数据包的 IPv4/v6 源地址具有网络号 net,则为 True。

net net
如果数据包的 IPv4/v6 源地址或目标地址的网络号为 net,则为 True。

net net mask mask
如果 IP 地址与特定网络掩码匹配,则为 True。可以使用 srcdst 进行限定。请注意,此语法对 IPv6 net 无效。

net net/len
如果 IPv4/v6 地址与网络掩码 len 位宽匹配,则为 True。可以使用 srcdst 进行限定。

dst port port
如果数据包为 ip/tcp、ip/udp、ip6/tcp 或 ip6/udp,并且目标端口值为 port,则为 True。port 可以是数字,也可以是 /etc/services 中使用的名称(请参阅 tcp(4P) 和 udp(4P))。如果使用名称,则将同时检查端口号和协议。如果使用数字或不明确的名称,则仅检查端口号(例如,dst port 513 将打印 tcp/login 流量和 udp/who 流量,port domain 将打印 tcp/domain 和 udp/domain 流量)。

src port port
如果数据包的源端口值为 port,则为 True。

port port
如果数据包的源端口或目标端口为 port,则为 True。上述任何端口表达式都可以在前面加上关键字 tcpudp,例如:
        tcp src port port
仅匹配源端口为 port 的 tcp 数据包。

可以使用以下方法组合原语:

一组带括号的原语和运算符
(括号是 Shell 特有的,必须转义)。

否定(“”或“not”)。

连接(“&&”或“and”)。

交替(“||”或“or”)。

否定具有最高优先级。交替和连接具有同等优先级,并且从左到右关联。请注意,现在需要显式 and 标记(而不是并置)来进行连接。

如果给出的标识符没有关键字,则假定使用最新的关键字。例如,

        not host vs and ace

        not host vs and host ace

的缩写,不应与

        not ( host vs or ace )

混淆。

表达式参数可以作为单个参数或多个参数传递给 ssldump,以更方便的为准。通常,如果表达式包含 Shell 元字符,则将其作为单个带引号的参数传递会更容易。多个参数在解析之前用空格连接起来。

综合使用

1. 要监听接口 eth0 端口 443 上的流量

ssldump -i eth0 port 443

2. 要监听端口 443 上到服务器 romeo 的流量

ssldump -i eth0 port 443 and host romeo

3. 要将输出格式切换为 JSON

ssldump -ANH -j -i eth0 port 443 and host romeo

4. 要解密到主机 romeo server.pem 和密码 foobar 的流量

ssldump -Ad -k ~/server.pem -p foobar -i eth0 host romeo

输出格式

所有输出都打印到标准输出。

ssldump 使用如下行打印每个新 TCP 连接的指示

New TCP connection #2: iromeo.rtfm.com(2302) <-> sr1.rtfm.com(4433)

发送第一个 SYN 的主机打印在左侧,响应的主机打印在右侧。通常,这意味着 SSL 客户端打印在左侧,SSL 服务器打印在右侧。在本例中,我们有一个从 iromeo.rtfm.com (端口 2303) 到 sr1.rtfm.com (端口 4433) 的连接。为了允许用户解开来自不同连接的流量,每个连接都进行了编号。这是连接 2

每个 SSL 记录的打印输出都以记录行开头。此行包含连接和记录号、时间戳和记录类型,如下所示:

2 3  0.2001 (0.0749)  S>C  Handshake      Certificate

这是连接 2 上的记录 3。第一个时间戳是自连接开始以来的时间。第二个是自上一条记录以来的时间。两者都以秒为单位。

记录行中的下一个字段是记录的去向。C>S 表示从客户端传输到服务器的记录,S>C 表示从服务器传输到客户端的记录。
ssldump 假设传输第一个 SYN 的主机是 SSL 客户端(这几乎总是正确的)。

下一个字段是记录类型,可以是 HandshakeIAlertChange CipherSpecapplication_data 之一。最后,ssldump 可能会在行的其余部分打印记录特定的数据。对于 Handshake (握手记录),它会打印握手消息。因此,此记录是 Certificate (证书)消息。

ssldump 选择某些记录类型进行进一步解码。这些记录类型已被证明对调试最有用:

ClientHello - 版本、提供的密码套件、会话 ID(如果提供)

ServerHello - 版本、session_id、所选密码套件、压缩方法

Alert - 类型和级别(如果可获得)

可以使用 -A-d-k-p 标志对各种记录进行更全面的解码。

解密

如果满足以下两个条件,ssldump 可以解密两个主机之间的流量:
1. ssldump 拥有密钥。
2. 使用了静态 RSA。
在任何其他情况下,一旦加密开始,ssldump 将只能确定记录类型。考虑以下跟踪部分。

       1 5  0.4129 (0.1983)  C>S  Handshake      ClientKeyExchange
       1 6  0.4129 (0.0000)  C>S  ChangeCipherSpec
       1 7  0.4129 (0.0000)  C>S  Handshake
       1 8  0.5585 (0.1456)  S>C  ChangeCipherSpec
       1 9  0.6135 (0.0550)  S>C  Handshake
       1 10 2.3121 (1.6986)  C>S  application_data
       1 11 2.5336 (0.2214)  C>S  application_data
       1 12 2.5545 (0.0209)  S>C  application_data
       1 13 2.5592 (0.0046)  S>C  application_data
       1 14 2.5592 (0.0000)  S>C  Alert

请注意,ClientKeyExchange 消息类型已打印,但其余的握手消息没有类型。这些是完成的消息,但由于它们是加密的,ssldump 只知道它们是握手类型。同样,如果记录 14 中的警报发生在握手期间,它的类型和级别也会被打印出来。但是,由于它是加密的,我们只能知道它是一个警报。

总结

ssldump 是一款强大的 SSL/TLS 流量分析工具,可用于解密和分析 HTTPS 连接。通过结合私钥或 SSLKEYLOGFILE,它能帮助安全研究人员深入了解 TLS 握手及加密通信,为网络安全测试提供有力支持。

在此特别强调,本教程仅在合法授权的情况下进行测试和研究,请勿用于其他用途。未经授权使用此类工具可能会侵犯他人隐私,触犯相关法律,任何因此引发的法律或利益纠纷与本人无关。

欢迎各位大佬,小白来找我交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值