[加入收藏]
[设为首页]
 
  首 页 | 文档集锦 | 精品荟萃 | 专 栏 | 搜 索 | 论 坛 2024.04.26  
  枫林在线 >> MySQL Authentication Bypass (转载) 本文已被浏览13621  
 
MySQL Authentication Bypass (转载) [转载]
(2004-07-07 22:03:42) 转载:tshxp.
发信人:tshxp@smth.org-SPAM.no (La Traviata),信区:cn.bbs.comp.securi
ty
标  题:MySQL Authentication Bypass (转载)
发信站:BBS 水木清华站
转信站:FengLin!netnews.sdu.edu.cn!maily.cic.tsinghua.edu.cn!SMTH

【 以下文字转载自 BugTraqML 讨论区 】
发信人: nisr@nextgenss.com (NGSSoftware Insight Security Research), 信
区: BugTraqML
标  题: MySQL Authentication Bypass
发信站: NCTU CSIE FreeBSD Server (Tue Jul  6 05:53:52 2004)
转信站: SMTH!maily.cic.tsinghua.edu.cn!whnet.dhs.org!netnews.sdu.edu.c
n!news-ou
出  处: freebsd.csie.nctu.edu.tw

NGSSoftware Insight Security Research Advisory

Name: MySQL Authentication Bypass / Buffer Overflow
Systems Affected: MySQL 4.1 prior to 4.1.3, and MySQL 5.0.
Severity: High
Vendor URL: http://www.mysql.com
Author: Chris Anley [ chris@ngssoftware.com ]
Date of Advisory: 1st July 2004

Whitepaper
**********

We have written a paper that accompanies this advisory. The paper
provides details of various MySQL lockdown techniques, and a review of

common attacks on MySQL, including SQL injection. The paper can be fou
nd
at

http://www.ngssoftware.com/papers/HackproofingMySQL.pdf

Description
***********

"The MySQL database server is the world's most popular open sourc
e
database." [www.mysql.com].

This advisory details a bug that allows a remote user to entirely bypa
ss
the MySQL password authentication mechanism, allowing them to authenti
cate
as a MySQL user without knowing that user's password. Using a similar

method, a stack buffer used in the authentication mechanism can be
overflowed, though exploitation of the overflow is not straightforward
.

Details
*******

MySQL 4.1 Authentication Bypass

By submitting a carefully crafted authentication packet, it is possibl
e
for an attacker to bypass password authentication in MySQL 4.1.

From check_connection (sql_parse.cpp), line ~837:

  /*
    Old clients send null-terminated string as password; new clients s
end
    the size (1 byte) + string (not null-terminated). Hence in case of

empty
    password both send '\0'.
  */
  uint passwd_len= thd->client_capabilities & CLIENT_SECURE_CON
NECTION ?
    *passwd++ : strlen(passwd);


Provided 0x8000 is specified in the client capabilities flags, the use
 can
specify the passwd_len field of their choice. For this attack, we will

choose 0x14 (20) which is the expected SHA1 hash length.

Several checks are now carried out to ensure that the user is
authenticating from a host that is permitted to connect. Provided thes
e
checks are passed, we reach:

        /* check password: it should be empty or valid */
        if (passwd_len == acl_user_tmp->salt_len)
        {
          if (acl_user_tmp->salt_len == 0 ||
              acl_user_tmp->salt_len == SCRAMBLE_LENGTH &&

              check_scramble(passwd, thd->scramble, acl_user_tmp-&g
t;salt) == 0 ||
              check_scramble_323(passwd, thd->scramble,
                                 (ulong *) acl_user_tmp->salt) == 0
)
          {
            acl_user= acl_user_tmp;
            res= 0;
          }
        }


the check_scramble function fails, but within the check_scramble_323
function we see:

my_bool
check_scramble_323(const char *scrambled, const char *message,
                   ulong *hash_pass)
{
  struct rand_struct rand_st;
  ulong hash_message[2];
  char buff[16],*to,extra;                      /* Big enough for chec
k */
  const char *pos;

  hash_password(hash_message, message, SCRAMBLE_LENGTH_323);
  randominit(&rand_st,hash_pass[0] ^ hash_message[0],
             hash_pass[1] ^ hash_message[1]);
  to=buff;
  for (pos=scrambled ; *pos ; pos++)
    *to++=(char) (floor(my_rnd(&rand_st)*31)+64);
  extra=(char) (floor(my_rnd(&rand_st)*31));
  to=buff;
  while (*scrambled)
  {
    if (*scrambled++ != (char) (*to++ ^ extra))
      return 1;                                 /* Wrong password */
  }
  return 0;
}


At this point, the user has specified a 'scrambled' string that is as 
long
as they wish. In the case of the straightforward authentication bypass
,
this is a zero-length string. The final loop compares each character i
n
the 'scrambled' string against the string that mysql knows is the corr
ect
response, until there are no more characters in 'scrambled'. Since the
re
are no characters *at all* in 'scrambled', the function returns '0'
immediately, allowing the user to authenticate with a zero-length stri
ng.

This bug is relatively easy to exploit, although it is necessary to wr
ite
a custom MySQL client in order to do so.

In addition to the zero-length string authentication bypass, the
stack-based buffer 'buff' can be overflowed by a long 'scramble' strin
g.
The buffer is overflowed with characters output from my_rnd(), a pseud
o
random number generator. The characters are in the range 0x40..0x5f. O
n
some platforms, arbitrary code execution is possible, though the explo
it
is complex and requires either brute force, or knowledge of at least o
ne
password hash.

Fix Information and workarounds
*******************************

MySQL AB were contacted on the 1st of June 2004 and the patch for this
 bug
was present in the source code by the 2nd of June. Since MySQL prefer

users to install via pre-built binary packages, NGS have delayed the
release of this advisory until appropriate 'patch' packages were
available.

MySQL AB have fixed this bug in version 4.1.3, and the most recent bui
lds
of version 5.0.

In addition to patching, various workarounds are possible for this bug
.
The attacker must know or be able to guess the name of a user in order

for this attack to work, so renaming the default MySQL 'root' account 
is
a reasonable precaution. Also, the account in question must be accessi
ble
from the attacker's host, so applying ip-address based login restricti
ons
will also mitigate this bug.

A check for this vulnerability has been added to Typhon III, NGSSoftwa
re's
advanced vulnerability assessment scanner. For more information please

visit the NGSSoftware website at http://www.ngssoftware.com/


About NGSSoftware
*****************

NGSSoftware design, research and develop intelligent, advanced applica
tion
security assessment scanners. Based in the United Kingdom, NGSSoftware

have offices in the South of London and the East Coast of Scotland.
NGSSoftware's sister company NGSConsulting, offers best of breed secur
ity
consulting services, specializing in application, host and network
security assessments.

http://www.ngssoftware.com/

Telephone +44 208 401 0070
Fax +44 208 401 0076

enquiries@ngssoftware.com















========== * * * * * ==========
已有3人发表评论
相关评论】 【关闭窗口
关于我们 - 联系我们 - 隐私保护 - 帮助信息
枫林在线 版权所有
Copyright © 2003-2012 www.FengLin.info, All rights reserved.