[Ttssh2-commit] [7021] SSH_MSG_KEXINIT で、未確認だったパラメータをログに残すようにした。

Back to archive index

scmno****@osdn***** scmno****@osdn*****
2018年 1月 11日 (木) 22:20:07 JST


Revision: 7021
          http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7021
Author:   doda
Date:     2018-01-11 22:20:07 +0900 (Thu, 11 Jan 2018)
Log Message:
-----------
SSH_MSG_KEXINIT で、未確認だったパラメータをログに残すようにした。

何か問題が有った時等に確認できるようにする為。

Modified Paths:
--------------
    trunk/ttssh2/ttxssh/ssh.c

-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/ssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ssh.c	2018-01-11 13:20:04 UTC (rev 7020)
+++ trunk/ttssh2/ttxssh/ssh.c	2018-01-11 13:20:07 UTC (rev 7021)
@@ -4826,8 +4826,26 @@
 }
 
 
-// \x83L\x81[\x8C\xF0\x8A\xB7\x8AJ\x8En\x91O\x82̃`\x83F\x83b\x83N (SSH2_MSG_KEXINIT)
-// \x81\xA6\x93\x96\x8AY\x8A֐\x94\x82̓f\x81[\x83^\x92ʐM\x92\x86\x82ɂ\xE0\x8CĂ΂\xEA\x82Ă\xAD\x82\xE9\x89”\\x90\xAB\x82\xA0\x82\xE8
+/*
+ * \x83L\x81[\x8C\xF0\x8A\xB7\x8AJ\x8En\x91O\x82̃`\x83F\x83b\x83N (SSH2_MSG_KEXINIT)
+ * \x81\xA6\x93\x96\x8AY\x8A֐\x94\x82̓f\x81[\x83^\x92ʐM\x92\x86\x82ɂ\xE0\x8CĂ΂\xEA\x82Ă\xAD\x82\xE9\x89”\\x90\xAB\x82\xA0\x82\xE8
+ *
+ * SSH2_MSG_KEXINIT:
+ *   byte         SSH_MSG_KEXINIT
+ *   byte[16]     cookie (random bytes)
+ *   name-list    kex_algorithms
+ *   name-list    server_host_key_algorithms
+ *   name-list    encryption_algorithms (c2s)
+ *   name-list    encryption_algorithms (s2c)
+ *   name-list    mac_algorithms (c2s)
+ *   name-list    mac_algorithms (s2c)
+ *   name-list    compression_algorithms (c2s)
+ *   name-list    compression_algorithms (s2c)
+ *   name-list    languages (c2s)
+ *   name-list    languages (s2c)
+ *   boolean      first_kex_packet_follows
+ *   uint32       0 (reserved for future extension)
+ */
 static BOOL handle_SSH2_kexinit(PTInstVar pvar)
 {
 	char buf[1024];
@@ -5094,6 +5112,68 @@
 		goto error;
 	}
 
