【问题标题】:How to send invalid ciphers from client to server?如何将无效密码从客户端发送到服务器?
【发布时间】:2015-05-02 14:34:53
【问题描述】:

在客户端你好,我希望客户端发送一组无效密码套件。在wireshark 上,这是我正在寻找的那种输出。

为此,我想我必须编辑从客户端发送到服务器的cipher list。我知道cipher list是在ssl/ssl_lib.cline 1768中的SSL_CTX对象在SSL_CTX_new()方法下设置的,即下面的行:

ssl_create_cipher_list(ret->method,
         &ret->cipher_list,&ret->cipher_list_by_id,
         meth->version == SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIST);

我该如何进行?我假设我必须修改 ssl_create_cipher_list 方法中的一些代码,该方法在 ssl/ssl_ciph.h 的第 1353 行定义,但我无法弄清楚。

任何帮助表示赞赏!

【问题讨论】:

标签: c ssl encryption openssl rc4-cipher


【解决方案1】:

我应该认为,与其打扰 ssl_create_cipher_list,不如覆盖协商阶段(发送密码的地方)并发送您想要的任何无效密码。换句话说,任何不在this list 上的东西。

【讨论】:

  • 谢谢,是的,我试图覆盖客户端密码的有效性检查。但是,依赖项太多,代码流变得非常混乱。我一直在寻找最简单的方法。
【解决方案2】:

符合标准的 TLS 客户端只能发送客户端支持的密码套件。它不能发送它不支持的密码套件。来自TLS 1.2, RFC 5246

7.4.1.2。客户您好

...

密码套件列表,从客户端传递到服务器 ClientHello 消息,包含密码的组合 客户支持的算法,按客户的顺序排列 偏好(最喜欢的选择优先)...

密码套件

这是支持的加密选项列表 客户,首先是客户的第一偏好。如果 session_id 字段不为空(表示会话恢复 请求),这个向量必须至少包括来自的 cipher_suite 那个会议。值在附录 A.5 中定义。

因此,您的客户需要指定它支持的密码套件。您可以明确选择您认为对您的目的有效的那些,或者您可以依赖您的库的定义。例如,使用 OpenSSL,您可以执行以下操作:

SSL_CTX_set_cipher_list(ssl_ctx, "-ALL:HIGH");

【讨论】:

    【解决方案3】:

    如果您只需要作为一种一次性测试来执行此操作,您可以编写一个简单的 TCP 层代理来接受来自客户端的连接,使用 RegEx 替换(预先知道的)客户端密码套件列表使用所需的不受支持的列表,并将其转发到所需的服务器。选择您喜欢的语言来实现代理。我不确定这是否比修改代码更容易,但如果这符合您的目的,它会更干净一些。

    如果您确实希望客户端建立 TLS 会话,这将不起作用,因为这本质上是 MITM 攻击。这只是将不受支持的密码发送到服务器并查看服务器如何反应的一种方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 2021-08-01
      • 1970-01-01
      相关资源
      最近更新 更多