如何从客户端发送无效密码到服务器?
在客户端你好,我希望客户端发送一组无效的密码套件。在wireshark上,这是我正在寻找的输出。如何从客户端发送无效密码到服务器?
要做到这一点,我想我必须编辑从客户端发送到服务器的cipher list
。我知道cipher list
下的SSL_CTX_new()
方法设置在ssl/ssl_lib.c
line 1768
的SSL_CTX
对象,即线下:
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_create_cipher_list,而是重写协商阶段(其中密码发送),并发送任何你想要的无效密码。换句话说,任何不在this list。
谢谢,是的,我试图覆盖客户端密码的有效性检查。但是,有太多的依赖关系,并且代码流很混乱。我正在寻找最简单的方法来做到这一点。 – 2015-03-05 05:00:38
符合条件的TLS客户端只能发送客户端支持的密码套件。它不能发送它不支持的密码套件。来自TLS 1.2, RFC 5246:
7.4.1.2。客户问候
...
的密码套件列表,从客户到 客户问候消息中的服务器传递,包含在客户端的 秩序的加密算法 通过客户支持的组合偏好(喜欢选择第一)...
cipher_suites
这是由0所支持的加密选项列表客户端,首先客户的第一选择。如果session_id字段不为空(意味着会话恢复 请求),则该向量必须至少包含来自该会话的 的cipher_suite。值在附录A.5中定义。
因此,您的客户端需要指定它支持的密码套件。您可以明确选择您认为对您有用的内容,也可以依赖您的图书馆定义。例如,使用OpenSSL,你可以这样做:
SSL_CTX_set_cipher_list(ssl_ctx, "-ALL:HIGH");
如果你只需要做到这一点作为一种一次性的测试,你可以写,将接受来自客户端连接一个简单的TCP层代理的,使用期望的不受支持的列表对已(预先知道)的客户端密码套件列表进行RegEx替换,并将其转发到所需的服务器。选择你喜欢的语言来实现代理。我不确定这是否比修改代码更容易,但如果这符合您的目的,则会更清晰。
如果您确实希望客户端建立TLS会话,这将不起作用,因为这本质上是MITM攻击。这只是一种将不支持的密码发送到服务器并查看服务器如何反应的方法。
这个问题似乎是题外话题,因为它不是关于编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[超级用户](http://superuser.com/)或[信息安全堆栈交换](http://security.stackexchange.com/)会是一个更好的问题。 – jww 2015-03-02 11:59:57
@jww,这是一个编程问题。我已经编辑了上面的问题。 – 2015-03-04 10:07:25
等一下,你是在问如何跳过你的SSL库故意行为不端?还是你问如何指定你的客户端不支持的密码套件? – jschultz410 2015-03-05 05:30:57