【问题标题】:Scapy-ssl_tls: does crafting ssl layer packets require dport 443?Scapy-ssl_tls:制作 ssl 层数据包是否需要 dport 443?
【发布时间】:2016-07-20 09:07:09
【问题描述】:

我正在尝试使用 https 或 http 来创建流量

我在 dport 443 之外的 dport 上制作 ssl 层数据包时遇到问题。我在 dport 443 上使用原始数据制作普通数据包时也遇到问题。

我创建的第一个数据包有 tcp dport=443,当我使用 show2() 时,SSL 层出现

p = Ether()/IP(src="1.2.3.4", dst='4.3.2.1',flags="DF")/TCP(sport=12345, dport=443, flags="PA", ack=1111, seq=3222)/SSL(records=[TLSRecord()/TLSHandshake()])
p.show2()
###[ Ethernet ]###
  dst= 00:26:52:ce:5f:49
  src= 34:23:87:20:76:59
  type= IPv4
###[ IP ]###
     version= 4L
     ihl= 5L
     tos= 0x0
     len= 49
     id= 1
     flags= DF
     frag= 0L
     ttl= 64
     proto= tcp
     chksum= 0x30bd
     src= 1.2.3.4
     dst= 4.3.2.1
     \options\
###[ TCP ]###
        sport= 12345
        dport= https
        seq= 3222
        ack= 1111
        dataofs= 5L
        reserved= 0L
        flags= PA
        window= 8192
        chksum= 0x27d5
        urgptr= 0
        options= []
###[ SSL/TLS ]###
           \records\
            |###[ TLS Record ]###
            |  content_type= handshake
            |  version= TLS_1_0
            |  length= 0x4
            |###[ TLS Handshake ]###
            |     type= client_hello
            |     length= 0x0

我创建的第二个数据包与第一个数据包相同,只是它的 tcp dport=4443,但是当我使用 show2() 时,SSL 层由 Raw 重放

p2 = Ether()/IP(src="1.2.3.4", dst='4.3.2.1',flags="DF")/TCP(sport=12345, dport=4443, flags="PA", ack=1111, seq=3222)/SSL(records=[TLSRecord()/TLSHandshake()])
p2.show2()

###[ Ethernet ]###
  dst= 00:26:52:ce:5f:49
  src= 34:23:87:20:76:59
  type= IPv4
###[ IP ]###
     version= 4L
     ihl= 5L
     tos= 0x0
     len= 49
     id= 1
     flags= DF
     frag= 0L
     ttl= 64
     proto= tcp
     chksum= 0x30bd
     src= 1.2.3.4
     dst= 4.3.2.1
     \options\
###[ TCP ]###
        sport= 12345
        dport= 4443
        seq= 3222
        ack= 1111
        dataofs= 5L
        reserved= 0L
        flags= PA
        window= 8192
        chksum= 0x1835
        urgptr= 0
        options= []
###[ Raw ]###
           load= '\x16\x03\x01\x00\x04\x01\x00\x00\x00'

第三个数据包是在没有 ssl 层的情况下创建的,但在 tcp dport=443 上,当我使用 show2() 时,ssl 层就在那里,我没想到

p3 = Ether()/IP(src="1.2.3.4", dst='4.3.2.1',flags="DF")/TCP(sport=12345, dport=443, flags="PA", ack=1111, seq=3222)/Raw(load="g\x05ZN`")
p3.show2()


###[ Ethernet ]###
  dst= 00:26:52:ce:5f:49
  src= 34:23:87:20:76:59
  type= IPv4
###[ IP ]###
     version= 4L
     ihl= 5L
     tos= 0x0
     len= 45
     id= 1
     flags= DF
     frag= 0L
     ttl= 64
     proto= tcp
     chksum= 0x30c1
     src= 1.2.3.4
     dst= 4.3.2.1
     \options\
###[ TCP ]###
        sport= 12345
        dport= https
        seq= 3222
        ack= 1111
        dataofs= 5L
        reserved= 0L
        flags= PA
        window= 8192
        chksum= 0x2189
        urgptr= 0
        options= []
###[ SSL/TLS ]###
           \records\
###[ Raw ]###
              load= 'g\x05ZN`'

问题:

  1. 如何制作 ssl 层出现在 443 以外的不同 dport 中的数据包?

  2. 为什么原始数据出现在 dport = 443 的 SSL 层中

  3. 我是否坚持使用 dport 443 进行 ssl/tls?

  4. 在不使用 ssl/tls 时,我是否也坚持使用 !443 dport?

其他可能相关的信息

scapy 版本 2.3.1

scapy-ssl_tls-version 1.2.2

安装方法手册:

install requirements from requirements.txt
copy scapy_ssl_tls/* to scapy_installation/scapy/layers
modify scapy_installation/scapy/config.py to autoload SSL/TLS

【问题讨论】:

    标签: python ssl scapy tls1.2


    【解决方案1】:
    1. 使用bind_layers(TCP, SSL, dport=4443)将ssl层绑定到您的端口(另见scapy-ssl_tls绑定)否则scapy不会尝试将您的流解析为SSL。如果您不想将 SSL 绑定到 dport,而只想获得对象的未序列化概览,请使用 .show() 而不是 .show2(),这适用于任何端口。
    2. 这实际上看起来像一个错误,因为如果没有有效 tlsrecord 的痕迹,ssl 解析器应该会退出。请file a bug with the project
    3. 不,见 1,2
    4. 不,见 2,2

    【讨论】:

      猜你喜欢
      • 2023-02-09
      • 2011-07-29
      • 2014-04-01
      • 2014-08-18
      • 2021-01-16
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 2019-03-23
      相关资源
      最近更新 更多