受影响系统:
MySQL AB MySQL <= 5.0.20
不
受影响系统:
MySQL AB MySQL 5.0.21
描述:
BUGTRAQ ID: 17780
CVE(CAN) ID: CVE-2006-1516,CVE-2006-1517
MySQL是一款使用非常广泛的开放源代码关系数据库系统,拥有各种平台的运行版本。
1 信息泄漏漏洞
通过创建特制的畸形登录报文,远程攻击者可以使用未初始化的内存内容填充初始的数据库名。
假设MySql Server允许匿名访问。如果以用户“wisec”和口令“s”使用数据库“wisecdb”的话,正常的客户端会发送如下报文:
---------------------------------------------------------------
43 00 00 01 0d a6 03 00 00 00 00 01 08 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 77 69 73 65 63 00 14 aa 69 23 07 2a
ff 99 61 a3 c4 5f 04 66 3b 32 ef a1 f2 b6 59 77
69 73 65 63 64 62 00
C . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . w i s e c . . . i # . *
. . a . . _ . f ; 2 . . . . Y w
i s e c d b .
---------------------------------------------------------------
但在sql_parse.cc的993行check_connection(THD *thd)函数的代码中:
--
char *user= end;
char *passwd= strend(user)+1;
char *db= passwd;
char db_buff[NAME_LEN+1]; // buffer to store db in
utf8
char user_buff[USERNAME_LENGTH+1]; // buffer to store user
in utf8
uint dummy_errors;
uint passwd_len= thd->client_capabilities & CLIENT_SECURE_CONNECTION ?
*passwd++ : strlen(passwd);
db= thd->client_capabilities & CLIENT_CONNECT_WITH_DB ?
db + passwd_len + 1 : 0;
[1]
/* Since 4.1 all database names are stored in utf8 */
if (db)
{
db_buff[copy_and_convert(db_buff, sizeof(db_buff)-1,
system_charset_info,
db, strlen(db),
thd->charset(), &dummy_errors)]= 0;
db= db_buff;
}
--
可见[1]处缺少对报文结构的检查。
如果用任何其他字节(如“wisec0”)替换用户名“wisec\0”末尾的空字节的话,就会为用户分配一些报文内容,为db分配一些packet_length之外的内存。
因此如果能够发送特制的报文的话,就可以得到类似于以下的错误消息:
Access denied for user ''@localhost to database 'lqt'
通过更改报文长度(db长度),恶意用户就可以获得敏感信息。
--转自