1

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

在此处输入图像描述

为此,我想我必须编辑cipher list从客户端发送到服务器的内容。我知道是为方法下的对象cipher list设置的,即下面的行:SSL_CTXline 1768ssl/ssl_lib.cSSL_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方法中的一些代码,这些代码在第 1353 行定义ssl/ssl_ciph.h,但我无法弄清楚这一点。

任何帮助表示赞赏!

4

3 回答 3

1

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

于 2015-03-05T01:56:40.817 回答
0

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

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

于 2015-03-05T15:52:56.277 回答
0

符合标准的 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");
于 2015-03-05T05:23:48.043 回答