+	// \x8C\xBE\x8C\xEA(\x83N\x83\x89\x83C\x83A\x83\x93\x83g -> \x83T\x81[\x83o)
+	// \x8C\xBB\x8F\xF3\x82ł͖\xA2\x8Eg\x97p\x81B\x83\x8D\x83O\x82ɋL\x98^\x82\xB7\x82邾\x82\xAF\x81B
+	if (!grab_payload(pvar, 4)
+	 || !grab_payload(pvar, size = get_uint32(data))) {
+		// \x8C\xBE\x8C\xEA\x82\xCC name-list \x82\xAA\x8E\xE6\x82\xEA\x82Ȃ\xA2\x82Ƃ\xA2\x82\xA4\x8E\x96\x82\xCD KEXINIT \x83p\x83P\x83b\x83g\x82̃t\x83H\x81[\x83}\x83b\x83g\x8E\xA9\x91̂\xAA\x91z\x92\xE8\x8AO\x82ł\xA0\x82\xE8
+		// \x88ُ\xED\x82ȏ\xF3\x91Ԃł\xA0\x82邪\x81A\x92ʐM\x82ɕK\x97v\x82ȃA\x83\x8B\x83S\x83\x8A\x83Y\x83\x80\x82͂\xB7\x82łɃl\x83S\x8Dς݂ŒʐM\x8E\xA9\x91͍̂s\x82\xA6\x82\xE9\x81B
+		// \x8D\xA1\x82܂ł͂\xB1\x82̕\x94\x95\xAA\x82̃`\x83F\x83b\x83N\x82\xF0\x8Ds\x82\xC1\x82Ă\xA2\x82Ȃ\xA9\x82\xC1\x82\xBD\x82̂ŁA\x8Cx\x8D\x90\x82\xF0\x8BL\x98^\x82\xB7\x82\xE9\x82݂̂ŏ\x88\x97\x9D\x82𑱍s\x82\xB7\x82\xE9\x81B
+		logputs(LOG_LEVEL_WARNING, __FUNCTION__ ": truncated packet (language client to server)");
+		goto skip;
+	}
+	data += 4;
+
+	if (size >= sizeof(buf)) {
+		logputs(LOG_LEVEL_WARNING, __FUNCTION__ ": server proposed language (client to server) is too long.");
+	}
+	strncpy_s(buf, sizeof(buf), data, _TRUNCATE);
+	data += size;
+
+	logprintf(LOG_LEVEL_VERBOSE, "server proposal: language client to server: %s", buf);
+
+	// \x8C\xBE\x8C\xEA(\x83T\x81[\x83o -> \x83N\x83\x89\x83C\x83A\x83\x93\x83g)
+	// \x8C\xBB\x8F\xF3\x82ł͖\xA2\x8Eg\x97p\x81B\x83\x8D\x83O\x82ɋL\x98^\x82\xB7\x82邾\x82\xAF\x81B
+	if (!grab_payload(pvar, 4)
+	 || !grab_payload(pvar, size = get_uint32(data))) {
+		// \x8C\xBE\x8C\xEA(\x83N\x83\x89\x83C\x83A\x83\x93\x83g -> \x83T\x81[\x83o) \x82Ɠ\xAF\x97l\x82ɁA\x96\xE2\x91肪\x82\xA0\x82\xC1\x82Ă\xE0\x8Cx\x8D\x90\x82݂̂Ƃ\xB7\x82\xE9\x81B
+		logputs(LOG_LEVEL_WARNING, __FUNCTION__ ": truncated packet (language server to client)");
+		goto skip;
+	}
+	data += 4;
+
+	if (size >= sizeof(buf)) {
+		logputs(LOG_LEVEL_WARNING, __FUNCTION__ ": server proposed language (server to client) is too long.");
+	}
+	strncpy_s(buf, sizeof(buf), data, _TRUNCATE);
+	data += size;
+
+	logprintf(LOG_LEVEL_VERBOSE, "server proposal: language server to client: %s", buf);
+
+	// first_kex_packet_follows:
+	// KEXINIT \x83p\x83P\x83b\x83g\x82̌\xE3\x82ɁA\x83A\x83\x8B\x83S\x83\x8A\x83Y\x83\x80\x82̃l\x83S\x8C\x8B\x89ʂ𐄑\xAA\x82\xB5\x82Č\xAE\x8C\xF0\x8A\xB7\x83p\x83P\x83b\x83g\x82𑗂\xC1\x82Ă\xA2\x82邩\x81B
+	// SSH_MSG_KEXINIT \x82̌\xE3\x82̌\xAE\x8C\xF0\x8A\xB7\x82̓N\x83\x89\x83C\x83A\x83\x93\x83g\x91\xA4\x82\xA9\x82瑗\x82\xE9\x82̂ŃT\x81[\x83o\x91\xA4\x82\xAA 1 \x82ɂ\xB7\x82鎖\x82͂Ȃ\xA2\x82͂\xB8\x81B
+	if (!grab_payload(pvar, 1)) {
+		// \x8C\xBE\x8C\xEA(\x83N\x83\x89\x83C\x83A\x83\x93\x83g -> \x83T\x81[\x83o) \x82Ɠ\xAF\x97l\x82ɁA\x96\xE2\x91肪\x82\xA0\x82\xC1\x82Ă\xE0\x8Cx\x8D\x90\x82݂̂Ƃ\xB7\x82\xE9\x81B
+		logputs(LOG_LEVEL_WARNING, __FUNCTION__ ": truncated packet (first_kex_packet_follows)");
+		goto skip;
+	}
+	if (data[0] != 0) {
+		// \x91O\x8Fq\x82̂悤\x82ɃT\x81[\x83o\x91\xA4\x82\xCD 0 \x88ȊO\x82ɂ\xB7\x82鎖\x82͂Ȃ\xA2\x82͂\xB8\x82Ȃ̂ŁA\x8Cx\x8D\x90\x82\xF0\x8BL\x98^\x82\xB7\x82\xE9\x81B
+		logprintf(LOG_LEVEL_WARNING, __FUNCTION__ ": first_kex_packet_follows is not 0. (%d)", data[0]);
+	}
+	data++;
+
+	// reserved: \x8C\xBB\x8F\xF3\x82͏\xED\x82\xC9 0 \x82ƂȂ\xE9\x81B
+	if (!grab_payload(pvar, 4)) {
+		// \x8C\xBE\x8C\xEA(\x83N\x83\x89\x83C\x83A\x83\x93\x83g -> \x83T\x81[\x83o) \x82Ɠ\xAF\x97l\x82ɁA\x96\xE2\x91肪\x82\xA0\x82\xC1\x82Ă\xE0\x8Cx\x8D\x90\x82݂̂Ƃ\xB7\x82\xE9\x81B
+		logputs(LOG_LEVEL_WARNING, __FUNCTION__ ": truncated packet (reserved)");
+		goto skip;
+	}
+	if ((size = get_uint32(data)) != 0) {
+		logprintf(LOG_LEVEL_INFO, __FUNCTION__ ": reserved data is not 0. (%d)", size);
+	}
+
 skip:
 	// \x8C\x88\x92肵\x82\xBD\x95\xFB\x8E\xAE\x82\xF0\x83\x8D\x83O\x82ɏo\x97\xCD
 	logprintf(LOG_LEVEL_VERBOSE, "KEX algorithm: %s",



Ttssh2-commit メーリングリストの案内
Back to archive index