[Ttssh2-commit] [7046] USERAUTH_BANNER 表示テスト #37544

Back to archive index

scmno****@osdn***** scmno****@osdn*****
2018年 2月 21日 (水) 12:01:55 JST


Revision: 7046
          http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7046
Author:   doda
Date:     2018-02-21 12:01:55 +0900 (Wed, 21 Feb 2018)
Log Message:
-----------
USERAUTH_BANNER 表示テスト #37544

とりあえずバナーを VT ウィンドウに表示するようにした。
ポップアップウィンドウで表示するという手もあるけれどウザい?

端末上に表示するのならば制御文字を潰す必要があるけれどまだやってない。
あと相手が改行を LF のみで送ってくる(事が多い)ので LF -> CRLF 変換も必要かも。

他のハンドラ関数を見てて思ったけれど、サーバのデータを信頼しすぎで、
内容のチェックを全然してないから脆弱すぎ。*Damn*.

Ticket Links:
------------
    http://sourceforge.jp/projects/ttssh2/tracker/detail/37544

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

-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/ssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ssh.c	2018-02-21 03:01:52 UTC (rev 7045)
+++ trunk/ttssh2/ttxssh/ssh.c	2018-02-21 03:01:55 UTC (rev 7046)
@@ -6934,9 +6934,51 @@
 
 static BOOL handle_SSH2_userauth_banner(PTInstVar pvar)
 {
-	//
-	logputs(LOG_LEVEL_VERBOSE, "SSH2_MSG_USERAUTH_BANNER was received.");
+	int leftlen, msglen, ltaglen;
+	char *data, *msg, *ltag;
 
+	logputs(LOG_LEVEL_INFO, "SSH2_MSG_USERAUTH_BANNER was received.");
+
+	data = pvar->ssh_state.payload;
+	leftlen = pvar->ssh_state.payloadlen - 1;
+
+	if (leftlen < 4) {
+		logprintf(LOG_LEVEL_WARNING, __FUNCTION__ ": banner payload corrupted. leftlen=%d", leftlen);
+		return TRUE;
+	}
+
+	msg = buffer_get_string(&data, &msglen);
+	leftlen -= msglen + 4;
+
+	if (msglen > 0) {
+		pvar->ssh_state.payload_datastart = 4;
+		pvar->ssh_state.payload_datalen = msglen;
+		logprintf(LOG_LEVEL_NOTICE, "Banner len: %d, Banner message: %s.", msglen, msg);
+	}
+	else {
+		logprintf(LOG_LEVEL_VERBOSE, "Empty banner");
+	}
+
+	if (leftlen < 4) {
+		logprintf(LOG_LEVEL_WARNING, __FUNCTION__ ": langtag payload corrupted. leftlen=%d", leftlen);
+		return TRUE;
+	}
+
+	ltag = buffer_get_string(&data, &ltaglen);
+	leftlen -= ltaglen + 4;
+
+	if (ltaglen > 0) {
+		logprintf(LOG_LEVEL_NOTICE, "Banner ltag len: %d, Banner Language Tag: %s", ltaglen, ltag);
+	}
+	else {
+		logprintf(LOG_LEVEL_VERBOSE, "Empty Language Tag");
+	}
+
+
+	if (leftlen > 0) {
+		logprintf(LOG_LEVEL_NOTICE, __FUNCTION__ ": extra payload found. leftlen=%d, leftdata[0]=%02x", leftlen, data[0]);
+	}
+
 	return TRUE;
 }
 



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