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, <aglen); + 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; }