【发布时间】:2022-01-20 17:40:45
【问题描述】:
我想在 我的服务器 上使用 scapy 解密 我的域 的 HTTPS 流量。
然后我有我的域的原始国际注册证书 (TLS1.3) 文件...
必须非常容易用 scapy 做到这一点,但我在任何地方都找不到任何解决方案,这太疯狂了。
例如,我尝试了这些解决方案,但它们不起作用,没有错误和崩溃:
- scapy-ssl_tls
- scapy-notebook2_tls
- TSHARK
- MITM 解决方案
- SSLDUMP
最后我编写一个示例代码但它低于错误,我尝试太多来修复它但无法理解问题和明确的解决方案:
值错误:密文长度必须等于密钥大小
import os, sys
import ssl
from scapy import *
from scapy.all import *
from scapy.layers import *
from scapy.layers.tls import *
from scapy.layers import inet
from scapy.layers.inet import *
import socket, select
import binascii
import io
from io import StringIO
load_layer("tls")
c = Cert("SSL/STAR_mydomain_com.crt")
k=PrivKey("SSL/private.key")
########### Unit-Test Encrypt/Decrypt Run OK ###########
#M = bytes("message to be encrypted".encode())
#enc = c.encrypt(M, t='oaep')
#print(enc)
#dec = k.decrypt(enc, t='oaep')
#print(dec)
while True:
s = sniff(filter="port 443", count=10)
ch_list = [p for p in s]
if len(ch_list)>0:
for pkt in ch_list:
p_layer = pkt.getlayer('IP')
src = p_layer.src
dst = p_layer.dst
if (src=='my-server-ip') or (dst=='my-server-ip'):
if ('TLSEncryptedContent' in str(type(pkt['TCP'].payload))):
########### any 3 below commands go in same error ##############
########### and i was try 'pss' instead of 'oaep' but same error
dec2 = k.decrypt(pkt['TCP'].payload, t='oaep')
#dec2 = k.decrypt(bytes(pkt['TCP'].payload), t='oaep')
#dec2 = k.decrypt(bytes(pkt['TCP'].payload).decode('UTF8', 'replace'), t='oaep')
print(dec2)
else:
print('...passed')
如果您有任何解决方案,请分享,我将测试并分享结果,没有否定分数。
注意:我不需要哲学,我对此有很多参考资料,我知道很多开发人员说这是不可能,并为此制定他们的哲学逻辑。如果您有答案,请分享代码 sn-p 参考,如果没有,请留下,因为有些小组解决了这个问题,但他们不分享他们的解决方案。坦克斯。
解决此问题但不共享其代码的示例组: https://docs.paloaltonetworks.com/pan-os/10-1/pan-os-admin/decryption/decryption-concepts/tlsv13-ssl-decryption-support.html
那么这是可能的,但是谁知道代码呢?
【问题讨论】:
-
我不太确定你在问什么。如果您想要类似 tshark 的东西,那么您必须拥有或编写与 tshark 使用的代码等效的代码。或者只是使用 tshark 的代码。
-
也许我的最终解决方案是自定义 tshark 源代码,但此时我正在用 Python+Scapy 编写一个巨大的 IDS/防火墙,我更喜欢用 scapy 库来解决我的问题。
-
我认为你正在尝试做的事情将非常困难。 Scapy/tshark 处理数据包边界。您将需要处理 TCP 重新排序、无序数据包、tls 消息和一整套其他东西。如果您同时拥有证书和密钥,则可以解密 RSA 会话,但对于使用临时密码(椭圆曲线)的会话则不可能这样做。即使对于 RSA,就像@president-james-k-polk 提到的那样,您几乎必须实现 tshark 正在做的事情来创建解密密钥。
-
我有私钥,但无法正确解密数据包...你有什么明确的解决方案吗?
-
@EyniKave 正如我所说,这不是一件容易的事。您必须基本上构建一个 tls 协议栈。首先,您在 tls 握手消息中累积所有 tls pkts。在交换期间,客户端发送密码规范消息,其中包括使用 svr 的公钥加密的 premaster secret。 svr 将使用私钥解密秘密。 svr 还发送更改密码规范,其中包括密钥材料的一侧。一旦双方拥有彼此的密钥材料,它们就会组合起来创建对称密钥,用于加密用户数据。省略了很多细节,但这非常复杂。
标签: python ssl https utf-8 scapy