如何从客户端向服务器发送无效密码?

时间:2015-03-02 09:34:36

标签: c ssl encryption openssl rc4-cipher

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

enter image description here

为此,我想我必须编辑从客户端发送到服务器的cipher list。我知道在cipher list方法下SSL_CTX line 1768 ssl/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

我该怎么办?我假设我必须修改ssl/ssl_ciph.h方法中的某些代码,该方法在{{1}}的第1353行定义,但我无法弄清楚这一点。

任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:1)

我认为不要再烦扰ssl_create_cipher_list,而是覆盖协商阶段(发送密码的地方)并发送你想要的任何无效密码。换句话说,任何不在this list上的东西。

答案 1 :(得分:0)

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

  

7.4.1.2。客户问候

     

...

     

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

     

cipher_suites

     

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

因此,您的客户端需要指定它支持的密码套件。您可以明确选择您认为适合您的目的,也可以依赖图书馆的定义。例如,使用OpenSSL,您可以执行以下操作:

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

答案 2 :(得分:0)

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

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